docker搭建mongodb集群模式--复制集

首先得安装好docker,mongo客户端工具:mongo compass,官网下载
1、拉取mongo镜像

docker pull mongo

2、启动服务

mkdir -p /app/docker/mongo1/db   #创建挂载的db目录
mkdir -p /app/docker/mongo2/db   #创建挂载的db目录
mkdir -p /app/docker/mongo3/db   #创建挂载的db目录
#第一台:
docker run --name mongo-server1 -p 27017:27017 --restart=always -v /app/docker/mongo1/db:/data/db -v /etc/localtime:/etc/localtime -d mongo  --replSet "rs0"  --bind_ip_all
#第二台:
docker run --name mongo-server2 -p 27018:27018 --restart=always -v /app/docker/mongo2/db:/data/db -v /etc/localtime:/etc/localtime -d mongo  --replSet "rs0"  --bind_ip_all
#第三台:
docker run --name mongo-server3 -p 27019:27019 --restart=always -v /app/docker/mongo3/db:/data/db -v /etc/localtime:/etc/localtime -d mongo  --replSet "rs0"  --bind_ip_all

参数说明

开机启动:–restart=always
复制集名称:–replSet “rs0”
绑定ip:–bind_ip_all

3、配置复制集

docker exec -it mongo-server1 bash 	#进入容器
mongo			#进入mongo数据库
use admin 	# 首先切换到admin数据库下
#创建一个用户admin, 密码是admin,此用户即为管理员
db.createUser({user: 'admin',pwd: 'admin', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]});
db.auth("admin", "admin");	# 测试下是否正确,返回1表示正确
#创建root权限用户
db.createUser({    user: 'root',pwd: 'root', roles: [{role: 'root', db: 'admin'}]});

#复制集配置,有报错的话复制出来,改成一行
config = {"_id":"rs0",
		  "members":[
		  {"_id":0,host:"127.0.0.1:27017"},
		  {"_id":1,host:"127.0.0.1:27018"},
		  {"_id":2,host:"127.0.0.1:27019"}
          ]
}
#初始化复制集
rs.initiate(config)
#查看复制集状态,查看不到?设置从节点可用(当次有效):rs.slaveOk()
rs.status()
exit;	# 退出
role角色参数参考:
ROLE说明
read允许用户读取指定数据库
readWrite允许用户读写指定数据库
dbAdmin允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root只在admin数据库中可用。超级账号,超级权限
MongoDB复制集简单维护

我们可以通过修改上面这些参数来进行复制集的维护;
首先登陆到主节点,因为只能在主节点上操作。

#增加从节点
rs.add(“ip:port”)
rs.add({"_id":4,“host”:“ip:port”,“priority”:1,“hidden”:false})

#增加投票节点
rs.addArb(“ip;port”)
rs.addArb({"_id":5,“host”:“ip:port”})
rs.add({’_id’:5,“host”:“new_node:port”,“arbiterOnly”:true})

rs.remove(“ip;port”) #删除节点

4.修改节点参数
(1)config = rs.conf()
(2)config.members[i].参数 = 值
(3)rs.reconfig(config, {“force”:true})或rs.reconfig(config),前面是强制重新配置

rs.stepDown(int) # 主节点降级意思是在整数秒内降级
rs.conf() #查看配置文件
rs.status() #查看复制集状态

还有很多很多维护事项。
注意:
要设置某节点为隐藏节点需要设置参数hidden为true及priority参数值为0;
设置某节点为”投票“节点不需要设置,默认就是,但要设置它不是”投票“节点需要设置参数votes为0;
设置某节点为延时节点就需要设置参数slaveDelay;
如果将某节点要设置为投票节点,则需要设置参数arbiterOnly为true,但是如果是已经是从节点了再要改成投票节点就需要先remove掉,再用相应的方法添加。

注意:
修改副本集成员配置时的限制:
不能修改_id;
不能将接收rs.reconfig命令的成员的优先级设置为 0;
不能将仲裁者成员(投票节点或选举节点)变为非仲裁者成员(从节点),不能将非仲裁者成员(从节点)变为仲裁者成员(投票节点或选举节点);
不能将 buildIndexes:false 改为 true;


版权声明:本文为qq_19895803原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。