在 .yml 文件中实施 docker mongodb 副本集配置设置
Implement docker mongodb replica set config settings inside .yml file
我已经设置了一个 MongoDB 副本集,它是 运行ning 正确的。
但是我想 运行 .yml 中的配置设置,而不是在副本集节点中启动。
通过配置设置我的意思是:
1.
config = {
"_id": "comments",
"members": [
{
"_id": 0,
"host": "node1:27017"
},
{
"_id": 1,
"host": "node2:27017"
},
{
"_id": 2,
"host": "node3:27017"
}
]
}
及以下:
2.
rs.initiate(config)
所以我想出了一个办法,希望它 helps.Below 我将 post 我的 .yml 文件,rsinit 文件和 rs.sh 文件,所有文件应该放在同一个location 为了工作,其余所有配置都写好了。
.yml 文件:
版本:'3.7'
服务:
mongo1:
主机名:mongo1
container_name: 本地mongo1
图片:mongo
暴露:
- 27017
端口:
- 27017:27017
重启:总是
入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"]
#卷:
# - /data/db/mongotest:/data/db # 这是您的卷将保留的位置。例如音量方向 = ./volumes/mongodb
mongo2:
主机名:mongo2
container_name: 本地mongo2
图片:mongo
暴露:
- 27017
端口:
- 27018:27017
重启:总是
入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"]
mongo3:
主机名:mongo3
container_name: 本地mongo3
图片:mongo
暴露:
- 27017
端口:
- 27019:27017
重启:总是
入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"]
rsinit:
建造:
语境: 。
码头文件:rsinit
depends_on:
- mongo1
- mongo2
- mongo3
入口点:["sh"、“-c”、"rs.sh"]
rsinit(普通文本文件):
从mongo
添加rs.sh/usr/local/bin/
运行 chmod +x /usr/local/bin/rs.sh
rs.sh 文件:
!/bin/bash
回声"prepare rs initiating"
check_db_status() {
mongo1=$(mongo --host mongo1 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s) 1($|\s)')
mongo2=$(mongo --host mongo2 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s) 1($|\s)')
mongo3=$(mongo --host mongo3 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s) 1($|\s)')
如果 [[ $mongo1 == 1 ]] && [[ $mongo2 == 1 ]] && [[ $mongo3 == 1 ]];然后
init_rs
别的
check_db_status
菲
}
init_rs() {
ret=$(mongo --host mongo1 --port 27017 --eval "rs.initiate({ _id: 'rs0', members: [{ _id: 0, host: 'mongo1:27017' }, { _id: 1, host: 'mongo2:27017' }, { _id: 2, host: 'mongo3:27017' } ] })" > /dev/null 2>&1)
}
check_db_status > /dev/null 2>&1
回声"rs initiating finished"
出口 0
我已经设置了一个 MongoDB 副本集,它是 运行ning 正确的。 但是我想 运行 .yml 中的配置设置,而不是在副本集节点中启动。
通过配置设置我的意思是:
1.
config = {
"_id": "comments",
"members": [
{
"_id": 0,
"host": "node1:27017"
},
{
"_id": 1,
"host": "node2:27017"
},
{
"_id": 2,
"host": "node3:27017"
}
]
}
及以下:
2.
rs.initiate(config)
所以我想出了一个办法,希望它 helps.Below 我将 post 我的 .yml 文件,rsinit 文件和 rs.sh 文件,所有文件应该放在同一个location 为了工作,其余所有配置都写好了。
.yml 文件:
版本:'3.7' 服务: mongo1: 主机名:mongo1 container_name: 本地mongo1 图片:mongo 暴露: - 27017 端口: - 27017:27017 重启:总是 入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"] #卷: # - /data/db/mongotest:/data/db # 这是您的卷将保留的位置。例如音量方向 = ./volumes/mongodb
mongo2: 主机名:mongo2 container_name: 本地mongo2 图片:mongo 暴露: - 27017 端口: - 27018:27017 重启:总是 入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"]
mongo3: 主机名:mongo3 container_name: 本地mongo3 图片:mongo 暴露: - 27017 端口: - 27019:27017 重启:总是 入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"]
rsinit: 建造: 语境: 。 码头文件:rsinit depends_on: - mongo1 - mongo2 - mongo3 入口点:["sh"、“-c”、"rs.sh"]
rsinit(普通文本文件):
从mongo
添加rs.sh/usr/local/bin/
运行 chmod +x /usr/local/bin/rs.sh
rs.sh 文件:
!/bin/bash
回声"prepare rs initiating"
check_db_status() { mongo1=$(mongo --host mongo1 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s) 1($|\s)') mongo2=$(mongo --host mongo2 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s) 1($|\s)') mongo3=$(mongo --host mongo3 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s) 1($|\s)') 如果 [[ $mongo1 == 1 ]] && [[ $mongo2 == 1 ]] && [[ $mongo3 == 1 ]];然后 init_rs 别的 check_db_status 菲 }
init_rs() { ret=$(mongo --host mongo1 --port 27017 --eval "rs.initiate({ _id: 'rs0', members: [{ _id: 0, host: 'mongo1:27017' }, { _id: 1, host: 'mongo2:27017' }, { _id: 2, host: 'mongo3:27017' } ] })" > /dev/null 2>&1) }
check_db_status > /dev/null 2>&1
回声"rs initiating finished" 出口 0