centos linux环境用docker部署MongoDB副本集模式及验证

本文详细介绍了如何使用Docker在三台主机上部署MongoDB副本集,包括网络配置、镜像拉取、密钥文件管理、容器创建、用户设置以及副本集的初始化和测试。
摘要由CSDN通过智能技术生成

MongoDB副本集模式部署

主要参考文件

【MongoDB】docker部署mongdb多机集群(跨主机副本集)_docker mongodb集群-CSDN博客

一、网络配置

前置操作

主master

从slave1

从slave2

hostname master-host;

bash;

hostname slave1-host;

bash;

hostname slave2-host;

bash;

三台主机下

vi /etc/hosts



192.168.247.128 master-host

192.168.247.129 slave1-host

192.168.247.130 slave2-host

二、拉取mongo最新版本镜像

docker pull mongo:latest

三、创建配置文件目录进行映射

mkdir /docker/mongo/data/mongo_replication

mkdir /docker/mongo/conf

mkdir /docker/mongo/data/mongo_replication/data

四、创建密钥文件(其他节点进行远程复制)

openssl rand -base64 741 > mongodb-keyfile;

下载后,上传相同密钥文件到其他虚拟机的相同文件目录下

五、修改文件权限

chmod 400 mongodb-keyfile;

chown polkitd mongodb-keyfile;

六、容器创建

docker run --network host --name mongo-master 
-v /docker/mongo/data/mongo_replication/data:/data/db \

-v /docker/mongo/data/mongo_replication:/opt/keyfile --hostname="master-host" \

-p 27017:27017 -d mongo \

# 进入容器进行用户创建

docker exec -it mongo-master mongosh admin

七、用户创建

# 创建用户

db.createUser({user:"UserAdmin", pwd:"user_123456", roles:[{role:"userAdminAnyDatabase", db: "admin"}]});

# 创建管理员用户

db.createUser({user:"RootAdmin", pwd:"root_123456", roles:[{role:"root", db: "admin"}]});

八、删除容器

docker stop mongo-master;

docker rm mongo-master;

===========================   副本集    ========================

九、利用密钥文件重新启动容器

(1)主节点:

docker run --network host --name mongo-master0 -v /docker/mongo/data/mongo_replication/data:/data/db \

-v /docker/mongo/data/mongo_replication:/opt/keyfile --hostname="master-host" \

--add-host master-host:192.168.247.128 \

--add-host slave1-host:192.168.247.129 \

--add-host slave2-host:192.168.247.130 \

-p 27017:27017 -d mongo \

--keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"

(2)副节点

docker run --network host --name mongo-slave01 -v /docker/mongo/data/mongo_replication/data:/data/db \

 -v /docker/mongo/data/mongo_replication:/opt/keyfile --hostname="slave1-host" \

 -v /docker/mongo/data/mongo_replication/mongodb-keyfile:/opt/keyfile/mongodb-keyfile \

 --add-host master-host:192.168.247.128 \

 --add-host slave1-host:192.168.247.129 \

 --add-host slave2-host:192.168.247.130 \

 -p 27017:27017 -d mongo \

 --keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"

(3)仲裁节点

docker run --network host --name mongo-slave02 -v /docker/mongo/data/mongo_replication/data:/data/db \

 -v /docker/mongo/data/mongo_replication:/opt/keyfile --hostname="slave2-host" \

 -v /docker/mongo/data/mongo_replication/mongodb-keyfile:/opt/keyfile/mongodb-keyfile \

 --add-host master-host:192.168.247.128 \

 --add-host slave1-host:192.168.247.129 \

 --add-host slave2-host:192.168.247.130 \

 -p 27017:27017 -d mongo \

 --keyFile /opt/keyfile/mongodb-keyfile --replSet "rs0"

十、主节点初始化副本集

# 进入容器进行用户创建

docker exec -it mongo-master0 mongosh admin

db.auth("RootAdmin", "root_123456"); # 登录用户
config = {

  "_id" : "rs0",

  "members" : [

    {

      "_id" : 0,

      "host" : "master-host:27017",

      "priority" : 2

    },

    {

      "_id" : 1,

      "host" : "slave1-host:27017",

      "priority" : 1

    },

    {

      "_id" : 2,

      "host" : "slave2-host:27017",

      "arbiterOnly" : true

    }

  ]

}

rs.initiate(config)

副节点添加

 rs.add({ "_id" : 1,host: "slave1-host:27017", priority: 1, votes: 0 })

仲裁节点添加

rs.addArb("slave2-host:27017")

十一、验证查看副本集状态

rs.status()

可看到主机名称和分配角色name,stateStr

十二、测试主从同步

进入其他容器

docker exec -it mongo-slave1 mongosh admin

docker exec -it mongo-slave2 mongosh admin

(1)主节点插入

use test-db

db.createCollection("test-collection");

db.test.insertOne({"name" : "xuban"})

 db.test.find()

(2)从节点同步

# 登录用户

db.auth("RootAdmin", "root_123456");

use test-db

#默认不允许从从节点读取数据,需要做一个配置才可以读取

rs.secondaryOk()

 db.test.find()

附(常见问题解决):容器启动失败解决:

  1. 1、 Error: Unable to acquire security key[s]:

执行:chown polkitd mongodb-keyfile;

将密钥文件所有者改为与mongo的数据存储文件夹相同

执行:chmod 400 mongodb-keyfile;

权限改为可读

2、强制修改配置(配置发现有误时)

rs.reconfig(restConfig,{force:true})

rs.status()

查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值