准备环境
系统版本 | IP地址 | MongoDB版本 | 角色 |
---|---|---|---|
Ubuntu 20.04 | 10.84.3.123 | 4.2.25 | PRIMARY |
Ubuntu 20.04 | 10.84.3.124 | 4.2.25 | SECONDARY |
Ubuntu 20.04 | 10.84.3.125 | 4.2.25 | SECONDARY |
部署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数据库,没有任何权限,但是能创建用户
仅登录用户可评论,点击 登录