
MongoDB分片集群包含以下组件:
下图描述了分片集群中组件的交互:
本文搭建的副本集集群是两个分片节点副本集(3+3)+一个配置节点副本集(3)+两个路由节点(2),共11个服务节点,具体如下图所示:
本次搭建一主一副本一仲裁,相关的配置文件、数据、日志都放在sharded_cluster相应的子目录下面,具体步骤如下:
myshardrs01
设置sharding.clusterRole需要mongod实例运行复制。 要将实例部署为副本集成员,请使用
replSetName设置并指定副本集的名称。
使用客户端命令连接主节点,这里最好连接主节点
执行初始化副本集命令:
查看副本集情况:
同样搭建一主一副本一仲裁,相关的配置文件、数据、日志都放在sharded_cluster相应的子目录下面,
具体步骤如下:
myshardrs02
myshardrs01_27318
设置sharding.clusterRole需要mongod实例运行复制。 要将实例部署为副本集成员,请使用
replSetName设置并指定副本集的名称
myshardrs01_27418
myshardrs01_27518
启动第二套副本集:一主一副本一仲裁
依次启动三个mongod服务:
查看服务是否启动:
新建或修改配置文件:
myconfigrs_27019:
新建或修改配置文件:
myconfigrs_27119
新建或修改配置文件:
myconfigrs_27219
依次启动配置的mongod副本集:一主两副本
查看服务是否启动:
顾名思义,副本集是一个集合,即MongoDB实例的集合,集合中的每个成员拥有相同的数据集合;一个副本集包含多个数据节点和一个可选的仲裁节点,在数据节点中,只有一个可以作为主节点(Primary Node),其他节点只能是第二节点(Secondary Nodes)。
主节点接收所有的写 *** 作,一个副本集只能有一个能够确认写入的主节点(Primary Node),如下图:
第二节点复制主节点的 *** 作日志并且将所有的 *** 作应用到自己的数据集合中,复制过程是异步的,如果主节点不可用,一个可以被选举的第二节点将会被选举为主节点,所以在副本集中,即使一个或者多个成员没有正常运行,但整个副本集仍然可以正常工作;主副节点关系如下图:
在某些情况下(比如受硬件条件所限,只有一个主节点和一个副节点,无法添加更多的副节点),你可以选择将mongod实例添加进副本集,并作为仲裁者(仲裁者只负责选举新的主节点,不持有数据),在副本集中,如果主节点与其他节点无法通信的时间超过配置的时间值( electionTimeoutMillis ),那么副本集将视主节点出现故障,此时将会重新选举一个正常副节点来作为新的主节点,从而让整个副本集系统正常工作,如下图:
副本集的搭建的步骤为:同时启动多个mongod实例(可以在一台服务器上,也可以在不同的服务器上),然后在每个实例的配置文件中配置相应的配置项,最后启动实例后,登录并且在做一次配置即可。
注意: 文中都是通过配置文件的方式来启动mongod实例的,你也可以通过启动参数来启动实例,同时本文中的mongod实例是通过 supervisor 来管理的,关于如何通过supervisor管理进程,可以自行查阅相关资料或者参考 这里
对于每一个配置项,如果不明白每个配置项的释义,请参考: mongo配置文件 。另外,如果实例在同一台机器上,则针对每个实例,需要区分 path , pidFilePath , port , dbPath 这几个的配置值,并且每个配置文件中的 replSetName 必须相同。
在supervisorctl中执行update,此时三个实例便启动成功。
分片是将MongoDB中的数据集分割成多个数据片,每片数据存放在不同的MongoDB实例中,可以理解为将一个MongoDB数据集拆分成多个小型数据集,而小数据集分布在相同或者不同的物理机器上,分割只是从物理层面进行分割,逻辑上仍然属于同一个数据集合。
分片包含三部分, 如下图所示:
注意: 不同的分片集群必须使用不同的配置服务器(Config Servers),不能使用同一个配置服务器(Config Servers)
分片实例的搭建与副本集类似,都是配置不同的配置文件,然后启动相应的实例:
这里只给出了关键配置项,其他配置项根据自己的实际情况配置,图中的 replSetName 表示当前实例属于哪个副本集,该副本集中的每个节点的该配置项必须一致, clusterRole 表示当前节点在分片中的的角色,可选值有: shardsvr 和 configsvr , shardsvr 表示该节点是作为Shards节点提供服务,而 configsvr 表示该节点作为Config Server节点提供服务。
至此,分片搭建完成。
Mongodb 部署信息 :
os: centos7.7 x64 配置好NTP,防火墙默认不做任何限制.
mongos部署两个点,config3个点,和3个分片集群(每个分片一主一副一仲裁)
注意:因为判断逻辑的问题,不要在任何节点同时运行两种服务的主点
ansible的hosts文件配置:
环境变量全部都在这里设置,需要都写入到ansible的hosts文件里
变量中
server_1_ip 都设置为主点
server_2_ip 都设置为副点
server_3_ip 都设置为仲裁节点(config server没有仲裁节点,但是也要写,不然mongos的配置文件模板会报错)
这些IP的配置后面在初始化时会用到.
ansible文件夹结构 :
首先是模板文件:
mongod.conf.mongos.j2mongos的配置文件模板
mongod.conf.normal.j2shard server和config server的配置文件模板
mongod.service.j2service文件模板
mongo.key 直接手动生成 ,用户MongoDB集群之间的加密连接,记得权限改为600
passwd.j2用于配置MongoDB的root用户名密码
执行:
按提示输入服务器密码
包含了系统优化相关设置,注意中间会重启一次让一些系统优化项生效
注意:因为判断逻辑的问题,不要在任何节点同时运行两种服务的主点
执行 :
如果执行有问题建议多检查变量配置
全部完成后可以验证一下集群环境:
登陆分片集群 :
分片的状态显示正常
登陆mongos
可以看到mongos的状态也正常,分片也全部都添加进去. 全部安装至此完成.
一键删除MongoDB安装及相关数据,方便重装...
一键启动整个MongoDB集群
一键停止所有MongoDB集群
以上就是ansible在MongoDB的一键部署脚本,而且附带了对服务器的优化相关配置
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)