延安免费做网站重庆招标信息网

当前位置: 首页 > news >正文

延安免费做网站,重庆招标信息网,网站建设小知识,网站搭建十大品牌公司使用 Docker 部署 MongoDB 集群 Mongodb 集群搭建 mongodb 集群搭建的方式有三种#xff1a; 主从备份#xff08;Master - Slave#xff09;模式#xff0c;或者叫主从复制模式。副本集#xff08;Replica Set#xff09;模式。分片#xff08;Sharding#xff09;…使用 Docker 部署 MongoDB 集群 Mongodb 集群搭建 mongodb 集群搭建的方式有三种 主从备份Master - Slave模式或者叫主从复制模式。副本集Replica Set模式。分片Sharding模式。 其中第一种方式基本没什么意义官方也不推荐这种方式搭建。另外两种分别就是副本集和分片的方式。今天介绍副本集的方式搭建 mongodb 高可用集群 简介以及概述 首先我们先来了解一下 Mongo 集群的概念Mongo 集群有 3 个主要组件 ConfigServer在集群中扮演存储整个集群的配置信息负责配置存储如果需要高可用的 ConfigServer 那么需要 3 个节点。 Shard分片存储真实的数据每一个 Shard 分片都负责存储集群中的数据例如一个集群有 3 个分片然后我们定义分片规则为哈希那么整个集群的数据就会分割到 3 个分片中的某一个分片那么分片是特别重要的如果集群中的一个分片全部崩溃了那么集群将不可用所以我们要保证集群的高可用那么我们需要一个分片配置 3 个节点2 个副本集一个仲裁节点仲裁节点类似于 Redis 的哨兵模式如果发现主节点挂了那么让另一个副本集进行数据存储。 MongosMongos 我们可以理解为整个集群的入口类似于 Kafka 的 Broker 代理也就是客户端我们通过客户端连接集群进行查询。 下面是 MongoDB 的官方集群架构图我们看到 Mongos 是一个路由他们的信息都存储在 ConfigServer 中我们通过 Mongos 进行添加然后根据条件将数据进行分片到分片的副本集中 Mongo 分片集群高可用 权限 方案 那么我们先来总结一下我们搭建一个高可用集群需要多少个 Mongo mongos 3 台 configserver 3 台 shard 3 片 每一片 shard 分别 部署两个副本集和一个仲裁节点 3 台 那么就是 3 3 3 * 3 15 台由于服务器数量限制暂时使用 3 台进行部署设计如下 node-1.internal[Node 1]: 2 核 4g 部署 1 个 mongos1 个 configserver1 个分片组 node-2.internal[Node 3]: 2 核 4g 部署 1 个 mongos1 个 configserver1 个分片组 node-3.internal[Node 2]: 2 核 4g 部署 1 个 mongos1 个 configserver1 个分片组 端口分配 ip hostroleportnode-1.internalmongos10900node-1.internalconfigsvr10901node-1.internalshard-master10902node-1.internalshard-slave10903node-1.internalshard-arbiter10904node-2.internalmongos10900node-2.internalconfigsvr10901node-2.internalshard-master10902node-2.internalshard-slave10903node-2.internalshard-arbiter10904node-3.internalmongos10900node-3.internalconfigsvr10901node-3.internalshard-master10902node-3.internalshard-slave10903node-3.internalshard-arbiter10904 MongoDB Cluster 实施 为了达到高可用且控制权限的目的这里 mongo 之间通信采用秘钥文件所以我们先进行生成 openssl rand -base64 756 /mnt/data/docker/mongo-cluster/configsvr/conf/mongo.key文件如下我们之后我们所以 key 都采用这个请采用自己生成的 key tsUtJb3T…SomyNDISXDiSTJQEVym OhXXzwB…FC1q39IrUDAEpCikSKS abGl8RTE…b4I4jzvgStcPcozRgOZ 5kPvXByb…WZe4VcFiU6jgw73juZ pbcZR5oT…E8LFPBZXLGYrtmDqo0 9tA1x8R…0afT4ou2w7QHsdF0WRn nskJ1FCA…pBkj4muKUk7OTHRV6bs qr2C73bq…BIGiSD1Kyr/iqO7gD4C GN8iA3Mq…Wt5XLOWP7CBGuTo7KST Y5HAcblq…gS0GZfUk4bndLTkHrJd tcR4WreH…Woukw/eViacLlBHKOxB QVgfo449…qx5MsOlIXiFwA3ue1Lo kiFq5c6I…ChYow7TkTLf/LsnjL3m rmkDRgzA…tGIxRnP07pMS9RP4TjS ZSd9an5y…gFl/Eq5NH60Zd4utxfi qM2FH7aN…6kA配置并部署 MongoDB Cluster PS由于使用 docker-compose 部署每个宿主机配置一致以下操作重复执行即可 配置 Mongos 环境 创建配置文件 mkdir -p /mnt/data/docker/mongo-cluster/mongos/{data,conf}填入配置文件,这里我们删除了认证的信息因为 mongos 是不能设置认证的他也是用的前面使用的密码即可如 configserver 的密码 echo net:port: 10900 #端口号 sharding:configDB: configsvr/node-1.internal:10901,node-2.internal:10901,node-3.internal:10901security:keyFile: /data/configdb/mongo.key #keyFile路径/mnt/data/docker/mongo-cluster/mongos/conf/mongo.conf创建 keyfile echo ${mongoKey} /mnt/data/docker/mongo-cluster/mongos/conf/mongo.key#处理权限为400chmod 400 /mnt/data/docker/mongo-cluster/mongos/conf/mongo.key配置 Config Server 环境 创建挂载文件目录 mkdir -p /mnt/data/docker/mongo-cluster/configsvr/{data,conf}写入配置文件 echo

