【项目实战4】高可用——利用pacemaker与心跳corosync实现双机热备

一、 概念性知识

双机热备也是高可用的一种,通过心跳检测和集群管理可以实现双机热备。通过两台机器相互备份,保证读取或者存储数据时候的万无一失。哪怕其中正在工作的一台主机挂掉了,另外一台也可以马上接管工作。

1)高可用集群

  高可用集群(High Availability Cluster)简称HA Cluster
         - 简单的说,集群(cluster)就是一组计算机。它们作为一个整体,向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。高可用性集群(HA cluster)是指如单系统一样地运行并支持(计算机)持续正常运行的一个主机群。
         - 高可用集群的出现是为了减少由计算机硬件和软件易错性所带来的损失。如果某个节点失效,它的备援节点将在几秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机。高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。
         - 只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能,更能满足用户不断出现的需求变化。

    PS:

        “高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性
        负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行

2)双击热备

定义:     

         双机热备是应用于服务器的一种解决方案,其构造思想是主机和从机通过TCP/IP网络连接。正常情况下主机处于工作状态,从机处于监视状态。一旦从机发现主机异常,从机将会在很短的时间之内代替主机,完全实现主机的功能。

原理:

         双机热备主要是实时数据、报警信息和变量历史记录的热备。主从机都正常工作时,主机从设备采集数据,并产生报警和事件信息。从机通过网络从主机获取实时数据和报警信息,而不会从设备读取或自己产生报警信息,主从机都各自记录变量历史数据。同时,从机通过网络监听主机,从机与主机之间的监听采取请求与应答的方式,从机以一定的时间间隔(冗余机心跳检测时间)向主机发出请求,主机应答表示工作正常,主机如果没有作出应答,从机将切断与主机的网络数据传输,转入活动状态,改由下位设备获取数据,并产生报警和事件信息。此后,从机还会定时监听主机状态,一旦主机恢复,就切换到热备状态,通过这种方式实现了热备。

3)Heartbeat

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。 

 原理  :

        heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

4)corosync 与 pacemaker
Corosync作为通信层和提供关系管理服务,实现HA心跳信息传输的功能就是Corosync
Pacemaker是一个集群资源管理器。它利用集群基础构件(OpenAIS 、heartbeat或corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务(亦称资源)的最大可用性。

二、实验准备

1、准备4个服务器
server1 172.25.42.1
server2 172.25.42.2
server3 172.25.42.3
server4 172.25.42.4

2、为方便实验,将几个服务器之间免除密码登陆

ssh-keygen                                            获取公钥
ssh-copy-id -i /root/.ssh/id_rsa.pub username         利用公钥对其他用户加密

在这里插入图片描述
3、每台服务器都设定yum源

vi /etc/yum.repos.d/dvd.repo 
/
[dvd]
name=dvd
baseurl=http://172.25.42.250/rhel7.6
gpgcheck=0
 
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.42.250/rhel7.6/addons/HighAvailability
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.42.250/rhel7.6/addons/ResilientStorage
gpgcheck=0

/

在这里插入图片描述

三、下载服务软件,设定密码

这部分打算以sever1和server2作为双机热备

1、分别在server1,server2建立httpd文件
server1

 yum install httpd
 echo server1 > /var/www/html/index.html
 systemctl start --now httpd

server2

 yum install httpd
 echo server2 > /var/www/html/index.html
 systemctl start --now httpd

2、server1,server2下载pacemaker pcs psmisc policycoreutils-python服务
pcs服务下载好了后,可以使用pcs命令。
server1

[root@server1 ~] yum install -y pacemaker pcs psmisc policycoreutils-python
[root@server1 ~] systemctl enable --now pcsd.service         启动pcsd服务

server2

[root@server1 ~] yum install -y pacemaker pcs psmisc policycoreutils-python
[root@server1 ~] systemctl enable --now pcsd.service         启动pcsd服务

3、设置用户密码
hacluster是集群的意思,下载了这个服务后会自动创建这个用户
server1

[root@server1 ~] echo westos | passwd --stdin hacluster   为hacluster用户设置一个密码,在两个节点上使用相同的密码

在这里插入图片描述
serve2

[root@server1 ~] echo westos | passwd --stdin hacluster   为hacluster用户设置一个密码,在两个节点上使用相同的密码

在这里插入图片描述

四、启动高可用集群

(1)、启动高可用集群

1、创建高可用集群
利用pcs命令将server1和server2认证为集群的存储服务器,并设定集群管理的账户的为hacluster,密码为其用户密码westos。

[root@server1 ~] pcs cluster auth server1 server2                        使用pcs集群auth认证为hacluster用户
[root@server1 ~] pcs cluster setup --name mycluster server1 server2      将server1 server2加入集群,取名为mycluster

在这里插入图片描述
在这里插入图片描述
3、查看pcs状态

可以看到
1)集群的名称为mycluster。
2)有警告,这个是没有Fencing设备时,没有禁用stonith功能,将其禁用就可以了。这是保护节点不会因为断电或者其他其他问题而数据出错的程序。
3)但是目前sever1和sever2不在线,且心跳服务和集群资源管理器也显示为关闭。
在这里插入图片描述

