mongodb 学习之——MongoDB 复制集搭建

1、复制集replica sets

1.1 什么是复制集?

复制集是由一组拥有相同数据集的mongod实例做组成的集群。
复制集是一个集群,它是2台及2台以上的服务器组成,以及复制集成员包括Primary主节点,secondary从节点和投票节点。
复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,保证数据的安全性。

mongodb 学习之——MongoDB 复制集搭建

 

1.2 为什么要使用复制集

 

1.高可用
防止设备(服务器、网络)故障。
提供自动failover 功能。
技术来保证高可用
2.灾难恢复
当发生故障时,可以从其他节点恢复 用于备份。
3.功能隔离
我们可以在备节点上执行读操作,减少主节点的压力
比如:用于分析、报表,数据挖掘,系统任务等。

2 复制集搭建

mongodb 学习之——MongoDB 复制集搭建

 

 

    注:如果之前安装过mongon ,请先停掉

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongod --shutdown --dbpath /home/mongodb-linux-x86_64-amazon-3.6.21/data/mongo

步骤:

//新建文件夹
mkdir replica_sets
//copy 
cp cp mongodb-linux-x86_64-amazon-3.6.21.tgz  replica_sets/
cd replica_sets/
//解压
tar -xvf mongodb-linux-x86_64-amazon-3.6.21.tgz

 

mongodb 学习之——MongoDB 复制集搭建

节点配置

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# vi mongo_37017.conf

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# cp  mongo_37017.conf mongo_37018.conf

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# cp  mongo_37018.conf mongo_37019.conf
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server1 -p

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server2 -p

[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server3 -p
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/logs

1.主节点配置 mongo_37017.conf

# 主节点配置
dbpath=/data/mongo/data/server1
bind_ip=0.0.0.0
port=37017
fork=true
logpath=/data/mongo/logs/server37017.log
replSet=wgCluster

2.从节点1配置 mongo_37018.conf

# 从节点配置
dbpath=/data/mongo/data/server2
bind_ip=0.0.0.0
port=37018
fork=true
logpath=/data/mongo/logs/server37018.log
replSet=wgCluster

3.从节点2配置 mongo_37019.conf

dbpath=/data/mongo/data/server3
bind_ip=0.0.0.0
port=37019
fork=true
logpath=/data/mongo/logs/server37019.log
replSet=wgCluster

4.初始化节点配置

//启动节点
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongod -f mongo_37017.conf about to fork child process, waiting until server is ready for connections. forked process: 10653
//进入节点
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongo --port 37017

启动三个节点 然后进入任意一个节点 运行如下命令:

var cfg ={"_id":"lagouCluster",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"主机ip:37017","priority":10},
{"_id":2,"host":"主机ip:37018"}
]
}
rs.initiate(cfg)
rs.status()

mongodb 学习之——MongoDB 复制集搭建

 

 5.节点的动态增删,上边我们只添加了俩个节点,下边动态的增加删除节点。

增加节点
rs.add("192.168.211.133:37019")
删除slave 节点
rs.remove("192.168.211.133:37019")

mongodb 学习之——MongoDB 复制集搭建

 

 

 查看节点状态

wgCluster:PRIMARY> rs.status()
{
    "set" : "wgCluster",
    "date" : ISODate("2020-12-24T01:19:35.883Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "syncingTo" : "",
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1608772772, 1),
            "t" : NumberLong(1)
        },
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1608772772, 1),
            "t" : NumberLong(1)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1608772772, 1),
            "t" : NumberLong(1)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1608772772, 1),
            "t" : NumberLong(1)
        }
    },
    "members" : [
        {
            "_id" : 1,
            "name" : "152.136.193.58:37017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 57238,
            "optime" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2020-12-24T01:19:32Z"),
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "electionTime" : Timestamp(1608715848, 1),
            "electionDate" : ISODate("2020-12-23T09:30:48Z"),
            "configVersion" : 2,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 2,
            "name" : "152.136.193.58:37018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 56937,
            "optime" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2020-12-24T01:19:32Z"),
            "optimeDurableDate" : ISODate("2020-12-24T01:19:32Z"),
            "lastHeartbeat" : ISODate("2020-12-24T01:19:33.896Z"),
            "lastHeartbeatRecv" : ISODate("2020-12-24T01:19:34.917Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "152.136.193.58:37017",
            "syncSourceHost" : "152.136.193.58:37017",
            "syncSourceId" : 1,
            "infoMessage" : "",
            "configVersion" : 2
        },
        {
            "_id" : 3,
            "name" : "152.136.193.58:37019",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 13,
            "optime" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1608772772, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2020-12-24T01:19:32Z"),
            "optimeDurableDate" : ISODate("2020-12-24T01:19:32Z"),
            "lastHeartbeat" : ISODate("2020-12-24T01:19:33.897Z"),
            "lastHeartbeatRecv" : ISODate("2020-12-24T01:19:35.214Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "152.136.193.58:37017",
            "syncSourceHost" : "152.136.193.58:37017",
            "syncSourceId" : 1,
            "infoMessage" : "",
            "configVersion" : 2
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1608772772, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1608772772, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

6.复制集操作演示

进入主节点 ----- 插入数据 ------ 进入从节点验证
注意:默认节点下从节点不能读取数据。调用 rs.slaveOk() 解决

mongodb 学习之——MongoDB 复制集搭建

 

 

 mongodb 学习之——MongoDB 复制集搭建

 

 

 

 

为了保证高可用,在集群当中如果主节点挂掉后,会自动 在从节点中选举一个 重新做为主节点。
rs.status()
节点说明:
PRIMARY 主节点: 可以查询和新增数据
SECONDARY 从节点:只能查询 不能新增 基于priority 权重可以被选为主节点
ARBITER 仲裁节点: 不能查询数据 和新增数据 ,不能变成主节点

7.主从自动切换操作演示

 现在我们起俩个窗口,一主一从(37017主机,37018从机),新开启窗口干掉主节点。。验证从节点是否会变成主节点。发现从节点37018变成主节点,,当再次启动节点37017节点,因优先界别高,37017会再次变为主节点。

mongodb 学习之——MongoDB 复制集搭建

 

 

 

mongodb 学习之——MongoDB 复制集搭建

 

 

 mongodb 学习之——MongoDB 复制集搭建

 

 

 8.添加冲裁节点

注:新建配置文件mongo_37020.conf,并建立server4 文件夹,启动37020节点

#仲裁节点
dbpath=/data/mongo/data/server4
bind_ip=0.0.0.0
port=37020
fork=true
logpath=/data/mongo/logs/server37020.log
replSet=wgCluster

 

    配置方式  

var cfg ={"_id":"wgCluster",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"152.136.193.58:37017","priority":10},
{"_id":2,"host":"152.136.193.58:37018","priority":0},
{"_id":3,"host":"152.136.193.58:37019","priority":5},
{"_id":4,"host":"152.136.193.58:37020","arbiterOnly":true}
]
};
// 重新装载配置,并重新生成集群节点。
rs.reconfig(cfg)
//重新查看集群状态
rs.status()

动态添加

和上面的配置步骤相同 只是增加了 一个特殊的仲裁节点
注入节点 执行 rs.addArb("IP:端口");
rs.addArb("192.168.211.133:37020")

9复制集成员的配置参数

mongodb 学习之——MongoDB 复制集搭建

 

mongodb 学习之——MongoDB 复制集搭建

上一篇:SpringBoot数据库连接加密


下一篇:Mysql8搭建和问题