日志文件

#systemLog:

destination: file

logAppend: true

path: /var/log/mongodb/mongod.log# 网络设置

net:port: 10901 #端口号

bindIp: 127.0.0.1 #绑定ip

replication:replSetName: configsvr sharding:clusterRole: configsvr security:authorization: enabled #是否开启认证keyFile: /data/configdb/mongo.key #keyFile路径 /mnt/data/docker/mongo-cluster/configsvr/conf/mongo.conf写入 key 文件 echo ${mongoKey} /mnt/data/docker/mongo-cluster/configsvr/conf/mongo.key#处理权限为400chmod 400 /mnt/data/docker/mongo-cluster/configsvr/conf/mongo.key配置 Shard 分片组环境 在同一台服务器上初始化一组分片 创建挂载文件 mkdir -p /mnt/data/docker/mongo-cluster/shard-master/{data,conf} mkdir -p /mnt/data/docker/mongo-cluster/shard-slave/{data,conf} mkdir -p /mnt/data/docker/mongo-cluster/shard-arbiter/{data,conf}配置配置文件 echo

日志文件

#systemLog:

destination: file

logAppend: true

path: /var/log/mongodb/mongod.log# 网络设置

net:port: 10902 #端口号

bindIp: 127.0.0.1 #绑定ip

replication:replSetName: shard-{1|2|3} sharding:clusterRole: shardsvr

security:authorization: enabled #是否开启认证keyFile: /data/configdb/mongo.key #keyFile路径 /mnt/data/docker/mongo-cluster/shard-master/conf/mongo.conf

echo

日志文件

#systemLog:

destination: file

logAppend: true

path: /var/log/mongodb/mongod.log# 网络设置

net:port: 10903 #端口号

bindIp: 127.0.0.1 #绑定ip

replication:replSetName: shard-{1|2|3} sharding:clusterRole: shardsvr

security:authorization: enabled #是否开启认证keyFile: /data/configdb/mongo.key #keyFile路径 /mnt/data/docker/mongo-cluster/shard-slave/conf/mongo.conf

echo

日志文件

#systemLog:

destination: file

logAppend: true

path: /var/log/mongodb/mongod.log# 网络设置

net:port: 10904 #端口号

bindIp: 127.0.0.1 #绑定ip