4、启动HA心跳信息corosync,集群资源管理器pacemaker,关闭stonith服务

基础命令

pcs cluster start --all                   
systemctl start corosync.service
systemctl start pacemaker.service
pcs cluster enable server1                           启动sever1的集群服务
pcs cluster enable server2                           启动sever1的集群服务
pcs property set stonith-enabled=false               关闭stonith服务

这里使用以下两个,命令就行了

pcs cluster start --all
pcs property set stonith-enabled=false               关闭stonith服务

pcs集群服务已经开启,server1和server2显示在线,心跳服务和集群资源管理器也显示为开启。警告消失
在这里插入图片描述

5、检测心跳服务安装情况

[root@server1 ~] corosync-cfgtool -s          用corosync-cfgtool检查集群通信是否顺畅

在这里插入图片描述

6、 设定集群服务的访问

[root@server1 ~] pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.42.100 op monitor interval=30s  ##设定集群服务的虚拟访问ip,设定监控时间为30s
[root@server1 ~] pcs status

在这里插入图片描述

(2)、查看当前情况

1、查看虚拟网段

ip addr 

server1自动创建了172.25.42.100虚拟ip
在这里插入图片描述
server2没有虚拟ip
在这里插入图片描述
2、目前网页工作正常
在这里插入图片描述
在这里插入图片描述

五、故障模拟

(1)、模拟单机故障

HA : 高可用集群应用场景–>解决单点故障(执行故障转移)
如果一台服务器集群套件关掉,vip转移到另外一台服务器上,另一台服务器启动
在这里插入图片描述
1、关闭server1
模拟服务故障发生,将集群服务的server1关闭

pcs cluster stop server1 

此时server1中的集群Cluster已经停止运行
在这里插入图片描述
2、查看目前集群状态
此时的server2作为备用机启用
在这里插入图片描述
自动启用172.25.42.100虚拟服务

server2的服务启用
在这里插入图片描述
特别说明
即使重新启动server1,Cluster也不会切回server1在这里插入图片描述

(2)、模拟网络故障

1、目前的虚拟vip在server2中,将sever2中的vip进行删除

[root@server2 ~] ip addr del 172.25.42.100/24 dev eth0 
[root@server2 ~] ip addr

发现已经删除虚拟vip
在这里插入图片描述
2、等待30秒后再次查看
发现pcs会报告vip掉了,但是它会自动修复
在这里插入图片描述

六、集群服务添加新资源

(1)、添加apache作为集群服务的内容

[root@server1 ~] pcs resource create apache systemd:httpd op monitor interval=60s
[root@server1 ~] pcs status

此时已经将apache加入到集群服务
在这里插入图片描述

(2)、将apache服务加入到集群服务

[root@server2 ~] pcs resource group add webgroup vip apache

在这里插入图片描述

(3)、停机测试

将server2停止服务(模拟server2挂掉)

pcs cluster stop server2

在这里插入图片描述
结果发现服务整体迁移,在server1中发现vip和apache服务
在这里插入图片描述

七、fence防止文件系统脑裂

可以添加fence服务,这样就不会出现两个服务器同时向资源写数据,破坏了资源的安全性和一致性从而导致脑裂的发生。
具体可以参考博客:4.2节

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值