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数据库中可用。超级账号,超级权限
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享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