環境:
mongo版本:3.2.22
cnegtos6.5
第一部分:當前單節點情況分析
當前的單機,是使用常規的mongodb啟動方法,與集群版資料庫,埠等都不一致,資料庫是匯入的,沒有辦法做到拓展。
需要將當前節點重新搭建,使其資料庫,和使用埠同集群的一致,方便單機向集群的拓展。
經過網上資料查詢,發現單機節點的搭建有3種形式:
在單機上啟動乙個mongo例項(現在我們使用)
參考:在單機上以副本集的方式啟動乙個mongo例項(將選用這一種方式建立單節點)
參考:在單機上開多個埠和目錄,直接組成乙個集群在單機上執行
根據我的專案需求,決定使用第二種,方便進行拓展。
第二部分:建立單節點(以副本集的形式存在的單節點)
安裝mongo軟體
建立所需的目錄,檔案
編輯配置檔案
啟動mongo例項
修改hostname:
vim /etc/hosts
改為修改完重啟
副本集初始化
rs.initiate()
因為是單節點的副本集,所以上來就是主節點了。
建立資料庫
驗證單節點
第三部分:建立單節點(以分片集群的形式存在的單節點---使用配置檔案啟動方式)
參考:第四部分:建立單節點(以分片集群的形式存在的單節點---使用命令指令碼啟動方式)
第五部分:建立單節點(以副本集群的形式存在的單節點---多個程序的副本,與單個程序區別)
分別建立三個目錄r2,r3,r4
mkdir r2 r3 r4
按照如下命令啟動,注意副本集的名字不變,但是日誌目錄和資料存放目錄要發生相應的變化
啟動之後進行副本集配置
config=,,] } rs.initiate(config)
路由配置
use admin db.runcommand();
資料庫配置
分片,資料庫配置參考init_mongodb_gluster.sh和data.sh指令碼
第六部分:建立單節點(以副本集+分片集的形式存在的單節點---單個例項程序的副本,注意與第二部分的單個程序區別)
按照如下命令啟動
進行副本集配置
config=] }
rs.initiate(config)
進行分片集配置
/opt/mongodb/bin/mongo --port 30000 << eof use admin db.runcommand(); use adbox use fbbox use admin db.runcommand(); db.runcommand(); exit eof
/opt/mongodb/bin/mongo --port 30000 << eof use adbox db.createuser( ,,] }) db.auth("dev","dev") use fbbox db.createuser( ,,] }) db.auth("dev","dev") use admin db.createuser( ,,] }) db.auth("admin","admin") exit eof
執行php56 /var/www/core/tool/toolinit.php
開啟網頁確認是否成功
使用第五部分建立單節點,進行轉集群操作
第七部分:單節點轉集群
猜想:現在有兩種單節點的建立方法
單節點單例項方式,上面的第六部分
單節點多例項方式,上面的第五部分
對於a情況,將單節點轉成集群,需要再新增2個節點,即可形成乙個具有仲裁功能的集群
對於b情況,將單節點轉成集群,需要再新增4個節點,因為mongo的仲裁需要有過半的節點存在,當多例項節點掛掉以後,還要推舉出新節點,就需要4個存活的節點存在,才能形成乙個具有仲裁功能的集群
驗證a:
按照第六部分的操作步驟,現在乙個節點上建立單機例項
新新增兩個節點(不啟動路由程序),由於是單節點拓展,所以1中的節點就是主節點,在主節點中新增兩個節點
r4:primary> rs.add("192.168.1.65:29017")
r4:primary> rs.add("192.168.1.66:29017")
檢視集群狀態,等待節點變成從節點狀態
新節點啟動路由程序,新增路由
其實這裡不需要新增路由,使用副本集和分片集一條命令啟動的方式,新增了新的副本之後,自然就會在路由中新增,只需要等待即可
具體原因未知。
到這一步,通過第七部分的2操作,確定副本集生效,每一台節點的表內都有同樣的資料內容
等待新新增的節點變為從節點(此過程很漫長,資料越多時間越久)
在主節點上kill掉mongos,重啟mongos,將指向的配置ip由乙個變為三個
使用mongodump備份主節點的配置
新增從節點啟動配置服務,不啟動路由
在主節點將備份的配置資料匯入兩個從節點
兩個從節點啟動帶3ip的路由服務
這是會遇到第七部分第4個問題,解決即可
單機轉集群完畢
第七部分:問題解決
當路由由1個ip改為3個ip時,會報error: child process failed, exited with error number 5的錯誤,需做如下修改:
解決方法:
則需要將集群的配置匯入到新節點中,路由會成功啟動
function sync_config_from_master():20001 -d config -o /tmp/config /opt/mongodb/bin/mongorestore --host $:20001 -d config /tmp/config/config }
localip為集群內某一節點的ip,add_ip為新新增的節點ip
之後重啟路由即可。
檢視副本集是否生效
show dbs use dbname show collections db.coll.stats()
sharded欄位為true表示可分片。
插入資料到集合
for (i=1;i<=10000;i++) db.haha.insert()
檢視集合內資料數量
db.haha.count()
解決php56 /var/www/core/tool/toolinit.php執行失敗,網頁500錯誤
原因:php初始化失敗-》mongodb配置錯誤-》修改配置toolinit.php檔案
參考:**中的第22條
4. 在配置檔案恢復之後,會報如下錯誤
caused by :: mongos specified a different config database string : stored
解決方法:重啟mongod服務即可,三颱機器全部重啟
5. 當節點報mongos specified a different config 並且報could not find member to sync from時,可以檢視一下連線路由的ip是不是127.0.0.1,需要換成本地ip才行
如果做完上述操作,還是不能使用,報could not find member to sync from,則去檢查mongo資料庫的許可權,確保資料庫的資料夾的許可權時mongo,資料夾內的許可權為777許可權。
如果都沒有問題,這個可能等一會會好。
總結:到此,我們的需求,建立單節點,和單節點轉集群均都實現,然後集群的水平拓展也已實現,這樣乙個完整的鏈就形成了閉環。
在完成過程中,遇到了大量的問題,其實答案在我們查詢資料時已經很早的反覆出現,但是我們不懂其原理,沒有將一句文字與實際問題關聯起來,導致解決問題緩慢,磕磕絆絆。
解決問題的時候要多檢視日誌,尤其的開源的大型軟體,然後結合網上查詢資料,基本所有問題都可以解決。
搭建ceph集群(單節點)
軟體環境 centos7 x64 ceph版本 ceph deploy v1.5.37 ceph version 10.2.9 步驟1.修改主機名 即節點名 1 sed i hostname d etc sysconfig network echo hostname 主機名 etc sysconfi...
Docker安裝部署單節點MongoDB
docker pull docker.io mongo latestdocker run name mongo p 27017 27017 d docker.io mongo latest auth 首先建立資料夾用於掛載目錄 mkdir p docker mongo 賦予許可權 chmod 777...
如何建立MongoDB單節點例項
操作步驟 登入mongodb管理控制台。在左側導航欄,單擊副本集例項列表。在副本集例項列表頁面,單擊新建例項。選擇副本集 包年包月 或副本集 按量付費 選擇例項配置,引數說明如下表所示。單擊立即購買,進入訂單確認頁面。在確認訂單頁面,閱讀並勾選雲資料庫mongodb版服務協議,根據提示完成支付流程。...