使用Docker部署MongoDB副本集

使用Docker部署MongoDB副本集

mongodb從4.0開始支持事務,最近在使用mongodb的過程中,發現在單節點狀態下,無法支持事務,只有配置了副本集才支持事務,故留下搭建MongoDB單機三節點副本集的記錄。

1. 創建目錄

mkdir -p /apps/mongo-rs/{data01,data02,data03,key,backup}

2. 創建密鑰

cd /apps/mongo-rs
openssl rand -base64 756 > key/mongo-rs.key
chmod 400 key/mongo-rs.key 
chown polkitd:input key/mongo-rs.key 

3. 創建mongodb三節點

docker run --name mongo-rs01 -p 30010:27017 -v /apps/mongo-rs/data01:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all

docker run --name mongo-rs02 -p 30011:27017 -v /apps/mongo-rs/data02:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all

docker run --name mongo-rs03 -p 30012:27017 -v /apps/mongo-rs/data03:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all

創建了三個mongodb節點,並指定使用相同密鑰文件

4. 配置副本集

docker exec -it mongo-rs01 bash

mongo
use admin
db.auth("admin","PWD2020")

var config={
     _id:"mongo-rs",
     members:[
         {_id:0,host:"192.168.1.201:30010"},
         {_id:1,host:"192.168.1.201:30011"},
		 {_id:2,host:"192.168.1.201:30012",arbiterOnly:true}
]};
rs.initiate(config)
rs.status()

arbiterOnly:true 表示該節點爲仲裁節點,只負責投票,不負責存儲數據
執行rs.initiate()方法,初始化副本集,同時執行該方法的節點爲主節點
rs.status()可查看副本集節點狀態

5. 驗證數據同步

在主節點插入數據

use test
db.test.insert({name:"mongo rs test"})

在從節點查詢數據

docker exec -it mongo-rs02 bash

mongo
use admin
db.auth("admin","PWD2020")
db.getMongo().setSlaveOk()
use test
db.test.find()

以上完成副本集的搭建

6. 附:其它操作

6.1 備份數據

docker exec -it mongo-rs01 bash
mongodump -d test-u admin -p PWD2020 --authenticationDatabase=admin -o /data/backup

6.2 恢復數據

docker exec -it mongo-rs01 bash
mongorestore -d test -u admin -p PWD2020 --authenticationDatabase=admin --dir /data/backup/test

6.3 創建用戶

docker exec -it mongo-rs01 bash
mongo
use admin
db.auth("admin","PWD2020");
use test
db.createUser({ user: 'test', pwd: 'test2020', roles: [ { role: "readWrite", db: "test" } ] });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章