docker+mongo主从仲裁+用户密码认证

服务器信息:CentOS
docker版本:version 20.10.17
mongoDB:3.6.18
在两台服务器上部署mongo主从
机器A:192.168.214.111 (部署mongo主节点)
机器B:192.168.214.222 (部署mongo从节点+仲裁节点)

1 环境配置

1.1 准备mongo映射路径

机器A和机器B都操作

# 数据文件
mkdir -p /usr/local/mongo/data
# 日志文件
mkdir -p /usr/local/mongo/log
# 配置文件
mkdir -p /usr/local/mongo/conf
# key文件
mkdir -p /usr/local/mongo/key
1.2 准备mongo配置文件

机器A和机器B都操作

cd /usr/local/mongo/conf
vi mongo.conf

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"
1.3 准备仲裁服务映射路径

在机器B 192.168.214.222上执行

# 数据文件
mkdir -p /usr/local/mongo-arbiter/data
# 日志文件
mkdir -p /usr/local/mongo-arbiter/log
# 配置文件
mkdir -p /usr/local/mongo-arbiter/conf
# key文件
mkdir -p /usr/local/mongo-arbiter/key
1.4 准备仲裁服务配置文件

在机器B 192.168.214.222上执行

cd /usr/local/mongo-arbiter/conf
vi mongo.conf

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"
1.5 准备key文件

在机器A或机器B上执行都行,我是在机器A 192.168.214.111上执行的

cd /usr/local/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 路径下
并分别进入/usr/local/mongo/key 和 /usr/local/mongo-arbiter/key 路径下给mongodbKey.key授予权限

# 授予权限
chmod 400 mongodbKey.key
chown 999:999 mongodbKey.key

2. 安装mongo主从、仲裁

在机器A 192.168.214.111上执行

# mongo主节点
# replSet "mongo" 和mongo.conf中的replSetName要保持一致
docker run -di -p 27017:27017 -e TZ=Asia/Shanghai --restart always \
-v /usr/local/mongo/conf/:/data/conf \
-v /usr/local/mongo/data/:/data/db \
-v /usr/local/mongo/log:/data/log \
-v /usr/local/mongo/key/mongodbKey.key:/data/mongodbKey.key \
--name mongo_master mongo:3.6.18 --auth \
--replSet "mongo" \
--bind_ip_all -f /data/conf/mongo.conf

在机器B 192.168.214.222上执行

# mongo从节点
docker run -di -p 27017:27017 -e TZ=Asia/Shanghai --restart always \
-v /usr/local/mongo/conf/:/data/conf \
-v /usr/local/mongo/data/:/data/db \
-v /usr/local/mongo/log:/data/log \
-v /usr/local/mongo/key/mongodbKey.key:/data/mongodbKey.key \
--name mongo_slave mongo:3.6.18 --auth \
--replSet "mongo" \
--bind_ip_all -f /data/conf/mongo.conf

# 仲裁节点
docker run -di -p 27018:27017 -e TZ=Asia/Shanghai --restart always \
-v /usr/local/mongo-arbiter/conf/:/data/conf \
-v /usr/local/mongo-arbiter/data/:/data/db \
-v /usr/local/mongo-arbiter/log:/data/log \
-v /usr/local/mongo-arbiter/key/mongodbKey.key:/data/mongodbKey.key \
--name mongo_arbiter mongo:3.6.18 --auth \
--replSet "mongo" \
--bind_ip_all -f /data/conf/mongo.conf

3. 初始化主从+仲裁节点

在机器A或机器B上执行都行,我是在机器A 192.168.214.111上执行的

# 进入容器中mongo客户端
docker exec -it mongo_master mongo
# 带仲裁节点的初始化
# _id:"mongo",mongo为副本集名称(mongo.conf中的replSetName,注意保持一致),对应--replSet后的名称
# priority数值大的优先级高,即为默认主节点
config={  
     _id:"mongo",
    members:[
        {_id:0,host:"192.168.214.111:27017",priority:3},     
        {_id:1,host:"192.168.214.222:27017",priority:2},
        {_id:2,host:'192.168.214.222:27018',arbiterOnly:true}
       ]
    }
    #初始化
 rs.initiate(config) 
 # 初始化完成后可以查看状态
 rs.status() 

4. 创建用户名密码

在mongo主节点上执行

