docker 下部署mongodb Replica Set 叢集
部署個叢集是雞兒難啊,中間碰到的一個問題真是雪崩。本來用的overlay的方式來保證主機之間的網路互通,結果mongo生成叢集配置的時候,用的host是特碼容器的id,問題來了,我設定完mongo 的密碼之後,刪了容器重新啟動我的容器id變了,那原來叢集配置就不管用了,host不對了,,,,
部署問題
通過下邊命令,我們來啟動三個mongo服務。
docker run --rm --name mongo-master -v /data/mongo/db/:/data/db -v /data/mongo/configdb/:/data/configdb -p 27017:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --oplogSize 128
docker run --rm --name mongo-salve -v /data/mongo-salve/db/:/data/db -v /data/mongo-salve/configdb/:/data/configdb -p 27017:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --oplogSize 128
docker run --rm --name mongo-arbiter -v /data/mongo-arbiter/db/:/data/db -v /data/mongo-arbiter/configdb/:/data/configdb -p 27018:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --smallfiles --oplogSize 128
這樣,我們啟動了三個mongo服務:master,salve,arbiter。那麼按照正常邏輯,我們該需要配置叢集了,這個時候你看別的文章都是這樣寫的:
rs.initiate()
rs.add('10.20.40.252:27017')
rs.add('10.20.40.252:27018',true)//設定為仲裁節點
rs.conf()
rs.status()
然後,他們還會讓你測試:
docker exec -it mongo-master
rs.slaveOk()
use test
db.test.find()
docker exec -it mongo-salve
rs.slaveOk() //副本集預設僅primary可讀寫
use test
db.test.find()
看完美滋滋,效果不錯的嘛。
然後,還有的人讓你來設定密碼,把原來的mongo都幹掉啊,我們就加上--auth就能用啦!能用個屁:看下邊的host=f0cb98d38be2。這尼瑪什麼鬼?這不是容器的id嗎?那你想想,你幹掉容器之後,這個配置還有用?很明顯沒用了,,,
mongoreplset:PRIMARY> rs.conf()
{
"_id" : "mongoreplset",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "f0cb98d38be2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5af2da3ee83ec4a74f407407")
}
}
經常我一波搜尋和測試,發現瞭解決方法:參考連結,真是多虧了這個小哥哥,讓我解決了一天的困擾
因為我只有兩臺伺服器,所以我就在ip1上起了master,ip2上起了salve和arbiter。這樣,就能完全通過ip來配置啦!
config = {_id:"mongoreplset", version:1, members:[{_id:0, host:"ip1:27017", priority:5}, {_id:1, host:"ip2:27018", priority:2}, {_id:2, host:"ip2:27017", priority:3}]}
rs.initiate(config)
這樣,關於host的問題就解決啦!
驗證登入問題
預設在primary節點配置:
db.createUser({ user: 'admin', pwd: 'admin', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
注意,這並沒有結束,你需要啟動mongo的時候,指定同一個一個key_file。生成一個key_file,並指定許可權:
openssl rand -base64 756 > key_file
chmod 400 key_file
然後幹掉所有的mongo服務重新啟動:
docker run --rm --name mongo-master -v /data/mongo/db/:/data/db -v /data/mongo/configdb/:/data/configdb -p 27017:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --oplogSize 128 --auth --keyFile=/data/configdb/key_file
docker run --rm --name mongo-salve -v /data/mongo-salve/db/:/data/db -v /data/mongo-salve/configdb/:/data/configdb -p 27017:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --oplogSize 128 --auth --keyFile=/data/configdb/key_file
docker run --rm --name mongo-arbiter -v /data/mongo-arbiter/db/:/data/db -v /data/mongo-arbiter/configdb/:/data/configdb -p 27018:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --smallfiles --oplogSize 128 --auth --keyFile=/data/configdb/key_file
最終,你就可以美滋滋的驗證登入啦!
完整安裝步驟
1.啟動mongo
docker run -d --rm --name mongo-master -v /data/mongo/db/:/data/db -v /data/mongo/configdb/:/data/configdb -p 27017:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --oplogSize 128
docker run -d --rm --name mongo-salve -v /data/mongo-salve/db/:/data/db -v /data/mongo-salve/configdb/:/data/configdb -p 27017:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --oplogSize 128
docker run -d --rm --name mongo-arbiter -v /data/mongo-arbiter/db/:/data/db -v /data/mongo-arbiter/configdb/:/data/configdb -p 27018:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --smallfiles --oplogSize 128
2.叢集配置
docker exec -it mongo-master mongo
config = {_id:"mongoreplset", version:1, members:[{_id:0, host:"10.20.43.49:27017", priority:5}, {_id:1, host:"10.20.40.252:27018", priority:2}, {_id:2, host:"10.20.40.252:27017", priority:3}]}
rs.initiate(config)
3.新增使用者
use admin
db.createUser({ user: 'admin', pwd: 'admin', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
4.重啟mongo
先把所有的mongo服務的幹掉,不要刪除檔案再執行下邊的指令碼
docker run -d --rm --name mongo-master -v /data/mongo/db/:/data/db -v /data/mongo/configdb/:/data/configdb -p 27017:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --oplogSize 128 --auth --keyFile=/data/configdb/key_file
docker run -d --rm --name mongo-salve -v /data/mongo-salve/db/:/data/db -v /data/mongo-salve/configdb/:/data/configdb -p 27017:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --oplogSize 128 --auth --keyFile=/data/configdb/key_file
docker run -d --rm --name mongo-arbiter -v /data/mongo-arbiter/db/:/data/db -v /data/mongo-arbiter/configdb/:/data/configdb -p 27018:27017 mongo:latest mongod --dbpath /data/db --replSet mongoreplset --smallfiles --oplogSize 128 --auth --keyFile=/data/configdb/key_file
注意,如果想看到日誌,可以把-d去掉。
OK,大功告成!你可以測試一波哦!
相關文章
- MongoDB搭建Replica Set複製集MongoDB
- mongodb複製集(replica set)搭建及管理MongoDB
- mongodb叢集shard_replica的搭建方法MongoDB
- MongoDB Replica Set 副本集實踐MongoDB
- Docker 搭建叢集 MongoDBDockerMongoDB
- MongoDB系列-解決面試中可能遇到的MongoDB複製集(replica set)問題MongoDB面試
- docker部署mysql叢集DockerMySql
- Docker部署ElasticSearch叢集DockerElasticsearch
- 使用docker部署hadoop叢集DockerHadoop
- MongoDB副本集replica set (二)--副本集環境搭建MongoDB
- 基於 Docker 的 MongoDB 主從叢集DockerMongoDB
- TDengine 叢集 多機器docker 部署Docker
- Mongodb叢集部署MongoDB
- docker下,極速搭建spark叢集(含hdfs叢集)DockerSpark
- RabbitMQ系列(五)使用Docker部署RabbitMQ叢集MQDocker
- MongoDB叢集同步MongoDB
- linux下Mongodb叢集搭建:分片+副本集LinuxMongoDB
- docker初體驗:docker部署nginx負載均衡叢集DockerNginx負載
- mongodb複製集(replica sets)+分片(sharding)環境搭建MongoDB
- redis Cluster模式叢集 多機器 docker 部署Redis模式Docker
- 使用Docker搭建MongoDB 5.0版本副本集叢集DockerMongoDB
- Centos7.9 部署mongodb高可用叢集 3節點CentOSMongoDB
- 搭建MongoDB分片叢集MongoDB
- MongoDB 分片叢集搭建MongoDB
- 使用 docker-compose 部署 zookeeper(單機和叢集)Docker
- Mac 下 利用 docker 構建 MySQL 叢集MacDockerMySql
- MongoDB高可用叢集搭建MongoDB
- mongodb 分片叢集設定MongoDB
- MongoDB分片叢集常用操作MongoDB
- 部署分片叢集
- Docker部署系列之Docker Compose安裝Redis三主三從叢集DockerRedis
- Clickhouse Docker叢集部署Docker
- 高可用mongodb叢集(分片+副本)MongoDB
- mongodb 分片叢集建立分片集合MongoDB
- MongoDB Sharding(二) -- 搭建分片叢集MongoDB
- 使用Docker Swarm快速搭建與部署你的服務叢集DockerSwarm
- Docker Swarm 叢集搭建DockerSwarm
- docker搭建consul叢集Docker