- MongoDB复制集是Mongodb提供的一种高可用和数据冗余的解决方案,复制集由多个MongoDB服务器组成,其中一个服务器作为主节点(Primary),处理所有写操作,而其他服务器作为从节点(Secondary)同步主节点的数据。
- 如果主节点不可用,复制集将紫东阁进行选举,提升一个从节点为新的主节点,确保服务器的连续性和数据的一致性。
- MongdoDB复制集的基本原理:
- Primary节点将数据修改操作记录到本地的oplog(操作日志,在local库下)中,Seconday节点定期到Primary节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证Seconday与Primary数据一致。
-
- 三类节点:
- 1.主节点(Primary)
- 主节点是复制集中的领导者,负责处理所有的写操作
- 主节点将所有的操作都记录在操作日志(oplog)中,从节点通过复制这个日志来保持数据的一致性
- 在一个复制集当中,只有一个主节点
- 2.从节点(Secondary):
- 从节点复制主节点的数据,保持数据的冗余
- 从节点可以处理读操作
- 如果主节点不可用,复制集将自动选举一个从节点作为新的主节点
- 在一个复制集当中,可以有多个从节点
- 3.仲裁者节点(Arbiter)
- 仲裁者节点不复制数据,也不提供数据服务
- 主要作用是在选举过程中参与投票,以确保复制集能够快速进行故障转移
- 仲裁者节点是一个轻量级的进程,不需要太多的系统资源
- 1.主节点(Primary)
- 三类节点:
- 实验准备环境:
- 3个以上的Mongodb节点(或者多实例)
- 这里使用多实例来代替Mongodb节点
- 每个服务器端口:
- 28017、28018、28019、28020
-
- 实验步骤:
- 创建多实例目录和配置文件:
- 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
- 配置文件:
- 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.8.5,127.0.0.1
- port: 28017
- replication:
- oplogSizeMB: 2048
- replSetName: my_repl
- EOF
- 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/
- 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
- 查看端口:
- netstat -lnp|grep 280
- 配置普通复制集:
- 结构:一主两从,从库为普通从库
- 登录数据库:
- mongo --port 28017 admin
- 创建主从:
- config = {_id: 'my_repl', members: [
- {_id: 0, host: '192.168.8.5:28017'},
- {_id: 1, host: '192.168.8.5:28018'},
- {_id: 2, host: '192.168.8.5:28019'},
- {_id: 3, host: '192.168.8.5:28020'}]
- }
- 查询复制集状态:
- rs.status();
- 复制集管理操作:
- 查看复制集状态
- rs.status(); //查看整体复制集状态
- rs.isMaster(); // 查看当前是否是主节点
- rs.conf(); //查看复制集配置信息
- rs.slaveOk(); //从节点临时可读
- 添加删除节点
- rs.remove("ip:port"); // 删除一个节点
- rs.add("ip:port"); // 新增从节点
- rs.addArb("ip:port"); // 新增仲裁节点
- 查看复制集状态
- 创建多实例目录和配置文件:
- 实验步骤: