MongoDB单节点升级为副本集高可用集群
项目背景
由于历史原因,我们有一个作数据同步的业务,生产环境中MongoDB使用的是单节点。但随着业务增长,考虑到这个同步业务的重要性,避免由于单节点故障造成业务停止,所以需要升级为副本集保证高可用。
副本集架构
下面这架构图是这篇文章需要实现的MongoDB副本集高可用架构:

升级架构前注意事项
在生产环境中,做单节点升级到集群前,一定要先备份好mongodb的所有数据,避免操作失误导致数据丢失。
并且在保证在升级期间不会有程序连接到MongoDB进行读写操作,建议停服务升级,且在凌晨业务低峰期,进行操作。
一、原单节点MongoDB配置信息
IP: 192.168.30.207  | 
1.1 原配置文件
systemLog:  | 
1.2 在原来配置文件增加副本集配置
replication:  | 
注意:这里需要先把 认证 配置注释,副本集配置完成后再开启。
二、新增节点信息
| 角色 | IP | Port | |
|---|---|---|---|
| PRIMARY | 192.168.30.207 | 27017 | 原单节点MongoDB | 
| SECONDARY | 192.168.30.213 | 27017 | 新增节点1 | 
| SECONDARY | 192.168.30.214 | 27017 | 新增节点2 | 
2.1 新增节点配置文件
这两个SECONDARY节点配置文件,只需复制PRIMARY节点配置文件,并修改相应的 “bindIp“即可。
- SECONDARY 节点1配置文件
 
systemLog:  | 
- SECONDARY 节点2配置文件
 
systemLog:  | 
2.2 启动3个节点
PRIMARY节点需要重启,2个SECONDARY节点直接启动。
#启动命令  | 
三、初始化副本集
使用mongo shell连接到其中一个节点,执行初始化命令
3.1 初始化配置
config = {  | 

3.2 对副本集进行初始化
> rs.initiate(config) //初始化副本集  | 

3.3 查看副本集状态
- 查看集群状态信息
 
rs1:PRIMARY> rs.status()  | 
- 查看延时从库信息
 
rs1:PRIMARY> rs.printSlaveReplicationInfo()  | 
- 查看集群与主节点
 
rs1:PRIMARY> rs.isMaster()  | 
四、副本集开启认证
4.1 通过主节点添加一个超级管理员账号
注意:如果原先单节点mongo已经有了超级管理员账号,这可以忽略这个步鄹。
只需在主节点添加用户,副本集会自动同步主节点上的数据。
需要注意的是,创建账号这一步需要在开启认证之前操作。
- 创建超管账号
 
超管用户: mongouser 密码: 123456 认证库: admin
$ mongo --host 192.168.30.207 --port 27017  | 
- 查看已创建的账号
 
rs1:PRIMARY> use admin  | 
4.2 创建副本集认证的key文件
所有副本集节点都必须要用同一份keyfile,一般是在一台机器上生成,然后拷贝到其他机器上,且必须有读的权限,否则将来会报错。
一定要保证密钥文件一致,文件位置随便。但是为了方便查找,建议每台机器都放到一个固定的位置,都放到和配置文件一起的目录中。
- 生成
mongo.keyfile文件 
$ openssl rand -base64 90 -out /home/server/mongodb/conf/mongo.keyfile  | 
- 拷贝
mongo.keyfile文件到另外2个节点相同目录下 
$ scp /home/server/mongodb/conf/mongo.keyfile root@192.168.30.213:/home/server/mongodb/conf/  | 
4.3 修改MongoDB配置文件,开启认证
- 在配置文件中添加、修改如下配置。
 
security:  | 
- 重启所有的mongo节点
 
4.4 验证副本集认证
使用用户名、免密、认证库登录MongoDB副本集主节点
$ mongo -u mongouser -p 123456 --host 192.168.30.207 --port 27017 -authenticationDatabase admin  | 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DevOps Technology Stack!
 评论





