docker配置搭建mongo复制集

集群方式有三种:Replica Set、Sharding、Master-Slaver三种方式
常用的主要是副本集和主从模式,主从模式比较好理解,即一个master和一个slave节点,master节点负责读写,slave在master宕机的时候可以提供读服务,当然也可以通过配置参数实现在访问量高的时候让slave节点也提供读服务;
而副本集模式比较特殊,但这种模式也是比较稳定,可靠,同时在一定的情况下能够实现自动容错的机制,它主要包括如下几部分,Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。
仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。
下面我们在三台虚拟机上模式搭建一下mongodb的这种副本集模式的集群:

1、环境准备,提前安装好docker和docker-compose

192.168.81.131(主)、192.168.81.132(备)、192.168.81.131(仲裁)

2、pull下mongo镜像

docker pull mongo

3、编辑mongod.conf配置文件(三个节点配置相同)

dbpath=/data/db
logappend=true
journal=true
port=27017
replSet=test

4、编辑docker-compose.yaml文件(其中第三步的mongd.conf是存放在./configdb目录下的,配置文件内容还可完善)

version: "3"
services:
  mongo:
    image: mongo
    container_name: mongo
    ports:
      - "27017:27017"
    volumes:
      - "./db:/data/db"
      - "./configdb:/data/configdb"
    environment:
      - TZ=Asia/Shanghai
    command: --bind_ip_all --config /data/configdb/mongod.conf
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    networks:
     - mynet
networks:
  mynet:
    external: true

5、docker-compose启动三台主机的容器

docker-compose up -d

6、配置集群信息

进入容器,执行mongo命令以进入mongo的shell模式,然后执行:

cfg={ _id:"test", members:[ {_id:0,host:'192.168.81.131:27017',priority:2},{_id:1,host:'192.168.81.132:27017',priority:1}, {_id:2,host:'192.168.81.133:27017',arbiterOnly:true}] };

其中priority为权重,数字越大,权重越大,最大者为主节点

 然后加载配置:

rs.initiate(cfg);

 然后执行rs.status()命令即可查看当前状态了

 当前复制集配置完成了

猜你喜欢

转载自www.cnblogs.com/caibao666/p/12575569.html