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

网站开发子孙账号网站优化企业排名

网站开发子孙账号,网站优化企业排名,网站建设响应式是什么,网站建设所需要的内容使用 Docker 部署 MongoDB 集群 Mongodb 集群搭建 mongodb 集群搭建的方式有三种: 主从备份(Master - Slave)模式,或者叫主从复制模式。副本集(Replica Set)模式。分片(Sharding)…

使用 Docker 部署 MongoDB 集群

Mongodb 集群搭建

mongodb 集群搭建的方式有三种:

  1. 主从备份(Master - Slave)模式,或者叫主从复制模式。
  2. 副本集(Replica Set)模式。
  3. 分片(Sharding)模式。

其中,第一种方式基本没什么意义,官方也不推荐这种方式搭建。另外两种分别就是副本集和分片的方式。今天介绍副本集的方式搭建 mongodb 高可用集群

简介以及概述

首先我们先来了解一下 Mongo 集群的概念,Mongo 集群有 3 个主要组件

ConfigServer:在集群中扮演存储整个集群的配置信息,负责配置存储,如果需要高可用的 ConfigServer 那么需要 3 个节点。

Shard:分片,存储真实的数据,每一个 Shard 分片都负责存储集群中的数据,例如一个集群有 3 个分片,然后我们定义分片规则为哈希,那么整个集群的数据就会(分割)到 3 个分片中的某一个分片,那么分片是特别重要的,如果集群中的一个分片全部崩溃了那么集群将不可用,所以我们要保证集群的高可用,那么我们需要一个分片配置 3 个节点,2 个副本集一个仲裁节点,仲裁节点类似于 Redis 的哨兵模式,如果发现主节点挂了那么让另一个副本集进行数据存储。

Mongos:Mongos 我们可以理解为整个集群的入口,类似于 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 个 mongos,1 个 configserver,1 个分片组

  • node-2.internal[Node 3]: 2 核 4g 部署 1 个 mongos,1 个 configserver,1 个分片组

  • node-3.internal[Node 2]: 2 核 4g 部署 1 个 mongos,1 个 configserver,1 个分片组

  • 端口分配:

    ip hostroleport
    node-1.internalmongos10900
    node-1.internalconfigsvr10901
    node-1.internalshard-master10902
    node-1.internalshard-slave10903
    node-1.internalshard-arbiter10904
    node-2.internalmongos10900
    node-2.internalconfigsvr10901
    node-2.internalshard-master10902
    node-2.internalshard-slave10903
    node-2.internalshard-arbiter10904
    node-3.internalmongos10900
    node-3.internalconfigsvr10901
    node-3.internalshard-master10902
    node-3.internalshard-slave10903
    node-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...WZe4VcF+iU6jgw73juZ
pbcZR5oT...E8LFPBZ+XLGYrtmDqo0
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: "mongos"network_mode: hostports:- "10900:10900"volumes:- /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:10901"volumes:- /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:10902"volumes:- /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:10903"volumes:- /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:10904"volumes:- /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: always
docker-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; i=i+1){db.test.insert({'name': "bigkang"})}
http://www.hkea.cn/news/990339/

相关文章:

  • 计算机学了出来干嘛免费优化推广网站的软件
  • 宁波网站建设优化湖南seo优化按天付费
  • 门户网站手机版google官网入口
  • 深圳市工程建设交易服务中心网站软文什么意思
  • 大型网架加工厂成都网站建设方案优化
  • 导航网站的广告怎么做的千锋教育官方网
  • etc网站开发票网站制作软件免费下载
  • 上海seo网站设计2022十大网络营销案例
  • 还有做网站的必要吗网站运营推广方案
  • 企业营销型网站建设厂家品牌搜索引擎服务优化
  • 学校网站建设计划怎么成为百度推广代理商
  • 普陀网站开发培训学校seo快速优化
  • 建一个商城网站多少钱免费的网站推广软件
  • 手机网站解决方案看网站搜什么关键词
  • 顺企网江西网站建设宜昌今日头条新闻
  • 坪山网站建设行业现状网页设计与制作代码成品
  • 网站建设需求文档模板下载学大教育一对一收费价格表
  • 小型网站怎样优化百度首页官网
  • 网站开发与iso9001关系百度上做推广怎么做
  • wordpress怎么设置导航镇江seo
  • 番禺建设网站服务软文写作网站
  • 有哪些专做自然风景图片的网站石首seo排名
  • 移动网站虚拟主机seo 排名 优化
  • 专业网站建设课程网站推广优化方式
  • 适合站长做的网站信息流广告投放工作内容
  • 做健身网站步骤网站建设网络公司
  • 武汉整站seo数据上云网站关键词优化怎么做的
  • 网站尾部网络seo推广
  • 建设一个公司网站需要什么知识网站网络推广优化
  • 政府高度重视网站建设怎么做网络推广