Mongodb - 复制集RS简单操作

目录

一、基本原理

二、基本介绍

三、Replcation Set配置过程详解

3-0 多节点规划

3-1 配置复制集 - 两种结构

3-1-1 1主2从,从库普通从库

3-1-2 1主1从1个arbiter

四、复制集管理

4-1 查看复制集状态

4-2 添加、删除节点

4-3 添加 arbiter节点


一、基本原理

基本构成是一主二从的结构自带互相监控投票机制(Raft(MongoDB)、Paxos(mysql MGR 用的是变种)) 如果发生主库宕机,复制集内部会进行投票选举,选择一个新的主库替代原有主库对外提供服务。同时复制集会自动通知 客户端程序,主库已经发生切换了。应用就会连接到新的主库。 当原来的主库恢复时候,也只是作为从库连接现在新的主库。

Mongodb - 复制集RS简单操作

Mongodb - 复制集RS简单操作

二、基本介绍

一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础。

保证数据在生产部署时的冗余和可靠性,通过在不同的机器上保存副本来保证数据的不会因为单点损坏而丢失。能够随时应对数据丢失、机器损坏带来的风险。

换一句话来说,还能提高读取能力,用户的读取服务器和写入服务器在不同的地方,而且,由不同的服务器为不同的用户提供服务,提高整个系统的负载,简直就是云存储的翻版...

一组复制集就是一组mongod实例掌管同一个数据集,实例可以在不同的机器上面。实例中包含一个主导,接受客户端所有的写入操作,其他都是副本实例,从主服务器上获得数据并保持同步。

主服务器很重要,包含了所有的改变操作(写)的日志。但是副本服务器集群包含有所有的主服务器数据,因此当主服务器挂掉了,就会在副本服务器上重新选取一个成为主服务器。

每个复制集还有一个仲裁者,仲裁者不存储数据,只是负责通过心跳包来确认集群中集合的数量,并在主服务器选举的时候作为仲裁决定结果。

三、Replcation Set配置过程详解

3-0 多节点规划

三个以上的mongodb节点(或多实例)

多实例准备

(1)多个端口:28017、28018、28019、28020

(2)多套目录

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

(3) 多套配置文件

/mongodb/28017/conf/mongod.conf
/mongodb/28018/conf/mongod.conf
/mongodb/28019/conf/mongod.conf
/mongodb/28020/conf/mongod.conf

(4)配置文件内容

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:
  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

(5)启动多个实例备用

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

(6)查看端口确保实例启动成功

netstat -lnp|grep 280

Mongodb - 复制集RS简单操作

3-1 配置复制集 - 两种结构

3-1-1 1主2从,从库普通从库

mongo --port 28017 admin

config = {_id: 'my_repl', members: [
                          {_id: 0, host: '10.0.0.51:28017'},
                          {_id: 1, host: '10.0.0.51:28018'},
                          {_id: 2, host: '10.0.0.51:28019'}]
          }  

初始化操作
rs.initiate(config) 

查询复制集状态
rs.status();

Mongodb - 复制集RS简单操作

Mongodb - 复制集RS简单操作

3-1-2 1主1从1个arbiter

mongo -port 28017 admin

config = {_id: 'my_repl', members: [
                          {_id: 0, host: '10.0.0.51:28017'},
                          {_id: 1, host: '10.0.0.51:28018'},
                          {_id: 2, host: '10.0.0.51:28019',"arbiterOnly":true}]
          }
          
rs.initiate(config) 

四、复制集管理

4-1 查看复制集状态

rs.status();    //查看整体复制集状态
rs.isMaster(); // 查看当前是否是主节点

4-2 添加、删除节点

rs.remove("ip:port"); // 删除一个节点

rs.add("ip:port"); // 新增从节点
rs.addArb("ip:port"); // 新增仲裁节点

Mongodb - 复制集RS简单操作

4-3 添加 arbiter节点

1、连接到主节点
[[email protected] ~]$ mongo --port 28018 admin
2、添加仲裁节点
my_repl:PRIMARY> rs.addArb("10.0.0.51:28020")
3、查看节点状态
my_repl:PRIMARY> rs.isMaster()
{
	"hosts" : [
		"10.0.0.51:28017",
		"10.0.0.51:28018",
		"10.0.0.51:28019"
	],
	"arbiters" : [
		"10.0.0.51:28020"
	],

Mongodb - 复制集RS简单操作 

Mongodb - 复制集RS简单操作

Mongodb - 复制集RS简单操作

!!注: 添加特殊节点时, 1>可以在搭建过程中设置特殊节点; 2>可以通过修改配置的方式将普通从节点设置为特殊节点  ------ 找到需要改为延迟性同步的数组号

特殊节点

  • arbiter节点:主要负责选主过程中的投票,但是不存储任何数据,也不提供任何服务

  • hidden节点:隐藏节点,不参与选主,也不对外提供服务。

  • delay节点:延时节点,数据落后于主库一段时间,因为数据是延时的,也不应该提供服务或参与选主,所以通常会配合hidden(隐藏)

一般情况下会将delay+hidden一起配置使用