主机名 | mongodb复制集群环境IP |
---|---|
centos1 | 192.168.52.128 |
centos2 | 192.168.52.129 |
centos3 | 192.168.52.130 |
MongoDB复制集的主要意义在于实现服务高可用。它的实现依赖于两个方面的功能:数据写入时将数据迅速复制到另一个独立节点上,在接受写入的节点发生故障时自动选举出一个新的替代节点。 除了高可用,其他用处:数据分发--将数据从一个区域复制到另一个区域,减少另一个区域的读延迟;读写分离--不同类型的压力分别在不同的节点上执行;异地容灾--在数据中心故障时候快速切换到异地。
安装:(三台机器安装操作相同)
配置hostname和/etc/hosts文件
[root@localhost ~]# vim /etc/hosts
###增加以下内容
192.168.52.128 centos1
192.168.52.129 centos2
192.168.52.130 centos3
###以下命令根据IP在不同机器执行
[root@localhost ~]# hostnamectl set-hostname centos3
[root@localhost ~]# hostnamectl set-hostname centos2
[root@localhost ~]# hostnamectl set-hostname centos1
[root@localhost ~]# yum install -y mongodb-org
[root@localhost ~]# vim /etc/mongod.conf
##修改以下配置
net:
port: 27017
bindIp: 0.0.0.0
replication:
replSetName: rs0
配置复制集:1、第一种方式,在一个节点初始化,把另外2个节点加入进来。2、第二种方式,在3个节点通过公共的配置文件来配置复制集。
[root@localhost ~]# mongo
> rs.initiate()
rs0:SECONDARY>
###查看复制集信息(当前只有一个节点,并且切换到了primary状态)
rs0:PRIMARY> rs.status()
###添加其他节点ok:1表示添加成功
rs0:PRIMARY> rs.add("centos2:27017")
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1619752001, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1619752001, 1)
}
rs0:PRIMARY> rs.add("centos3:27017")
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1619752007, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1619752007, 1)
############################再次查看节点信息
rs0:PRIMARY> rs.status()
验证:主节点写入,从节点读取
#主节点写入数据
rs0:PRIMARY> db.test.insert({a:1})
WriteResult({ "nInserted" : 1 })
##从节点开启读取,读取数据
rs0:SECONDARY> rs.slaveOk()
WARNING: slaveOk() is deprecated and may be removed in the next major release. Please use secondaryOk() instead.
rs0:SECONDARY> rs.secondaryOk()
rs0:SECONDARY> db.test.find()
{ "_id" : ObjectId("608b75396e5147841802cace"), "a" : 1 }
#mongo --port 27017
>rs.initiate({
_id:"rs0",
members:[{
_id:0,
host:"centos1:27017"
},{
_id:1,
host:"centos2:27017"
},{
_id:2,
host:"centos3:27017"
}]
})