准备环境

系统版本IP地址MongoDB版本角色
Ubuntu 20.0410.84.3.1234.2.25PRIMARY
Ubuntu 20.0410.84.3.1244.2.25SECONDARY
Ubuntu 20.0410.84.3.1254.2.25SECONDARY

部署MongoDB容器

1.创建复制集群认证文件

创建MongoDB keyfile认证文件 666可以自定义

openssl rand -base64 666 > mongodb.key

2. PRIMARY的docker-compose文件

cat > docker-compose.yaml << EOF
version: '3.3'
services:
  mongo-master:
    container_name: mongo-master
    image: docker-hub-1cc.pages.dev/mongo:4.2.24
    restart: always
    volumes:
      - /data/mongo:/var/lib/mongodb
      - /etc/localtime:/etc/localtime
      - ./logs:/var/log/mongodb/
      - ./mongod.conf:/etc/mongod.conf
      - ./mongodb.key:/data/mongodb.key
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: Sec@2024...
      TZ: Asia/Shanghai
    command: mongod --keyFile /data/mongodb.key --config /etc/mongod.conf --oplogSize 128
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /data/mongodb.key
        chown 999:999 /data/mongodb.key
        exec docker-entrypoint.sh "$$@"
EOF

3. SECONDARY的docker-compose文件

cat > docker-compose.yaml << EOF
version: '3.3'
services:
  mongo-master:
    container_name: mongo-master
    image: docker-hub-1cc.pages.dev/mongo:4.2.24
    restart: always
    volumes:
      - /data/mongo:/var/lib/mongodb
      - /etc/localtime:/etc/localtime
      - ./logs:/var/log/mongodb/
      - ./mongod.conf:/etc/mongod.conf
      - ./mongodb.key:/data/mongodb.key
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: Sec@2024...
      TZ: Asia/Shanghai
    command: mongod --keyFile /data/mongodb.key --config /etc/mongod.conf --oplogSize 128
    entrypoint:
      - bash
      - -c
      - |
        chmod 400 /data/mongodb.key
        chown 999:999 /data/mongodb.key
        exec docker-entrypoint.sh "$$@"
EOF

4.Mongo 配置文件

cat > mongod.conf << EOF
systemLog:
  destination: file
  path: "/var/log/mongodb/mongodb.log"
  logAppend: true
storage:
  dbPath: "/var/lib/mongodb"
net:
  port: 27017
  bindIp: 0.0.0.0
replication:
  replSetName: rs
EOF

5. 启动三台服务

docker-compose up -d

配置复制集

1. 安装客户端包

apt update
apt-cache madison mongodb-clients
apt install mongodb-clients

注意:一定要安装与Server对应的客户端,否者可能出现语法不兼容等问题

2. 登录mongodb

mongo -u root -p Sec@2024...

3.切换库

use admin

4. 指定复制集的所有成员信息

config = { _id: 'rs', members: [
{_id: 0, host: '10.84.3.123:27017'},
{_id: 1, host: '10.84.3.124:27017'} ,
{_id: 2, host: '10.84.3.125:27017'}]
}

5. 初始化并启动复制集

rs.initiate(config)

6. 查询复制集状态

rs.status()

注意:初始化后MongoDB需要选举PRIMARY,因此需要等待片刻才能看到PRIMARY,使用mongo时能登陆进MongoDB数据库,没有任何权限,但是能创建用户

最后修改:2024 年 08 月 08 日
如果觉得我的文章对你有用,请随意赞赏