副本集配置

MongoDB的复制涉及主从节点的数据同步,提供数据备份和高可用性。配置副本集包括启动主节点、添加从节点、状态查看等步骤,可通过命令行或配置文件方式进行。在Docker中,可以创建多个容器来模拟一主多从的环境,通过rs.initiate()命令初始化主节点,并设置从节点为可读状态。
摘要由CSDN通过智能技术生成

MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的荣誉备份,提高可用性。

一:原理

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。

二:MongoDB副本集设置

1):启动主节点

首先停止当前mongoDB服务,然后使用下面命令重新启动服务

mongod --port 27017 --dbpath "/wing/mongo/data" --replSet rs0
# --dbpath :指定mongo数据存储地址
# --replSet :指定mongo实例名称

2):添加副本集

rs.add("192.168.1.2:27017")

3):状态查看

rs.conf()  # 查看副本集的配置
rs.status()   # 查看副本集状态

三:配置流程

1:启动容器

# 1:启动三个容器,三个节点指向一个"rs"
# 1-1
docker run -itd --name mongo1 -p 27021:27017 --restart=always -v /docker_volume/mongodb_1/data/db:/data/db -v /docker_volume/mongodb_1/data/conf:/data/conf -v /docker_volume/mongodb_1/data/log:/data/log mongo:4.4 --replSet "rs"

# 1-2
docker run -itd --name mongo2 -p 27022:27017 --restart=always -v /docker_volume/mongodb_2/data/db:/data/db -v /docker_volume/mongodb_2/data/conf:/data/conf -v /docker_volume/mongodb_2/data/log:/data/log mongo:4.4 --replSet "rs"

# 1-3
docker run -itd --name mongo3 -p 27023:27017 --restart=always -v /docker_volume/mongodb_3/data/db:/data/db -v /docker_volume/mongodb_3/data/conf:/data/conf -v /docker_volume/mongodb_3/data/log:/data/log mongo:4.4 --replSet "rs"

# 上面是参数形式启动,下面是第二种方式通过配置文件启动

2:设置主节点

# 选择你要设为主节点的mong容器,进入并连接 ,只在主节点执行
sudo docker exec -it mongo1 mongo --host 10.0.4.17 --port 27021

# 进入容器化,执行初始化命令,将该节点变为主节点
rs.initiate()
# 或者
rs.initiate(
    {
    _id:"集群名称"# mongoDB启动时 --replSet "rs" 一致,此处值应该是rs
    version:1,
    members:[
        {_id:0,host:"主节点IP:27017"},  #主节点
        {_id:1,host:"从节点IP:27017"},
        {_id:2,host:"从节点IP:27017"}
        ]
    }
)
# 例子
rs.initiate(
    {
    _id:"rs2",
    version:1,
    members:[
        {_id:0,host:"10.0.4.17:27024"},
        {_id:1,host:"10.0.4.17:27025"},
        {_id:2,host:"10.0.4.17:27026"}
        ]
    }
)

3:配置从节点

# 从节点默认是不可读  不可写的,需开启读,才能验证是否配置成功!只在从节点执行
db.getMongo().setSlaveOk()

四:配置流程(配置文件方式:推荐)

1:创建配置文件

# 创建文件mongo.conf.orig,修改权限777,添加如下内容
# 每个配置文件都要配置
storage:
  dbPath: /data/db   # 容器的路径,并非挂载路径
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path: /data/log/mongodb.log   # 容器里的路径,并非挂载路径
processManagement:
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27017
  bindIp: 0.0.0.0
# 复制集的名字
replication:
  replSetName: rs2
# 分片集群必须要的属性
sharding:
  clusterRole: shardsvr

2:创建日志文件并修改权限

# 创建日志文件,空文件,不需加内容,每个节点都要添加
touch mongodb.log
# 修改权限
sudo chmod 777 mongodb.log

3:启动容器

# 1:启动三个容器,三个节点指向一个"rs"
# 1-1
docker run -itd --name mongo4 -p 27024:27017 --restart=always -v /docker_volume/mongodb_4/data/db:/data/db -v /docker_volume/mongodb_4/data/conf:/data/conf -v /docker_volume/mongodb_4/data/log:/data/log mongo:4.4 -f /data/conf/mongo.conf.orig

# 1-2
docker run -itd --name mongo5 -p 27025:27017 --restart=always -v /docker_volume/mongodb_5/data/db:/data/db -v /docker_volume/mongodb_5/data/conf:/data/conf -v /docker_volume/mongodb_5/data/log:/data/log mongo:4.4 -f /data/conf/mongo.conf.orig

# 1-3
docker run -itd --name mongo6 -p 27026:27017 --restart=always -v /docker_volume/mongodb_6/data/db:/data/db -v /docker_volume/mongodb_6/data/conf:/data/conf -v /docker_volume/mongodb_6/data/log:/data/log mongo:4.4 -f /data/conf/mongo.conf.orig

# -f 配置文件:指的是容器内的配置文件

4:设置主节点

# 选择你要设为主节点的mong容器,进入并连接 ,只在主节点执行
sudo docker exec -it mongo1 mongo --host 10.0.4.17 --port 27021

# 进入容器化,执行初始化命令,将该节点变为主节点
rs.initiate()
# 或者
rs.initiate(
    {
    _id:"集群名称"# mongoDB启动时 --replSet "rs" 一致,此处值应该是rs
    version:1,
    members:[
        {_id:0,host:"主节点IP:27017"},  #主节点
        {_id:1,host:"从节点IP:27017"},
        {_id:2,host:"从节点IP:27017"}
        ]
    }
)
# 例子
rs.initiate(
    {
    _id:"rs1",
    version:1,
    members:[
        {_id:0,host:"10.0.4.17:27021"},
        {_id:1,host:"10.0.4.17:27022"},
        {_id:2,host:"10.0.4.17:27023"}
        ]
    }
)

5:配置从节点

# 从节点默认是不可读  不可写的,需开启读,才能验证是否配置成功!只在从节点执行
db.getMongo().setSlaveOk()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值