























#MongoDB副本集部署(192.168.0.74主 192.168.0.79备 192.168.0.76仲裁 )
#准备目录(主备节点),在2台机器上都执行下面的命令
# 数据文件
mkdir -p /data/mongo/data
# 日志文件
mkdir -p /data/mongo/log
# 配置文件
mkdir -p /data/mongo/conf
# key文件
mkdir -p /data/mongo/key
#准备配置文件,在2台机器上都执行
cd /data/mongo/conf
vi mongo.conf
storage:
wiredTiger:
engineConfig:
# mongodb内存上限的80%
configString : cache_size=1024m
net:
#启动端口
port: 27017
#允许连接的IP(0.0.0.0作用与--bind_ip_all类似)
bindIp: 0.0.0.0
systemLog:
#重新启动mongodb的时候日志拼接在以前的日志文件上
logAppend: true
security:
#路径是容器内的路径
keyFile: "/data/mongodbKey.key"
#开启客户端连接认证 disabled 关闭授权
authorization: "enabled"
replication:
replSetName: "mongo"
#在仲裁上准备对应的仲裁节点的路径
# 数据文件
mkdir -p /data/mongo-arbiter-el/data
# 日志文件
mkdir -p /data/mongo-arbiter-el/log
# 配置文件
mkdir -p /data/mongo-arbiter-el/conf
# key文件
mkdir -p /data/mongo-arbiter-el/key
#准备仲裁节点配置文件
cd /data/mongo-arbiter-el/conf
vi mongo.conf
net:
#启动端口
port: 27017
#允许连接的IP(0.0.0.0作用与--bind_ip_all类似)
bindIp: 0.0.0.0
systemLog:
#重新启动mongodb的时候日志拼接在以前的日志文件上
logAppend: true
security:
#路径是容器内的路径
keyFile: "/data/mongodbKey.key"
#开启客户端连接认证 disabled 关闭授权
authorization: "enabled"
replication:
replSetName: "mongo"
#准备KEY文件,在主机器上执行后COPY到从机器
cd /data/mongo/key
# 生成key文件
openssl rand -base64 756 > mongodbKey.key
# key文件必须设置成400,否则将会失败(设置成其他都会失败了,不知道是不是这个权限问题)
chmod 400 mongodbKey.key
# 赋予容器内key权限(主从仲裁节点都需要执行)
chown 999:999 mongodbKey.key
#将mongodbKey.key分别复制到机器B的 /usr/local/mongo/key 和 /usr/local/mongo-arbiter/key 路径下
sudo scp /data/mongo/key/mongodbKey.key root@192.168.0.79:/data/mongo/key
sudo scp /data/mongo/key/mongodbKey.key root@192.168.0.76:/data/mongo-arbiter-el/key
#并分别进入/data/mongo/key 和/data/mongo-arbiter-el/key 路径下给mongodbKey.key授予权限
chmod 400 mongodbKey.key
chown 999:999 mongodbKey.key
#主节点
docker run -di -p 27017:27017 -e TZ=Asia/Shanghai --restart always \
-v /data/mongo/conf/:/data/conf \
-v /data/mongo/data/:/data/db \
-v /data/mongo/log:/data/log \
-v /data/mongo/key/mongodbKey.key:/data/mongodbKey.key \
--name mongo_master \
public.ecr.aws/docker/library/mongo:8.0.17 --auth \
--replSet "mongo" \
--bind_ip_all -f /data/conf/mongo.conf
#从节点
# mongo从节点
docker run -di -p 27017:27017 -e TZ=Asia/Shanghai --restart always \
-v /data/mongo/conf/:/data/conf \
-v /data/mongo/data/:/data/db \
-v /data/mongo/log:/data/log \
-v /data/mongo/key/mongodbKey.key:/data/mongodbKey.key \
--name mongo_slave public.ecr.aws/docker/library/mongo:8.0.17 --auth \
--replSet "mongo" \
--bind_ip_all -f /data/conf/mongo.conf
# 仲裁节点
docker run -di -p 27018:27017 -e TZ=Asia/Shanghai --restart always \
-v /data/mongo-arbiter-el/conf/:/data/conf \
-v /data/mongo-arbiter-el/data/:/data/db \
-v /data/mongo-arbiter-el/log:/data/log \
-v /data/mongo-arbiter-el/key/mongodbKey.key:/data/mongodbKey.key \
--name mongo_arbiter-el public.ecr.aws/docker/library/mongo:8.0.17 --auth \
--replSet "mongo" \
--bind_ip_all -f /data/conf/mongo.conf
docker container update mongo_arbiter-el --memory="1g" --memory-swap="1g"
docker stats
#初始化主从节点,在主机器上执行
# 进入容器中mongo客户端
docker exec -it mongo_master mongosh
# 带仲裁节点的初始化
# _id:"mongo",mongo为副本集名称(mongo.conf中的replSetName,注意保持一致),对应--replSet后的名称
# priority数值大的优先级高,即为默认主节点
config={
_id:"mongo",
members:[
{_id:0,host:"192.168.0.74:27017",priority:3},
{_id:1,host:"192.168.0.79:27017",priority:2},
{_id:2,host:'192.168.0.76:27018',arbiterOnly:true}
]
}
#初始化
rs.initiate(config)
# 初始化完成后可以查看状态
rs.status()
#创建用户名密码
docker exec -it mongo_master mongo
#切换至admin
use admin
#添加用户
db.createUser({user:'admin',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'},{role:'root',db:'admin'}]})
#登录
db.auth('admin','123456')
#初始化数据库
use test
db.createUser({
user: "admin",
pwd: "123456",
roles: [{ role: "readWrite", db: "test" }]
})
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。