docker exec -it mongo_master mongo   
#切换至admin
use admin
#添加用户
db.createUser({user:'root',pwd:'root',roles:[{role:'userAdminAnyDatabase',db:'admin'},{role:'root',db:'admin'}]})
#登录
db.auth('root','root')
#切换至测试库
use test
#给测试库添加账户
db.createUser({user:'test',pwd:'123321',roles:[{role:'dbOwner',db:'test_db'}]})
# 认证用户
db.auth('test','123321')
#给测试库添加数据
db.userinfo.insert({"name":"李四","sex":"男"})
# 使用user:'test',pwd:'123321'连接mongo数据库,可以看到数据

5. 注意事项

(1)注意开防火墙端口
(2)如果在初始化时出现连接错误,可以在步骤2创建docker的命令上加上–network=host参数(仅mongo主从容器加,仲裁节点不需要)
(3)如果在搭建过程中出现错误,需要重新搭建,记得一定要将主从和仲裁的data路径下的数据删光,再重新搭建

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用 Docker 搭建 MongoDB,可以按照以下步骤操作: 1. 首先,在 Docker 上搜索 MongoDB 的官方镜像。可以使用以下命令在 Docker Hub 上搜索镜像: ``` docker search mongo ``` 2. 找到官方的 MongoDB 镜像,使用以下命令从 Docker Hub 上拉取镜像: ``` docker pull mongo ``` 3. 创建一个 MongoDB 的容器,使用以下命令: ``` docker run --name mongodb -p 27017:27017 -d mongo ``` 这个命令会创建一个名为 mongodb 的容器,并将它映射到主机的 27017 端口上。容器会在后台运行。 4. 可以使用以下命令检查容器是否正在运行: ``` docker ps ``` 如果看到 mongodb 容器正在运行,那么说明容器已经成功启动了。 5. 可以使用以下命令连接到 MongoDB 容器: ``` docker exec -it mongodb bash ``` 6. 进入容器后,可以使用以下命令连接到 MongoDB 数据库: ``` mongo ``` 如果连接成功,会看到 MongoDB 的 shell 提示符。 现在已经成功使用 Docker 搭建了 MongoDB,可以在容器中使用 MongoDB 进行开发和测试。 ### 回答2: 要搭建MongoDBDocker容器,首先需要确保已经安装并配置好了Docker。以下是搭建MongoDB Docker容器的步骤: 1. 打开终端或命令提示符,并输入以下命令来下载MongoDB Docker镜像: ``` docker pull mongo ``` 2. 安装完成后,可以使用以下命令来创建和启动MongoDB容器: ``` docker run --name mymongo -p 27017:27017 -d mongo ``` 其中,`mymongo`是你给容器起的名字,`27017`是MongoDB默认的端口号。 3. 使用以下命令来检查容器是否正常运行: ``` docker ps ``` 如果看到了`mongo`容器正在运行,表示成功搭建MongoDB Docker容器。 4. 要连接到MongoDB容器并使用其实例,可以使用以下命令: ``` docker exec -it mymongo mongo ``` 其中,`mymongo`是你给容器起的名字。这会启动MongoDB的命令行 Shell。 以上就是使用Docker搭建MongoDB的简单步骤,通过这种方式,你可以轻松地创建和管理MongoDB容器,以便于开发和测试。 ### 回答3: 要使用Docker搭建Mongo数据库,我们可以按照以下步骤进行操作: 第一步,安装DockerDocker Compose。Docker是一种容器化平台,可以轻松地创建和管理容器。Docker Compose是一个用于定义和运行多个容器的工具。 第二步,创建一个Docker Compose文件。Docker Compose文件是一个YAML格式的文件,用于定义和配置应用程序的各个服务。在这个文件中,我们需要定义Mongo容器的配置信息,例如版本、映射端口、数据存储位置等。 第三步,运行Docker Compose。使用命令行工具进入到存放Docker Compose文件的目录,然后运行以下命令: ``` docker-compose up -d ``` 这个命令会根据Docker Compose文件的配置信息,创建并运行Mongo容器。通过选项“-d”,容器将在后台运行。 第四步,验证Mongo容器是否成功搭建。可以使用以下命令查看容器的运行状态: ``` docker ps ``` 如果看到Mongo容器的状态为“Up”,说明搭建成功。 第五步,连接到Mongo容器。可以使用Mongo客户端工具,例如MongoDB Compass或命令行工具mongo,连接到Mongo容器。 ``` mongo localhost:27017 ``` 在连接成功后,你可以开始使用Mongo数据库进行数据操作了。 总结起来,使用Docker搭建Mongo数据库非常简单,只需安装DockerDocker Compose,创建Docker Compose文件,并运行即可。这种方式可以让我们快速搭建开发和测试环境,并提供了隔离和便携性的好处。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值