mongodb容器化部署

mongodb容器化部署

1. 单节点

  • 创建工作目录
mkdir -p /data/mongodb/{
    
    conf,data,logs}
  • 容器编排

构建docker-compose.yaml

version: '3'
services:
  mongodb-container:
    image: mongo:4.4.18
    container_name: mongodb-container
    command: [--auth]
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: Gn8_J777sxxn
    volumes:
        - /data/mongodb/data:/data/db
        - /data/mongodb/conf:/data/configdb
        - /data/mongodb/logs:/var/log/mongodb
    ports:
      - 27017:27017
    restart: always
    logging:
      driver: json-file
      options:
        max-size: "100m"
        max-file: "50"
  • 启动服务
cd /data/mongodb
docker-compose -f docker-compose.yaml up -d
  • 验证
# 进入容器
docker exec -it mongodb-container bash
mongo 127.0.0.1:27017/admin -u root -p

2. 主从复制

副本集群是一组维护相同数据集的mongod实例。一个副本集包含几个承载数据的节点和一个可选的仲裁节点。在承载数据的节点中,只有一个节点被认为是主节点,其他节点被认为是次节点。

主节点接收所有的写操作,次节点接收主节点的操作应用在自己的数据集上,副本节点只是做一个备份的作用,当主节点出现故障时,会自动选出新的主节点。

本教程描述的是包含三个节点的副本集群搭建,所有节点都没有开启访问控制。

因为集群需要通过选举来确定master节点,为了选举不会出现问题,所以集群成员数量应该总是奇数个。

  • 创建工作目录
# 在所有节点创建工作目录
mkdir -p /data/mongodb/{
    
    conf,data,logs}
  • 创建keyfile
cd /data/mongodb/conf
openssl rand -base64 756 > mongodb.key
chmod 400 mongodb.key
# 将mongodb.key分发至所有mongodb宿主机的相同目录
  • 容器编排

docker-compose.yaml

version: '3'
services:
  mongodb:
    image: mongo:4.4.18
    container_name: mongodb
    command: mongod --auth --keyFile /data/configdb/mongodb.key --replSet MongoRs
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: Gn8_J777sxxn
    volumes:
        - /data/mongodb/data:/data/db
        - /data/mongodb/conf:/data/configdb
        - /data/mongodb/logs:/var/log/mongodb
    ports:
      - 27017:27017
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /data/configdb/mongodb.key
        chown 999:999 /data/configdb/mongodb.key
        exec docker-entrypoint.sh $$@
    restart: always
  • 启动服务

在每个节点启动服务

cd /data/mongodb
docker-compose -f docker-compose.yaml up -d
  • 配置副本集
# 本次假设需要设定192.168.1.11为主,其余为从
# 登录192.168.10.101上的库(使用客户端命令连接任意一个节点,但这里尽量要连接主节点)
docker exec -it mongodb bash
mongo 192.168.1.11:27017/admin -u root -p

# 添加配置信息
# 这里的_id要与docker-compose中的参数一致,priority指定选举优先级,越高越容易被选举为主,默认为1
> config={
    
    _id:"MongoRs",members:[ 
{
    
    _id:0,host:"192.168.1.11:27017",priority:10}, 
{
    
    _id:1,host:"192.168.1.12:27017",priority:1}, 
{
    
    _id:2,host:"192.168.1.12:27017",priority:1}] 
}

# 初始化副本集
> rs.initiate(config)

# 查看副本集配置信息
> rs.conf()

# 查看副本集运行状态:
> rs.status()
  • 在application.yml中配置副本集
spring:
  data:
    mongodb:
      uri: mongodb://root:[email protected]:27017,192.168.1.12:27017,192.168.1.13:27017/admin?replicaSet=MongoRs&readPreference=secondaryPreferred&connectTimeoutMS=300000&slaveOk=true

猜你喜欢

转载自blog.csdn.net/m0_38004228/article/details/130520364