RS集群
1、基本原理
基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB) Paxos(mysql MGR 用的是变种))
如果发生主库宕机,复制集内部会进行投票选举,选择一个新的主库替代原有主库对外提供服务。同时复制集会自动通知
客户端程序,主库已经发生切换了。应用就会连接到新的主库。
2、 Replication Set配置过程详解
(1) 规划
三个以上的mongodb节点(或多实例)
(2)环境准备
多个端口:28017、28018、28019、28020
#创建并切换到mongod用户
su - mongod
#为每个实例创建一个目录
mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/log
mkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/log
mkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log
mkdir -p /mongodb/28020/conf /mongodb/28020/data /mongodb/28020/log
#查看目录是否创建成功
tree /mongodb
查看到下图代表目录创建成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200719133730912.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjc5Mzcx,size_16,color_FFFFFF,t_70
#在28017上增加配置文件内容(注意代码块中的bindIp根据自己实际情况而定)
cat > /mongodb/28017/conf/mongod.conf <<EOF
systemLog:
destination: file
path: /mongodb/28017/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /mongodb/28017/data
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
net:
bindIp: 192.168.220.21,127.0.0.1
port: 28017
replication:
oplogSizeMB: 2048
replSetName: my_repl
EOF
#将刚配置的28017上的配置文件拷贝到另外三实例中
\cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/
\cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/
\cp /mongodb/28017/conf/mongod.conf /mongodb/28020/conf/
#将20817替换为28018、28019、28020
sed 's#28017#28018#g' /mongodb/28018/conf/mongod.conf -i
sed 's#28017#28019#g' /mongodb/28019/conf/mongod.conf -i
sed 's#28017#28020#g' /mongodb/28020/conf/mongod.conf -i
#启动多个实例备用
mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
mongod -f /mongodb/28020/conf/mongod.conf
输入,查看端口是否开启成功
ps -ef|grep mongod
3、配置普通复制集
1主2从,从库普通从库
#登入28017
mongo --port 28017 admin
#配置主从复制
config = {
_id: 'my_repl', members: [
{
_id: 0, host: '192.168.220.21:28017'},
{
_id: 1, host: '192.168.220.21:28018'},
{
_id: 2, host: '192.168.220.21:28019'}]
}
#初始化
rs.initiate(config)
#查询复制集状态
rs.status();
4、复制集管理操作
#查看复制集状态
rs.status(); //查看整体复制集状态
rs.isMaster(); // 查看当前是否是主节点
rs.conf(); //查看复制集配置信息
#添加删除节点
rs.remove("ip:port"); // 删除一个节点
rs.add("ip:port"); // 新增从节点
rs.addArb("ip: