MongoDB 单节点转换为副本集
基于 HAP 产 品的系统架构,MongoDB 单节点分为 使用存储组件镜像内置 MongoDB 或 使用单独部署的 MongoDB。另外在这基础上,还需要区分是否开启认证。所以包含以下 4 种情况:
- 使用内置 MongoDB 未开启认证
- 使用内置 MongoDB 开启认证
- 使用外置 MongoDB 未开启认证
- 使用外置 MongoDB 开启认证
- 使用内置 MongoDB 未开启认证
- 使用内置 MongoDB 开启认证
- 使用外置 MongoDB 开启认证
- 使用外置 MongoDB 已开启认证
内置 MongoDB 指 hap-sc:3.0.0 镜像包含的 MongoDB 组件
-
在 docker-compose.yaml 增加
ENV_MONGODB_DAEMON_ARGS: "--replSet sc-mongodb"
,如下:增加
ENV_MONGODB_DAEMON_ARGS
后,会自动转换成副本集模式。内置脚本为:rs.initiate({_id: "sc-mongodb",members:[ {_id : 1, host : "sc:27017"} ]})
(如果存在其他客户端连接此 MongoDB,需要在客户端增加针对 sc 服务名的 host 解析记录)services:
app:
image: nocoly/hap-community:5.8.0
environment: &app-environment
ENV_MONGODB_DAEMON_ARGS: "--replSet sc-mongodb" -
重启服务,在管理器根目录下执行:
bash ./service.sh restartall
内置 MongoDB 指 hap-sc:3.0.0 镜像包含的 MongoDB 组件
-
创建 keyfile 文件
echo $(openssl rand -base64 32) > /data/hap/script/volume/data/mongodb/keyfile
chmod 400 /data/hap/script/volume/data/mongodb/keyfile -
修改环境变量
ENV_MONGODB_DAEMON_ARGS
,追加--keyFile /data/mongodb/keyfile --replSet sc-mongodb
services:
app:
image: nocoly/hap-community:5.8.0
environment: &app-environment
ENV_MONGODB_DAEMON_ARGS: "--auth --keyFile /data/mongodb/keyfile --replSet sc-mongodb" -
重启服务,在管理器根目录下执行:
bash ./service.sh restartall
-
副本集转换
进入存储组件容器
docker exec -it script_sc_1 bash
使用 root 账号连接 admin 库
mongo mongodb://root:******@sc:27017/admin
初始化副本集(如果存在其他客户端连接此 MongoDB,需要在客户端增加针对 sc 服务名的 host 解析记录)
rs.initiate({_id: "sc-mongodb",members:[ {_id : 1, host : "sc:27017"} ]})
-
再次重启服务,在管理器根目 录下执行:
bash ./service.sh restartall
-
重启 MongoDB,启动命令追加
--replSet sc-mongodb
,如:mongod --bind_ip 0.0.0.0 --dbpath /data/mongodb --logpath /data/logs/mongodb.log --replSet sc-mongodb
-
连接 MongoDB,副本集转换
连接 admin 库
mongo mongodb://sc:27017/admin
初始化副本集(如果存在其他客户端连接此 MongoDB,但客户端与IP不通,可通过配置服务名的方式,但所有客户端都需要增加针对 sc 服务名的 host 解析记录)
rs.initiate({_id:"sc-mongodb",members:[{_id:1,host:"服务名或IP:27017"}]})
-
重启服务,在管理器根目录下执行:
bash ./service.sh restartall
-
MongoDB 数据目录下(如:
/data/mongodb/
)创建 keyfile 文件echo $(openssl rand -base64 32) > /data/mongodb/keyfile
chmod 400 /data/mongodb/keyfile -
重启 MongoDB,启动命令追加
--keyFile /data/mongodb/keyfile --replSet sc-mongodb
,如:mongod --bind_ip 0.0.0.0 --dbpath /data/mongodb --logpath /data/logs/mongodb.log --auth --keyFile /data/mongodb/keyfile --replSet sc-mongodb
-
连接 MongoDB,副本集转换
使用 root 账号连接 admin 库
mongo mongodb://root:******@sc:27017/admin
初始化副本集(如果存在其他客户端连接此 MongoDB,但客户端与IP不通,可通过配置服务名的方式,但所有客户端都需要增加针对 sc 服务名的 host 解析记录)
rs.initiate({_id:"sc-mongodb",members:[{_id:1,host:"服务名或IP:27017"}]})
-
重启服务,在管理器根目录下执行:
bash ./service.sh restartall