Mongodb集群的安装部署
参考资料:
https://linux.cn/article-4832-1-rel.html
1. 准备工作
在三台虚拟机安装docker,并且关闭防火墙:
yum –y install docker
systemctl disabled firewalld
vi /etc/selinux/config
SELINUX=disabled
2.将节点的IP地址配置到所有的服务器上面,每一台服务器(节点)执行如下命令:
export node1=10.10.10.27
export node2=10.10.10.23
export node3=10.10.10.50
3.为每个节点创建密钥文件。在主节点上面执行如下的命令,在这个教程中,所有的东西都放在“/home/core”文件夹中:
mkdir -p /home/core
cd /home/core
openssl rand -base64 741 >mongodb-keyfile
chmod 600 mongodb-keyfile
sudo chown 999 mongodb-keyfile
4.将home/core下刚生成的密钥文件复制到其余节点的同样的位置:
scp -r /home/core root@10.10.10.23:/home
scp -r /home/core root@10.10.10.50:/home
5.在主节点上使用docker查询、拉取MongoDB的镜像并运行:
docker search mongodb
docker pull mongodb
docker run --name=yk-mongo \
-v /home/core/mongo-files/data:/data/db \
-v /home/core/mongo-files:/opt/keyfile \
--hostname="node1" \
-p 27017:27017 \
-d docker.io/mongo \
--smallfiles
6.在主节点上启动刚运行的MongoDB容器,并进入一个交互式的shell环境:
docker exec -it yk-mongo bash
mongo
7.在主节点上切换到admin用户并创建一个新的site admin用户:
use admin
db.createUser( {
user: "yk-mongodb",
pwd: "Seadee123qwe",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]});
若创建成功则会看到返回的成功信息。
再创建一个root用户:
db.createUser( {
user: "yk-root-mongodb",
pwd: "Seadee123qwe ", roles: [ { role: "root", db: "admin" } ]});
若创建成功则会看到返回的成功信息。
8.退出mongo环境及yk-mongo容器:
exit
exit
停掉并删除yk-mongo容器;
docker stop yk-mongo
docker rm yk-mongo
9.在主节点上使用秘钥启动yk-mongo容器:
首先生成/home/keyfile文件夹:
mkdir /home/keyfile
启动容器:
docker run --name=yk-mongo \
-v /home/core/mongo-files/data:/data/db \
-v /home/core/mongo-files:/opt/keyfile \
-v /home/keyfile:/opt/keyfile/mongodb-keyfile \
--hostname="node1" \
--add-host node1:10.10.10.27 \
--add-host node2:10.10.10.23 \
--add-host node3:10.10.10.50 \
-p 27017:27017 -d docker.io/mongo \
--smallfiles \
--replSet "rs0"
10.在主节点上进入yk-mongo容器并进入mongo环境:
docker exec -it yk-mongo bash
mongo
换到admin用户:
use admin
做身份验证:
db.auth("yk-root-mongodb", "Seadee123qwe")
开启副本集:
rs.initiate()
11.验证已经初始化的副本集的配置:
rs.conf()
12.在其他两个节点上启动yk-mongo容器:
首先在两个节点上生成/home/keyfile文件夹:
mkdir /home/keyfile
docker run --name=yk-mongo \
-v /home/core/mongo-files/data:/data/db \
-v /home/core/mongo-files:/opt/keyfile \
-v /home/keyfile:/opt/keyfile/mongodb-keyfile \
--hostname="node2" \
--add-host node1:10.10.10.27 \
--add-host node2:10.10.10.23 \
--add-host node3:10.10.10.50 \
-p 27017:27017 -d docker.io/mongo \
--smallfiles \
--replSet "rs0"
docker run --name=yk-mongo \
-v /home/core/mongo-files/data:/data/db \
-v /home/core/mongo-files:/opt/keyfile \
-v /home/keyfile:/opt/keyfile/mongodb-keyfile \
--hostname="node3" \
--add-host node1:10.10.10.27 \
--add-host node2:10.10.10.23 \
--add-host node3:10.10.10.50 \
-p 27017:27017 -d docker.io/mongo \
--smallfiles \
--replSet "rs0"
13.在主节点上,按回车键,可以看到下面的提示:“rs0:PRIMARY”。这是因为这个节点是副本集“rso”的主节点。
现将其他节点加入MongoDB集群:
rs.add("node2")
rs.add("node3")
验证其它两个节点是否正确的加到这个副本集当中:
rs.status()
现在已经建立了一个MongoDB集群。以后可以按照需要在任何时刻添加节点到这个集群上。也可以关闭其中的一个节点(包括主节点),然后观察一个另外一个节点重新变成了主节点。由于这些数据都被写在了本机文件系统当中,所以重启任何一个节点都不是什么大问题