MongoDB的集群,主要有三种部署方式:
1. Replica Set 副本
2. Sharding 分片
3. Master / Slave 主备


Master / Slave # 已经不推荐了的
这种方式其实不能说是集群方式,只是主备方式,并且,官方已经不推荐这种方式了;


Replica Set # 部署方式相对简单
需要:
主节点(M)
备节点(S)
仲裁节点(A:Arbiter)

如上所示:
1. 主节点提供所有增删查改服务,备节点不提供任何服务
2. 可以通过设置Read-Perference-Modes(http://docs.mongodb.org/manual/applications/replication/#read-preference-modes)使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上
3. 主备节点存储数据,仲裁节点不存储数据
4. 客户端同时连接主节点与备节点,不连接仲裁节点
5. 仲裁节点是一个特殊的节点,它本身不存储数据,他的主要作用是:在主节点挂了之后,【决定】哪个备节点提升为主节点;因此,客户端不需要连接仲裁节点


Sharding # 三种部署方式中最复杂的
和 Replica Set 一样,它也需要:
仲裁节点;
与 Replica Set 不同,它还需要:
配置节点;Config Servers
路由节点;Router


本文演示【Replica Set】方式的MongoDB集群。


环境介绍:
本文档会涉及三台服务器:
节点一:192.168.126.141 # 主
节点二:192.168.126.142 # 备
节点三:192.168.126.143 # 仲裁

它们都是:
1. RHEL 7.6
2. 网卡IP静态绑定
3. 防火墙:关闭并禁用开机启动
4. SELinux:禁用


操作系统配置(所有节点)

Linux系统全局允许分配最大文件句柄:

当前进程或会话允许打开的文件句柄:

将进程或会话允许打开的文件句柄的配置写到【/etc/sysctl.conf】

文件【/etc/security/limits.conf】

TCP协议栈参数:


安装MongoDB软件(三个节点都需要操作)

在官方网站下载安装介质:
https://www.mongodb.com/try/download/community

如上,在【Available Downloads】中,选择你要的版本、平台、包,然后就可以下载到安装介质了。

安装介质其实都可以在这个路径找到:
https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.6/x86_64/RPMS/


在这里,我选择的是RHEL 7上的安装介质;

将安装介质上传服务器:

通过命令【scp】将安装介质发送到其他两个节点:

安装:


创建MongoDB的相关目录(每个节点的操作不一样)

通过命令【mkdir -p xxxx】执行对相关目录的创建:

日志目录(所有节点):

数据目录:

配置文件:

设置权限:


配置MongoDB(每个节点的操作不一样)

MongoDB的默认配置文件位于【/etc/mongod.conf】

因为三个节点是三个不同的角色,所以三个节点上的配置都不相同;


配置文件:节点一 / Master

配置文件:


配置文件:节点二 / Slave

配置文件:


配置文件:节点三 / Arbiter

配置文件:


启动节点


节点一

可以看到,服务启动成功。

这个过程中的日志:

/var/log/message

mongodb日志:


节点二:

可以看到,节点二的服务也成功启动了。


节点三:

节点三的Mongo服务也启动好了。


安装MongoDB Shell工具(所有节点安装)

在继续下一步前还需要安装shell工具,这样你才有命令【mongo】


配置集群

通过Mongo连接到其中一个MongoDB:

接下来的配置在mongo命令行中执行。

切换到【admin】,然后配置集群的成员以及仲裁节点:

查看一下当前的状态:

可以看到,提示说需要执行【rs.initiate()】

再次查看集群状态:

上面的【rs.initiate(cfg)】的操作只需要在其中一个节点上执行一次即可。

在上面的操作做完了以后,再看看其他的两个节点:

节点二:

节点三:

通过以上三个节点的mongo命令行的提示符,可以清楚的看到它们各自的节点角色。


测试:数据同步

节点一:插入一条数据:

节点二:查找:


模拟:故障

节点一:
杀掉mongod的进程,模拟故障

节点一:杀掉进程后,节点二的日志就检测到了异常:

节点三,也同时生成了一些异常日志:

再来看看节点二的状态:
节点二之前是SECONDARY,现在已经变成了PRIMARY:

可以看到,节点二,确实变成了PRIMARY。


然后,再次把节点一的MongoDB启动:

再分别看看节点一与节点二的情况:

节点一:

节点二:


至此,MongoDB最简单的集群:一主一副本一仲裁,就做完了。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装