副本集总体思路是用户名、密码和keyfile文件,keyfile需要各个副本集服务启动时加载而且要是同一文件,然后在操作库是需要用户名、密码
-
创建密钥文件
openssl rand -base64 756 > <path-to-keyfile> chmod 400 <path-to-keyfile>
-
将密钥文件复制到每个副本集成员
将密钥文件复制到托管副本集成员的每个服务器。确保运行
mongod
实例的用户是文件的所有者 ,并且可以访问密钥文件。 -
启用访问控制启动副本集的每个成员
security : keyFile : <path-to-keyfile> replication : replSetName : <replicaSetName>
-
keyFile文件必须满足条件:
- 至少6个字符,小于1024字节
- 认证时候不考虑文件中空白字符
- 连接到副本集的成员和mongos进成的keyfile文件内容必须一样
- 必须是base64编码,但是不能有等号
- 文件权限必须是x00,也就是说,不能分配任何权限给group成员和other成员。
-
配置文件
systemLog: destination: file logAppend: true path: /Users/machunyu/Work/mongodb/logs/run.log processManagement: fork: true pidFilePath: /Users/machunyu/Work/mongodb/logs/mongod.pid net: port: 27017 bindIp: 127.0.0.1 wireObjectCheck: true storage: dbPath: /Users/machunyu/Work/mongodb/data engine: wiredTiger security: authorization: enabled keyFile: /Users/machunyu/Work/mongodb/mongod.key #密钥文件 replication: replSetName: "test_1"
-
启动
#声明配置文件变量 rsconf = { _id: "test_1", 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(rsconf)
rs.addArb("ip:port")
使用 rs.stepDown(300)
来降低主服务器,并允许其中一个辅助服务器被选为新的主服务器。
-
复制集状态查询:rs.status()
-
查看当前副本集oplog状态:rs.printReplicationInfo()
-
查看复制延迟:rs.printSlaveReplicationInfo()
-
查看服务状态详情:db.serverStatus()
-
查询副本集配置:rs.conf()
-
主副本查询:db.isMaster()