1、什么是复制集
介绍
一个复制集里至少包含一个主节点。如下图中,三个节点,写操作只能从主节点操作。主节点收到数据操作时,会将操作记录在操作日志里。所有的从节点都会在数据同步的过程中,从主节点读取操作日志,从而保证从节点和主节点的数据统一。操作日志的相关设置参见:https://docs.mongodb.com/manual/core/replica-set-oplog/
选举机制
当主节点发生故障时,复制集会通过选举协议(https://docs.mongodb.com/manual/core/replica-set-elections/)选举产生一个新的主节点。在选举的过程中,因为没有主节点,其他的节点只能读数据,数据库是不接受写操作的。
带仲裁节点复制集
有时候为了保证复制集的可用性,专门设置一个仲裁节点。这个节点的主要作用是决定其他节点是主节点还是从节点,这个节点不存储数据。当主节点挂掉后,仲裁节点将从其他从节点中选出一个主节点,集合新加入节点后,由仲裁节点决定是主节点还是从节点。
2、免认证方式启动三个服务
启动服务1:
mongod -f ./mongod.conf
mongod.conf:
systemLog:
destination: file
path: /usr/local/var/log/mongodb/mongo.log
logAppend: true
storage:
dbPath: /usr/local/var/mongodb
net:
bindIp: 127.0.0.1
port: 27017
processManagement:
fork: true
replication:
replSetName: fyh
启动服务2:
mongod -f ./mongod1.conf
mongod1.conf:
systemLog:
destination: file
path: /usr/local/var/log/mongodb/mongo1.log
logAppend: true
storage:
dbPath: /usr/local/var/mongodb1
net:
bindIp: 127.0.0.1
port: 27017
processManagement:
fork: true
replication:
replSetName: fyh
启动服务3:
mongod -f ./mongod2.conf
mongod2.conf :
systemLog:
destination: file
path: /usr/local/var/log/mongodb/mongo2.log
logAppend: true
storage:
dbPath: /usr/local/var/mongodb2
net:
bindIp: 127.0.0.1
port: 27017
processManagement:
fork: true
replication:
replSetName: fyh
注意:配置中的路径需要提前创建,否则启动失败
3、启动复制集
1)连接其中一个客户端
mongo localhost:27017
2)配置复制集
https://docs.mongodb.com/manual/reference/replica-configuration/
config_fyh = {_id:"fyh", members: [{_id: 0, host:"localhost:27017"},{_id: 1, host: "localhost:27018"},{_id: 2, host: "localhost:27019", arbiterOnly: true}]}
其中 arbiterOnly: true 是将节点设置成仲裁节点
3)启动复制集
>rs.initiate(config_fyh)
{ "ok" : 1 }
4)查看状态
>rs.status()
5)创建用户密码
>use admin
>db.createUser({user: "admin", pwd: "admin", roles: [{role:"userAdminAnyDatabase", db: "admin"}]})
>use process
>db.createUser({user: "process", pwd: "process", roles: [{role:"readWrite", db: "process"}]})
6)以安全模式启动:
上边的配置中添加安全配置如下:
security:
keyFile: /usr/local/etc/mongodbConf/key
authorization: enabled
其中key是三个进程间通信使用的加密秘钥
echo "password" > /usr/local/etc/mongodbConf/key
注意:这个密钥文件不能有群组或者其他人访问的权限,否则服务奖无法启动,需要改变其权限
chmod 400 /usr/local/etc/mongodbConf/key
7)连接复制集
mongo localhost:27017/process -u process -p process
4、复制集自动故障转移
1)查看mongod进程
ps aux |grep mongod
2)杀死主进程
kill 19780
3)连接数据库,查看复制集状态
mongo localhost:27018
>rs.status()
可以看到原来的主节点进程(27017端口)挂了,原来的从节点变成了主节点。
4)重启杀死的进程并查看复制集状态
mongod -f ./mongod.conf
>rs.status()
从结果可以看出27017端口的进程变成了从节点。