replication:replSetName: shard-{1|2|3} sharding:clusterRole: shardsvr security:authorization: enabled #是否开启认证keyFile: /data/configdb/mongo.key #keyFile路径 /mnt/data/docker/mongo-cluster/shard-arbiter/conf/mongo.conf创建 keyfile echo ${mongoKey} /mnt/data/docker/mongo-cluster/shard-master/conf/mongo.key#处理权限为400chmod 400 /mnt/data/docker/mongo-cluster/shard-master/conf/mongo.key#复制 cp /mnt/data/docker/mongo-cluster/shard-master/conf/mongo.key /mnt/data/docker/mongo-cluster/shard-slave/conf/mongo.keycp /mnt/data/docker/mongo-cluster/shard-master/conf/mongo.key /mnt/data/docker/mongo-cluster/shard-arbiter/conf/mongo.key部署 编写 docker-compose.yaml version: 3 services:mongo-cluster-mongos:image: mongo:6.0container_name: mongo-cluster-mongosprivileged: trueentrypoint: mongosnetwork_mode: hostports:- 10900:10900volumes:- /mnt/data/docker/mongo-cluster/mongos/conf:/data/configdb- /mnt/data/docker/mongo-cluster/mongos/data:/data/dbcommand: -f /data/configdb/mongo.conf –bind_ip_all # bind all ip addressrestart: alwaysmongo-cluster-config:image: mongo:6.0container_name: mongo-cluster-configprivileged: truenetwork_mode: hostports:- 10901:10901volumes:- /mnt/data/docker/mongo-cluster/configsvr/conf:/data/configdb- /mnt/data/docker/mongo-cluster/configsvr/data:/data/dbcommand: mongod -f /data/configdb/mongo.confrestart: alwaysmongo-cluster-shard-master:image: mongo:6.0container_name: mongo-cluster-shard-masterprivileged: truenetwork_mode: hostports:- 10902:10902volumes:- /mnt/data/docker/mongo-cluster/shard-master/conf:/data/configdb- /mnt/data/docker/mongo-cluster/shard-master/data:/data/dbcommand: mongod -f /data/configdb/mongo.confrestart: alwaysmongo-cluster-shard-slave:image: mongo:6.0container_name: mongo-cluster-shard-slaveprivileged: truenetwork_mode: hostports:- 10903:10903volumes:- /mnt/data/docker/mongo-cluster/shard-slave/conf:/data/configdb- /mnt/data/docker/mongo-cluster/shard-slave/data:/data/dbcommand: mongod -f /data/configdb/mongo.confrestart: alwaysmongo-cluster-shard-arbiter:image: mongo:6.0container_name: mongo-cluster-shard-arbiterprivileged: truenetwork_mode: hostports:- 10904:10904volumes:- /mnt/data/docker/mongo-cluster/shard-arbiter/conf:/data/configdb- /mnt/data/docker/mongo-cluster/shard-arbiter/data:/data/dbcommand: mongod -f /data/configdb/mongo.confrestart: alwaysdocker-compose up -d配置 MongoDB Cluster 由于 mongos 是客户端所以我们先搭建好 config 以及 shard 之后再搭建 mongos。 初始化 config-server 进入第一台宿主机 (node-1.internal) 的 config-server 容器 docker exec -it mongo-cluster-config bash mongosh -port 10901输入 rs.initiate({_id: configsvr,members: [{ _id : 1, host : node-1.internal:10901 },{ _id : 2, host : node-2.internal:10901 },{ _id : 3, host : node-3.internal:10901 }]} )如果返回 ok 则成功 然后我们创建用户 use admin db.createUser({user:root,pwd:root,roles:[{role:root,db:admin}]})初始化 shard 分片组并制定第三个副本集为仲裁节点 docker exec -it shard-master bashmongosh -port 10902#进行副本集配置rs.initiate({_id : shard-{1|2|3},members: [{ _id : 0, host : node-1.internal:10902 },{ _id : 1, host : node-1.internal:10903 },{ _id : 2, host : node-1.internal:10904, arbiterOnly:true }]} )返回 ok 后创建用户 use admin db.createUser({user:root,pwd:root,roles:[{role:root,db:admin}]})然后退出第一台分片组搭建完成其他两台分片组重复此操作 配置所有 mongos 进入第一台宿主机 (node-1.internal) 的 mongos 容器 docker exec -it mongos bash mongosh -port 10900先登录使用前面设置的 root 用户密码 use admin; db.auth(root,root);进行配置分片信息 sh.addShard(shard-1/node-1.internal:10902,node-1.internal10903,node-1.internal:10904) sh.addShard(shard-2/node-2.internal:10902,node-2.internal10903,node-2.internal:10904) sh.addShard(shard-3/node-3.internal:10902,node-3.internal10903,node-3.internal:10904)全部返回 ok 则成功 去其他两台 mongos 上重复执行上述操作 功能测试 数据库分片 use test sh.enableSharding(test)对test库的test集合的_id进行哈希分片 db.users.createIndex({ _id: hashed }) sh.shardCollection(test.test, {_id: hashed })创建用户 use admin; db.auth(root,root); use test; db.createUser({user:kang,pwd:kang,roles:[{role:dbOwner,db:test}]})插入数据 use test for (i 1; i 300; ii1){db.test.insert({name: bigkang})}