吹静静

欢迎QQ交流:592590682

安装简介

本文主要介绍了在Docker环境下如何安装Mongo集群的过程,Mongo集群采用单分片三副本模式进行部署。

服务器:bigdata1、bigdata2、bigdata3

部署服务:config-server、shard-server、mongos

Docker镜像:mongo:4.4.14

创建目录

创建mongo配置文件目录及数据存储目录。

mkdir /data/mongo-cluster
cd /data/mongo-cluster/ | mkdir config-server shard-server mongos
cd /data/mongo-cluster/config-server | mkdir data conf
cd /data/mongo-cluster/shard-server | mkdir data conf
cd /data/mongo-cluster/mongos | mkdir data conf

导入配置

(1)生成并配置认证文件:mongo.key

# 生成文件
openssl rand -base64 756  > /data/mongo-cluster/mongo.key
chmod 400 /data/mongo-cluster/mongo.key
# 复制文件到所有文件
cp /data/mongo-cluster/mongo.key /data/mongo-cluster/config-server/conf/
cp /data/mongo-cluster/mongo.key /data/mongo-cluster/mongos/conf/
cp /data/mongo-cluster/mongo.key /data/mongo-cluster/shard-server/conf/
rm -r /data/mongo-cluster/mongo.key

(2)在目录 /data/mongo-cluster/config-server/conf 下创建文件 mongo.conf

vim /data/mongo-cluster/config-server/conf/mongo.conf

# 日志文件
#systemLog:
#  destination: file
#  logAppend: true
#  path: /var/log/mongodb/data0802.log

#  网络设置
net:
  port: 27019  #端口号
#  bindIp: 127.0.0.1    #绑定ip
replication:
  replSetName: configsvr
sharding:
  clusterRole: configsvr
security:
  authorization: enabled #是否开启认证
  keyFile: /data/configdb/mongo.key #keyFile路径 

(3)在目录 /data/mongo-cluster/mongos/conf 下创建文件 mongo.conf

vim /data/mongo-cluster/mongos/conf/mongo.conf

net:
  port: 27017  #端口号
sharding:
  configDB: configsvr/bigdata1:27019,bigdata2:27019,bigdata3:27019
security:
  keyFile: /data/configdb/mongo.key #keyFile路径

(4)在目录 /data/mongo-cluster/config-server/conf 下创建文件 mongo.conf

vim /data/mongo-cluster/shard-server/conf/mongo.conf

# 日志文件
#systemLog:
#  destination: file
#  logAppend: true
#  path: /var/log/mongodb/data0802.log

#  网络设置
net:
  port: 27018  #端口号
#  bindIp: 127.0.0.1    #绑定ip
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr
security:
  authorization: enabled #是否开启认证
  keyFile: /data/configdb/mongo.key #keyFile路径 

(5)将文件分发到各个节点

scp -r /data/mongo-cluster root@bigdata2:/data/
scp -r /data/mongo-cluster root@bigdata3:/data/

容器部署

在所有节点都执行以下操作。

 (1)config-server

sudo docker run -d \
--name config-server \
--net=host \
--privileged=true \
--restart=always \
-v /data/mongo-cluster/config-server/conf:/data/configdb \
-v /data/mongo-cluster/config-server/data:/data/db \
-v /etc/hosts:/etc/hosts \
-e TZ=Asia/Shanghai \
mongo:4.4.14 -f /data/configdb/mongo.conf --bind_ip_all

 (2)mongos

sudo docker run -d \
--name mongos \
--net=host \
--privileged=true \
--restart=always \
--entrypoint "mongos" \
-v /msun/data/mongo-cluster/mongos/conf:/data/configdb \
-v /msun/data/mongo-cluster/mongos/data:/data/db \
-v /etc/hosts:/etc/hosts \
mongo:4.4.14 -f /data/configdb/mongo.conf --bind_ip_all

 (3)shard-server

sudo docker run -d \
--name shard-server \
--net=host \
--privileged=true \
--restart=always \
-v /data/mongo-cluster/shard-server/conf:/data/configdb \
-v /data/mongo-cluster/shard-server/data:/data/db \
-v /etc/hosts:/etc/hosts \
-e TZ=Asia/Shanghai \
mongo:4.4.14 -f /data/configdb/mongo.conf --bind_ip_all

 初始化Mongo

在bigdata1节点上执行以下操作。

(1)初始化config-server

sudo docker exec -it config-server bash
mongo -port 27019

# 进行副本集配置
rs.initiate(
  {
    _id: "configsvr",
    members: [
      { _id : 1, host : "bigdata1:27019" },
      { _id : 2, host : "bigdata2:27019" },
      { _id : 3, host : "bigdata3:27019" }
    ]
  }
);

# 创建用户密码
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
(2)初始化shard-serve
sudo docker exec  -it shard-server bash
mongo -port 27018
 
# 进行副本集配置
rs.initiate(
  {
    _id : "shard1",
    members: [
        { _id : 0, host : "bigdata1:27018" },
        { _id : 1, host : "bigdata2:27018" },
        { _id : 2, host : "bigdata3:27018" }
    ]
  }
);

use admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
(3)为分片添加副本并测试
sudo docker exec -it mongos bash
mongo -port 27017

# 先登录(使用前面设置的root用户密码)
use admin;
db.auth("root","root");

sh.addShard("shard1/bigdata1:27018,bigdata2:27018,bigdata3:27018")
# 创建数据库
use dw;
# 为数据库启用分片
sh.enableSharding("dw");
# 为集合设置分片规则
sh.shardCollection("dw.test", { "_id": "hashed" })
# 数据验证
for (i = 1; i <= 1000; i++) {
    db.getCollection("test").insert({'price': 1})
}
# 查询总数
db.getCollection("test").count()

 

posted on 2023-01-13 17:21  吹静静  阅读(278)  评论(0编辑  收藏  举报