1 MongoDB集群方式

mongodb集群搭建有三种方式。

1.1 Master-Slave模式

基本没什么意义,官方也不推荐这种方式搭建

1.2 Sharding方式

分片的方式

1.3 Replica-Set方式

副本集的方式搭建mongodb高可用集群。

2 Replica Set模式原理

副本集的方式也很容易理解,这里需要一个主节点,一个副节点,一个仲裁节点,如果主节点发生故障,那么会启用副节点,当主节点修复之后,主节点再次恢复为主节点,副节点不再是主节点的角色。副本集的方式还需要一个角色,那就是仲裁节点,它不存储数据,他的作用就是当主节点出现故障,选举出备节点作为主节点,继续保证集群可用。客户端连接时只连接主节点或者备节点,不用连接仲裁节点。

3 CentOS7上使用docker配置RS集群流程

3.1 准备机器

最好是三台机器,以便分配各自角色为:主,副,仲裁,假设IP如下:
192.168.0.3 ;192.168.0.4 ;192.168.0.5

3.2 各自安装Mongo镜像

docker pull mongo

3.3 各自启动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 27017:27017 mongo:latest mongod —dbpath /data/db —replSet mongoreplset —oplogSize 128

3.4 切换到主节点进行角色配置

通过 docker exec -it mongo-master mongo指令进入主节点shell命令模式

3.5 创建配置文件并初始化

config = {_id:”mongoreplset”, version:1, members:[{_id:0, host:”192.168.0.3:27017”, priority:5}, {_id:1, host:”192.168.0.4:27017”, priority:2}, {_id:2, host:”192.168.0.5:27017”, arbiterOnly:true}]}
rs.initiate(config)
此时通过 rs.config() 命令就可以看到集群运行的状态了

4 RS模式下修改各节点角色

配置文件一旦通过rs.initiate进行初始化就不再在二次初始化,想要修改必须按照rs模式下指定shell命令进行,具体命令有哪些可以通过rs.help()查看

4.1 进入主节点

只有主节点有修改配置文件的权限

4.2 修改配置文件

如果想把当前主节点角色改为仲裁

4.2.1 拿到现有配置

var cfg = rs.config()

4.2.2 让出主节点角色

cfg.members[0].priority=1 降低自己的优先级,此时父节点会自动成为主节点

4.2.3 切换到新的主节点修改配置

①在新主节点上,删除其余两个节点:rs.remove(“host:port”)
②重新加入之前的仲裁节点 rs.add(“host:port”),此时这个节点默认已经是副节点了
③通过指定shell命令addArb加入新的仲裁节点,也就是之前的旧主节点:rs.addArb(“host:port”)