High Availability (HA)高可用简单来说就是系统长时间运行不发生故障的品质,HA的实现方案有硬件和软件方式,最为常用的解决方案就是组建HA集群。
在计算机领域,集群会由两台或多台计算机组成(通常被称为集群节点或者集群成员),它们一起工作执行任务。在这种配置下,如果集群中某个节点出现故障,则由其它节点接管故障节点的工作而继续提供服务,对于整个系统来说仍然是可用的,不会造成业务中断。
常用的集群大致可以分为如下四种类型:
- 共享存储:集群中的服务器共享统一的存储空间,并且集群中的所有服务器都可以对共享文件进行读写
- 高可用:当集群中某个节点出现故障时,可以由集群中的其它节点在不中断业务的前提下由其它节点来接管
- 负载均衡:将网络请求分派到集群中的多个节点来处理,以平衡集群节点的请求负载,提升处理效率
- 高性能:执行并行或并发操作,以提高应用程序的性能
另外一种被广泛使用的HA方案是复制(特别是数据复制),通过复制,可以将一个或多个数据库的数据甚至虚拟主机同步到备份服务器。在主用服务器出现故障时,由于数据是同步的,可以由备用系统继续提供服务。
搭建高可用集群,至少需要两台服务器。为了演示本教程,我们使用两台Linux服务器:
• Node1: 192.168.10.10 • Node2: 192.168.10.11
在本教程中,我们将演示如何在Ubuntu 16.04/18.04和ContOS 7中部署、配置和维护高可用集群的基本知识。同时将演示如何向集群添加Nginx HTTP服务。
1] 配置节点DNS信息
为了让集群中的两个节点可以正常工作,需要为每个节点配置本地DNS信息。Linux系统中可以通过向”/etc/hosts”文件添加内容的方式来添加本地DNS记录。修改每个节点的”/etc/hosts”文件,增加如下记录:
192.168.10.10 node1.rultr.com 192.168.10.11 node2.rultr.com
2] 安装Nginx Web服务器
Linux系统安装Ningx服务器,可以使用如下命令:
# apt install nginx [On Ubuntu] OR # yum install epel-release && sudo yum install nginx [On CentOS 7]
一旦安装完成,就可以使用如下将其设置为开机启动,启动服务并查看服务运行状态:
# systemctl enable nginx # systemctl start nginx # systemctl status nginx
服务启动成功后,为了方便演示HA,使用如下命令修改Nginx的默认主页:
# echo "This is the default page for node1.rultr.com" | tee /usr/share/nginx/html/index.html #Node1 # echo "This is the default page for node2.rultr.com" | tee /usr/share/nginx/html/index.html #Node2
注意上面的命令不需要在两台主机上全部执行,每个节点只要执行本节点对应的命令即可。
3] 安装配置Corosync和Pacemaker
现在,将分别为每个节点安装 Pacemaker、Corosync和Pcs软件包,安装命令如下:
# apt install corosync pacemaker pcs [On Ubuntu] OR # yum install corosync pacemaker pcs [On CentOS]
安装成功后,使用如下命令将两个节点的”pcs”守护进程启动:
# systemctl enable pcsd # systemctl start pcsd # systemctl status pcsd
4] 创建集群
安装集群工具包的时候,系统会默认添加一个”hacluster”用户来管理集群。现在,需要为这个用户设置密码来保证”pcs”的认证。注意,想要集群一切工作正常,那么集群中的所有节点都要设置相同的密码。
# passwd hacluster
图.1 设置hacluster用户密码
之后,在集群中的任意一台主机上执行如下命令(本教程为Node1),来为pcs设置认证信息:
# pcs cluster auth node1.rultr.com node2.rultr.com -u hacluster -p password_here --force
注意执行此命令时要把”password_here”替换成实际设置的密码,开启了防火墙的系统注意打开2224端口或者停用防火墙,以免出现认证失败的情况。如无意外,命令执行后会出现如下内容:
图.2 pcs集群认证成功
认证成功后就可以创建集群并应用到节点了,注意集群名称不超过15个字符,本教程使用”examplecluster”。在node2服务器执行如下命令:
pcs cluster setup --name RULTRcluster node1.rultr.com node2.rultr.com
图.3 在node2节点创建pcs集群
然后用如下命令将集群设置为开机启动并启动集群服务:
# pcs cluster enable --all # pcs cluster start --all
图.4 启动pcs集群
最后,用如下命令查看集群状态:
# pcs status OR # crm_mon -1
图.5 查看pcs集群状态
根据图.5命令的输出内容,可以发现命令提示集群里虽然没有”stonith”设备,但是其允许选项是打开的,这会带来集群不稳定的情况;同时,集群中并没有任何高可用的服务。
5] 配置集群选项
根据之前的描述,首先要禁用STONITH(Shoot The Other Node In The Head的简称),是一种为了保障数据存取安全而将故障节点从集群中隔离的技术。如果没有相关的设备,建议不在pcs集群中启动该选项。
在集群中禁用STONITH,则使用中下命令:
# pcs property set stonith-enabled=false
同时,还需要使用如下命令忽略Quorum策略:
# pcs property set no-quorum-policy=ignore
设置完成后,可以使用如下命令查看一下集群选项,确认STONITH和Quorum选项已经变为禁用:
# pcs property list
图.6 查看pcs集群选项
6] 添加资源/集群服务
现在,将要讲解如何添加集群资源。我们将要为集群配置一个浮动IP,这个IP可以在同一网络内部或数据中心的服务器间从一台服务器立即切换到另一台服务器。简单来说,浮动IP是一种通信术语,它允许将IP绑定到多个网络接口上。
有了浮动IP,就可以轻松实现高可用集群的故障迁移。当然,浮动IP技术也不单单用于故障迁移,它还有其它的实用场景。高可用集群对于浮动IP的配置模式是在任意时刻,只有集群的主节点占用和响应浮动IP,即访问该IP的业务会由集群主用节点提供,而集群的主用节点在不同时刻可能会不同。
下面将添加两个集群资源:一个名为”float_ip”的浮动IP和一个名为”http_server”的Nginx Web服务器。
首先使用如下命令添加浮动IP,假设该浮动IP为192.168.10.20:
# pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s
其中:
- floating_ip:指资源名称
- ocf:heartbeat:IPaddr2:设置 Pacemaker使用的脚本,本例中使用IPadd2以及ocf应用的标准
- op monitor interval=60s:指引Pacemaker调用服务监视程序确认业务是否正常的时间间隔,本例为60秒
之后添加另一个资源,名叫”http_server”,资源监视代理为”ocf:heartbeat:nginx”:
# pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor interval=60s timeout=20s
资源添加完成后,再次查看集群状态或者使用如下命令查看集群资源信息:
# pcs status resources
图.7 查看pcs集群资源
从图.7中可以看出,集群的浮动IP已经映射到node1节点,并且Nginx服务由node1节点提供。如果出现资源启动不成功的情况,多数原因在于Linux系统防火墙阻止相关通信。可以使用如下命令开启防火墙的协议支持:
-------------- CentOS 7 -------------- # firewall-cmd --permanent --add-service=http # firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload -------------- Ubuntu -------------- # ufw allow http # ufw allow high-availability # ufw reload
7] 测试高可用集群
首先访问浮动IP的业务,看Nginx服务由哪个节点提供。由于两个服务器的页面有差异,可以很容易的区分集群中的活动节点是哪台。可以通过浏览器访问”http://192.168.10.20″查看输出,由于本教程使用虚拟机没有安装浏览器,则使用”curl”命令模拟,效果上类似。
图.8 验证pcs集群
现在,我们模拟一个故障,比如将节点node1关机,再次查看集群状态以及Nginx服务内容,可以看到,浮动IP以及Web页面内容都发生了变化。
图.9 验证pcs集群故障迁移
为了让集群服务更加高效的运行,可能需要设置一些约束条件,可以在pcs的帮助手册(man pcs)中查看全部命令列表。关于Corosync和Pacemaker的详细信息,可以访问https://clusterlabs.org/了解更多。
以上就是在Linux系统安装、配置和维护pcs高可用集群的详细教程,希望有所帮助。