docker方式部署mongodb带认证的分片副本集群
一、背景知识
副本集:参阅官网-https://docs.mongodb.com/manual/replication/
分片:参阅官网-https://docs.mongodb.com/manual/sharding/
二、集群结构
说明:三个config-server构成config-server副本集;集群中有三个分片,每个分片是一个包含两个节点的副本集。
三、一些准备工作
1、创建mongodb用户和组
在三台服务器上创建mongodb用户和组,这是用来启动容器的用户。开启mongodb的认证功能时,需要使用密钥文件,密钥文件放在宿主机,映射到容器中,容器中默认启动mongo程序的用户是999(容器内的用户名是mongodb),与宿主机的用户不同,而密钥文件的权限必须为400,不能过大,不能过小。密钥文件权限为400时,容器内外用户不一致,会导致无法读取密钥文件的问题,如果密钥文件权限超过400,程序会提示密钥权限过大,启动失败。
注意:创建mongodb用户和组后,后续部署操作均使用mongodb用户进行。或确保相关目录的用户和组均归属于mongodb,否则会出现权限问题。
groupadd mongodb
useradd -g mongodb mongodb
创建完用户后,在/etc/passwd文件中查看并记下用户号和组号,启动时需要用到。如下图,“x:”后面跟着的依次是用户号和组号,这里都是1000。
2、在docker中新建mongodb网络(本文通过宿主机IP和端口可区别集群各节点,因此无需指定容器IP,此步骤及后续步骤中指定IP地址的部分在本文场景下无意义)
因为配置mongodb副本集时需要指定各节点的IP,而docker默认网络是为容器动态分配IP的,如若需要指定IP,需要使用用户自己创建的网络,不能在docker创建的默认网段中指定IP地址,因此需要新建docker网络。命令如下:
docker network create --subnet 172.100.100.0/24 mongodb
网段为自定义,只要不与现有的docker网段冲突即可;mongodb为新建的网络名,自定义。新建的网络为bridge模式,可使用“docker network ls”命令查看docker网络列表。
四、部署config-server副本集
config-server存储分片集群的元数据,元数据包括每个分片上的块列表以及定义块的范围,元数据反映了分片集群中所有数据和组件的状态和组织。config-server的详细介绍可百度,或查看官网介绍:https://docs.mongodb.com/manual/core/sharded-cluster-config-servers/#sharding-config-server。
此步骤需要在所有config-server节点执行。
1、创建config-server目录,本例为/apps/mongodb/configsvr。目录结构如图:
说明:conf、data、logs目录都需要映射到容器中,conf是配置文件目录,data和logs分别存放数据和运行日志。
2、编辑config-server的配置文件,本例为/apps/mongodb/configsvr/conf/configsvr.conf,内容如下ÿ