others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

mongodb 复制集介绍及搭建

访问量:1318 创建时间:2021-04-29
主机名 mongodb复制集群环境IP
centos1 192.168.52.128
centos2 192.168.52.129
centos3 192.168.52.130

MongoDB复制集的主要意义在于实现服务高可用。它的实现依赖于两个方面的功能:数据写入时将数据迅速复制到另一个独立节点上,在接受写入的节点发生故障时自动选举出一个新的替代节点。 除了高可用,其他用处:数据分发--将数据从一个区域复制到另一个区域,减少另一个区域的读延迟;读写分离--不同类型的压力分别在不同的节点上执行;异地容灾--在数据中心故障时候快速切换到异地。

复制集结构

cento7 yum搭建 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"
  }]
})
登陆评论: 使用GITHUB登陆