mongo 主从仲裁

参考资料:https://www.cnblogs.com/xiangnanxiao/p/15273224.html

创建路径:

1
2
3
4
5
6
7
8
mkdir /home/mongodb/master/configdb
mkdir /home/mongodb/master/db
 
mkdir /home/mongodb/slave/configdb
mkdir /home/mongodb/slave/db
 
mkdir /home/mongodb/arditer/configdb
mkdir /home/mongodb/arditer/db

  

创建配置文件(三个配置文件保持一致,如果在同一个服务器中一份文件即可)

vi /home/mongodb/master/configdb/mongod.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
net:
#启动端口
port: 27017
#允许连接的IP(0.0.0.0作用与--bind_ip_all类似)
bindIp: 0.0.0.0
systemLog:
#重新启动mongodb的时候日志拼接在以前的日志文件上
logAppend: true
security:
#路径是容器映射到宿主机的路径
keyFile: "/data/configdb/mongodbKeyfile.key"
#开启客户端连接认证 disabled 关闭授权
authorization: "enabled"
replication:
replSetName: "mongo_rs"

 

 

cp /home/mongodb/master/configdb/mongod.conf /home/mongodb/slave/configdb/
cp /home/mongodb/master/configdb/mongod.conf /home/mongodb/arditer/configdb/

 

生成key文件(需要注意三个都需要用同一个文件,否则会出现验证失败的情况)

openssl rand -base64 756 > /home/mongodb/master/configdb/mongodbKeyfile.key
#key文件必须设置成400,否则将会失败
chmod 400 /home/mongodb/master/configdb/mongodbKeyfile.key

cp /home/mongodb/master/configdb/mongodbKeyfile.key /home/mongodb/slave/configdb/
cp /home/mongodb/master/configdb/mongodbKeyfile.key /home/mongodb/arditer/configdb/

 

yaml文件:mongo.yaml

 

 

version: '3.7'
services:
rs1:
image: mongo:3.6
volumes:
- /home/mongodb/master/configdb/:/data/configdb/
- /home/mongodb/master/db/:/data/db/
command: mongod -f /data/configdb/mongod.conf
ports:
- "27110:27017"
rs2:
image: mongo:3.6
volumes:
- /home/mongodb/slave/configdb/:/data/configdb/
- /home/mongodb/slave/db/:/data/db/
command: mongod -f /data/configdb/mongod.conf
ports:
- "27111:27017"
rs3:
image: mongo:3.6
volumes:
- /home/mongodb/arditer/configdb/:/data/configdb/
- /home/mongodb/arditer/db/:/data/db/
command: mongod -f /data/configdb/mongod.conf
ports:
- "27112:27017"

docker-compose -f mongo.yaml -p mongo.yaml up -d 

 

进入容器配置主从
docker exec -it mongoyaml_rs1_1 mongo admin
rs.initiate({_id:"mongo_rs",members:[{_id:0,host:"172.31.0.86:27110"},{_id:1,host:"172.31.0.86:27111"},{_id:2,host:"172.31.0.86:27112",arbiterOnly:true}]})

以上是配置主、从、仲裁的全部配置,以下则是配置权限

1
2
3
4
5
6
7
8
9
10
11
12
#切换至admin
use admin
#添加用户
db.createUser({user:'admin',pwd:'123456',roles:[{role:'root',db:'admin'}]})
#登录
db.auth('admin','123456')
 
添加测试数据:
use test
#给测试库添加数据
db.userinfo.insert({"name":"张三","sex":"男"})
db.userinfo.insert({"name":"wangwu","sex":"女"})

  

进入slave中查看是否已经同步数据

复制代码
docker exec -it mongo_slave mongo admin
#切换至test库
use test
#登录
db.auth('admin','123456')
#设置备机可读
rs.slaveOk()
#查询数据
db.userinfo.find()
复制代码

 

python脚本测试:

1
2
3
4
5
6
7
8
9
from pymongo import MongoClient
MONGO_POC_URI = 'mongodb://admin:123456@172.31.0.86:27110,172.31.0.86:27111,172.31.0.86:27112/admin?replicaSet=mongo_rs'
MONGO_POC_DB_ENV = 'test'
mongo_poc_client = MongoClient(MONGO_POC_URI, maxPoolSize=10,readPreference='secondaryPreferred')
mongo_poc_db = mongo_poc_client[MONGO_POC_DB_ENV]
ret = mongo_poc_db["userinfo"].find()
print(list(ret))
r=mongo_poc_db["userinfo"].insert_one({"name":"hello", "sex":"man"})
print(r.inserted_id)

  =========

可以为每一个数据库都设置角色和权限。

  • Read:允许用户读取指定数据库(不可进行任何更改,只能查看)

  • readWrite:允许用户读写指定数据库(任何操作,包括删有权限db中的col权限)

  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

  • root:只在admin数据库中可用。超级账号,超级权限

posted on   我和你并没有不同  阅读(182)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-03-29 Mac 挂载NTFS移动硬盘进行读写操作 转载:https://blog.csdn.net/sunbiao0526/article/details/8566317
2020-03-29 代码走读 airflow 2
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示