將單機升級至副本集,我目前實踐的方法是使用新的服務器做為臨時的primary節點進行服務,通過備份還原的方法將數據同步到新搭建的服務器(最小程度的影響線上的服務)
完成后修改線上web的連接字符串,讓應用連接集群,如果有必要的話也可以將遷移期間產生的數據還原至新服務器
1.首先得准備兩台mongodb服務器,一個做為secondary節點(臨時做為primary節點),一個做為arbiter節點
在mongodb服務器中加入集群元素,keyfile文件是集群內服務器共用的
keyFile=/usr/local/mongodb/keyfile
replSet=rs0
可能需要修改keyfile的訪問權限
chmod 600 keyfile
2.初始化集群
config={ _id : "rs0", members: [ { _id: 0, host: "192.168.0.2:27017" }, { _id: 1, host: "192.168.0.3:27017",arbiterOnly:true} ] } rs.initiate(config)
3.完成后檢查集群的狀態
#查看現在集群的狀態
rs0:PRIMARY> rs.status();
#檢查是否是主節點
rs0:PRIMARY> rs.isMaster();
4.備份還原
1)進入原單機服務器備份 /usr/local/mongodb/bin/mongodump
2)壓縮打包 tar -zcvf backup2020.tar.gz backup2020
3)通過ftp上傳至新服務器
4)解壓 tar -zxvf backup2020.tar.gz
5)還原 /usr/local/mongodb/bin/mongorestore
6)修改web應用連接字符串,更新部署
5.正常運行后可以將原單機服務器加至集群,這里在同步之前需要將原單機服務器的data文件夾和log文件夾里面的內容刪除(在操作之前需要備份一下數據)
完成同步后,使用rs.stepDown(),將當前主庫降級,primary角色交給192.168.0.1
rs0:PRIMARY> rs.add("192.168.0.1:27017") rs0:PRIMARY> rs.stepDown()
6.強制關閉其中一個primary點后,另外一台服務器會成為primary節點
rs0:PRIMARY> db.shutdownServer();
7.設置副本集的優先級(該操作需要在primary節點進行)
首先通過rs.config()查看當前副本集的優先級情況
然后通過rs.reconfig(config)進行更新
rs0:PRIMARY> config=rs.conf()
rs0:PRIMARY> config.members[0].priority=3 rs0:PRIMARY> config.members[0].votes=1 rs0:PRIMARY> rs.reconfig(config);
當節點的投票數為0的時候無法設置優先級,需要修改節點的投票數
