docker添加mongo4.0.3並配置復制集


1、創建docker 具體略過 自行百度

2、創建數據持久化目錄文件(/data/mongo0是個例子 命名隨意)  拉取mongo docker pull mongo:4.0.3

3、啟動容器

1 docker run --name mongo0 -p 27017:27017 --restart=always -v /data/mongo:/data/db -d mongo:4.0.3 --replSet "rs0"
2 -v /etc/localtime:/etc/localtime:ro 同步主機時間
3 --name 指定容器名稱
4 -p 映射容器端口
5 -v 將服務器文件掛載到容器
6 -d 后台運行
7 --replSet "rs0" 設置集群的名稱為rs0 這個名字可以隨便起 但是需要保證參與集群的數據庫名字一直

如果希望容器隨docker啟動而啟動 可添加

--restart=always

如果要設置已經啟動的容器可以使用一下命令

docker container update --restart=alway 容器名

如果是修改mongod.conf 需要添加

1 replication: //刪除“#”,開啟復制集功能
2 replSetName: test-rc //名稱為test-rc


4、單機情況下需要查看mongoDB的在docker中的ip(當然可以設置不同的端口啟用該步驟)

docker inspect mongo0 | grep IPAddress 
moogo0 為容器的名字

5、進入容器

docker exec -it mongo0 bash

  

特別提醒:在數據庫使用復制集之前 請先備份好數據 以免造成不必要的損失

./mongodump -o /data/export/ 備份所有數據庫 (需要在mongo的bin目錄下執行,也可使用絕對路徑執行)
./mongorestore -h ip地址 -d zz_spiders /data/export/zz_spiders/
-h 為需要恢復的服務器 -d為指定數據庫 /data/export/zz_spiders/ 為備份文件所在地址(注意 批量備份后,仍需要單個文件恢復,否則會出現文件路徑錯誤提示)

 

6、登錄mongoDB

1 執行命令如下
2 rs.initiate( {_id : "rs0",members: [{ _id: 0, host: "172.17.0.2:27017" },{ _id: 1, host: "172.17.0.3:27017" },{ _id: 2, host: "172.17.0.4:27017" }]})
3 可以使用 {_id:0,host:'127.0.0.1:10002',priority:1} 指定主節點(多個節點 priority越高的 會成為主節點)
4 _id:復制集的名稱。必須與啟動 mongod 的 --replSet 一致
5 members:成員配置文件的列表。
6 members[n]._id:用來識別成員的 id 不可以重復
7 members[n].host:成員對應的 host:port 第四步中得到的ip

 

7、使用rs.status();查看集群狀態

 

8、從庫默認沒有讀寫權限

1 需要進入從庫的mongoDB執行rs.slaveOk();或者db.getMongo().setSlaveOk();
2 但是但是但是!!!
3 只有當次生效!只有當次生效!只有當次生效!
4 如果需要永久生效 可以依次執如下命令
5 find / -name .mongorc.js
6 vim /home/shengyang/.mongorc.js
7 添加內容
8 rs.slaveOk();

 

強制更換主節點辦法
http://www.mongoing.com/docs/tutorial/force-member-to-be-primary.html

1 注:
2 在搭建過程中,遇到一個問題
3 當將兩個從節點停掉之后 在主使用rs.stepDown(120)將現有主節點切換為從節點 導致主節點丟失,該情況下 可以將停掉的一個從節點重啟,此時主節點會自動選出,一位復制集的規則是必須有兩台可用的數據庫,才能夠自動選舉主從節點。
4 另:本篇未涉及投票節點,感興趣的可自行搜索相關文檔即可
5 多講一句:本篇為4.0.3版本,4.0版本以下的相關命令 可能會失效! //經測試,個人操作原因,需要在執行 rs.reconfig();時添加"protocolVersion" : 1  
比如這樣:rs.reconfig( {_id : "rs0", "protocolVersion" : 1, members: [{ _id: 0, host: "192.168.1.64:27017",priority:2 },{ _id: 1, host: "192.168.1.50:27017" },{ _id: 2, host: "192.168.1.51:27017" }]})
如果需要非主節點執行需要添加{ "force": true } 例如 rs.reconfig(cfg, { "force": true })

 

//下面為設置已經啟動的mongoDB的數據

 

非docker環境 (當前目錄在data)

 

mkdir core
cd core
//生成keyfile
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile

mongod.conf中添加(注意json的格式)

1 security:
2    keyFile: "/data/core/mongodb-keyfile"
3 replication:
4    replSetName: rs0

 

查看進程並關閉mongo

1 ps aux | grep mongo 
2 kill mongo進程
3 
4 當然也可以進入mongo依次執行(推薦)
5 use admin
6 db.shutdownServer();
7 來關閉mongo

 

重啟mongo

 

將mongodb-keyfile復制到其他mongo服務器
執行

chmod 600 mongodb-keyfile

如果是docker 還需要執行

chown 999 mongodb-keyfile

普通環境下配置mongod.conf同上


docker環境下執行

1 docker run --name mongo -p 27017:27017 --restart=always -v /etc/localtime:/etc/localtime:ro -v /data/mongo:/data/db -v /data/core/mongodb-keyfile:/opt/mongodb-keyfile -d mongo:4.0.3 --smallfiles --keyFile=/opt/mongodb-keyfile --replSet "rs0"
2 
3 --smallfiles 開啟驗證
4 --keyFile 設置統一的key

 

進入主節點 auth驗證之后 執行

rs.add('從節點ip:從節點端口')

 

至此,mongo復制集基本就搭建完成,並且數據已經開始同步了,本篇未涉及投票節點  

 

常用命令

設置從節點可用
mongo --port 27018(填寫實際的從節點地址)
rs.slaveOk()

查看集群狀態
mongo --port 27018
rs.status()

查看是否primary節點
mongo --port 27018
rs.isMaster()

查看集群配置
mongo --port 27018
rs.conf()

添加節點
mongo 主節點地址
rs.add({} | host地址) 例如rs.add('192.168.1.96:27017')

刪除節點
mongo 主節點地址
刪除前,建議先停止這個節點的服務
rs.remove(hostname) 例如rs.remove('192.168.1.96:27017')

更改集群配置
mongo 主節點地址
rs.reconfig({},{})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM