首先得安装好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版权协议,转载请附上原文出处链接和本声明。