LinuxService- Keepalive实现高可用集群

1 集群介绍

1.1 集群概念

集群(Cluster):是指由一批具备相同或类似功能的物品组成的,提供更大、更强、更稳定功能的这样一种组合。集群通常可以定义为两台或两台以上相互独立的计算机,对外表现为一个整体系统。

节点(Node):简单叙述即集群就是一组计算机在一起合作为用户提供一组网络资源,而集群组中的单一的计算机就被称为“节点(node)”。硬件的型号及系列一般要一致。集群中的两个节点之间一般有2条心跳线连接,用于相互监控彼此的健康状态。

集群必备服务:NTP(时间必须得同步),日志集中管理服务(RSYSLOG),DNS服务,共享存储(ISCSI)

1.2** **集群分类

1)高可用集群(high available cluster,简写为HA):就是一个机子宕机了,立马能有其他机子顶上。

计算机系统的可用性(availability) 是通过系统的可靠性(reliability) 和可维护性(maintainability) 来度量的。工程中通常用平均无故障时间(MTTF) 来度量系统的可靠性,而平均维修时间(MTTR) 来度量系统的可维护性。可用性=维修时间/总时间*100% 。

HA 集群的主要目的是为了用户提供不间断的服务。当使用了HA 集群时如果由其中一个node出现了问题,自动会有集群中其他节点接替问题节点对外提供服务。在Linux 系统中实现HA 集群可使用Heartbeat 、keepalived(会讲)、Haproxy

2)高性能集群(high performance cluster,简写为HPC):把计算的东西分配到各个CPU进行运算,再把计算结果整合得出最终的结果

实现高性能集群主要目的是将多台计算机的计算能力合并到一起从而实现一个超越单台计算机计算能力的强力系统。在Linux 平台中实现高性能集群的软件是Beowulf 及MPI(会讲)

3)负载均衡集群(Load Balancing Cluster):减少单个机子的负载

我们讲的是基于软件(如LVS)的负载均衡集群,当其不够用时就得使用基于硬件的负载均衡器(如F5)

负载均衡(LB):LB 与HA 或高性能有些类似也有一定的区别。负载均衡不仅仅考虑的内容与高可用一样,同时也需要为用户提供不间断的服务。但LB还要保证服务的质量。

LB 在收取到一个客户的响应时会通过某种方法查看集群中的node 能否为用户提供符合质量要求的服务。如果不可以则LB 将把这个请求转发给另一个可以满足质量要求的node 。这样可以降低某个服务node 出现大量资源被占用的情况

在Linux 中要实现LB 集群可采用LVS 、MOSIX等软件

2 高可用集群(HA)

2.1 概念

1)双机技术:指由两台服务器运行某种同样的应用,为用户提供服务,当某一台出现问题时,用户的请求将由另一台服务器继续提供,从而实现高可用性。双机技术又被称为双机热备或双机容错。

   双机技术的实现不需要特定的硬件环境或者是操作系统Kernel 的特定支持。因此仅需要双机/集群软件就可以实现。

双机软件通过专用的信号传输通道,可以让两台服务器相互检测对方的状态,通过检测可得知对方如何。如对方出现问题可在第一时间作出反应

2)HA容错运作过程

一方面——Auto-Detect(自动检测):通过两台主机所连接的线缆,经过负载的监听程序进行相互检测。其检测的内容有许多: 主机硬件、主机网络、主机操作系统、数据库引擎及其他应用程序、主机与磁盘整列连接线缆等

另外一方面——Auto-Switch(自动切换):如果某台主机确认对方出现故障,则将自动接手对方的工作来确保用户的请求可以得到及时处理。

再者——Auto-Recover(自动恢复):当故障主机修复完毕后可回归到生产系统中,通过一定配置可自动切换回以前状态继续工作

2.2** ****** HA的三种工作方式****

1)主从方式:主机工作,备份机处于待命状态。当主机出现故障,备份机通过信号检测得知后将接管主机的一切工作,待主机恢复正常后可以通过手工或自动配置切换到主机上运行。数据的一致性可通过其他技术解决。

2)双机双工方式:两台主机同时运行各自的服务工作且相互监督。当任何一台出现故障时,另一台会立即接管它的一切,保证工作的时效性。

3)集群工作方式:多台主机一起工作,各自运行一个或多个服务,同时为每一个服务定义一个或多个备份主机。当主机出现故障时,备份主机将接管一切工作。

注:Linux High Available Cluster就是提供基于Linux的高可用集群,其特点为可靠、可用、客服务。

2.3**  基于主从工作方式的HA ——keepalived **

1)keepalived 也是模块化设计,不同模块负责不同的功能:

core :是keepalived 的核心,负责主进程的启动和维护,全局配置文件的加载解析等

check :负责healthchecker( 健康检查) ,包括了各种健康检查方式,以及对应的配置的解析包括LVS 的配置解析

vrrp: VRRPD 子进程, VRRPD 子进程就是来实现VRRP 协议的

libipfwc:iptables(ipchains) 库,配置LVS 会用到

libipvs*:配置LVS 会用到,但 keepalived 和LVS 完全是两码事,只是它们相互配合。

2)keepalived 启动后会有三个进程:父进程——内存管理,子进程管理等等;子进程—— VRRP 子进程;子进程——healthchecker 子进程

两个子进程都被系统WatchDog 看管,两个子进程各自负责自己的事, healthchecker 子进程负责检查各自服务器的健康程度,例如HTTP ,LVS 等等,如果healthchecker 子进程检查到MASTER 上服务不可用了,就会通知本机上的兄弟VRRP 子进程,让他删除通告,并且去掉虚拟IP ,转换为BACKUP 状态

3)keepalived工作原理简述:master机出现故障时,VRRP子进程会将master机的虚拟IP抹掉使其变为slave状态,备用机的VRRP子进程得知后就会立即将自己的机子的虚拟IP变成临时的master模式。

3 使用keepalived实现HA集群

1)实验环境:3台虚拟机,2台HTTP服务器,一台客户端,都设为NAT模式,设置IP为同一网络段即可相互通讯。

2)在2 台HTTP服务器上配置keepalived服务(安装之前确保系统已经安装了Python程序,我的虚拟机默认就是安装好的)

第一步 安装软件#yum  install  httpd  -y ,#cd  /var/www/html ,编辑网页:

#echo  “this   is   web1   server ”  >  index.html

#echo  “this   is   web2   server ”  >  index.html

#chmod   705   index.html                             

第二步 重启服务  #systemctl   restart   httpd           //最好设置为开机自启

第三步 在客户端先验证一下能否正确访问(安装elinks软件)

 

3)在node1与node2上配置keepalived

第一步 在node1上配置keepalived,首先   #yum  install   keepalived   -y

#cd /etc/keepalived

#cp    keepalived.conf    keepalived.conf.bak                 //备份配置文件

#vim   keepalived.conf                                       //编辑配置文件

global_defs {                                //定义全局变量

notification_email {

root@localhost                          //指定接收通知的邮箱

}

notification_email_from    root@localhost   //设置发动邮件的原地址及用户

smtp_server    127.0.0.1                  //表示发送email时的smtp服务器地址,可用本地的sendmail来实现

smtp_connect_timeout   30              //指定smtp链接超时时间

router_id    node1                      //表示转发的设备名称

}                                     //结束全局配置

 

vrrp_instance   VI_1 {                      //定义vrrp实例名称为VI_1

state    MASTER                       //定义本机为MASTER(主)

interface    eno16777736

virtual_router_id   51                  //设定vrid,相同的vrid为同一个组,同组的vrid将决定多播的mac地址

priority    100                       //设定优先级,数字越高越优先

advert_int   1                       //设定心跳广播间隔(秒)

authentication {                           //设定设备之间的认证

auth_type   PASS                    //认证方式为密码认证

auth_pass   1111                    //认证密码为1111

}

virtual_ipaddress {                        //设定VIP(虚拟IP地址)

192.168.1.2                        //写成与网卡IP一个网段的IP

}

}

最后,重启服务 #systemctl  restart  keepalived,并查看vip已经作用在node1上: #tail   -f   /var/log/messages

 

第二步 在node2 上配置keepalived,把node1上的配置文件scp过来,然后修改

#vim   keepalived.conf                    //编辑配置文件

global_defs {                                //定义全局变量

notification_email {

root@localhost                          //指定接收通知的邮箱

}

notification_email_from    root@localhost   //设置发动邮件的原地址及用户

smtp_server    127.0.0.1                  //表示发送email时的smtp服务器地址,可用本地的sendmail来实现

smtp_connect_timeout   30              //指定smtp链接超时时间

router_id    node2                      //表示转发的设备名称

}                                     //结束全局配置

 

vrrp_instance   VI_1 {                      //定义vrrp实例名称为VI_1

state    BACKUP                       //定义本机为MASTER(主)

interface    eno16777736

virtual_router_id   51                  //设定vrid,相同的vrid为同一个组,同组的vrid将决定多播的mac地址

priority    50                       //设定优先级,数字越高越优先

advert_int   1                       //设定心跳广播间隔(秒)

authentication {                           //设定设备之间的认证

auth_type   PASS                    //认证方式为密码认证

auth_pass   1111                    //认证密码为1111

}

virtual_ipaddress {                        //设定VIP(虚拟IP地址)

192.168.1.2                 //写与node1 一样的IP,这个就是集群的VIP

}

}

最后,重启服务 #systemctl  restart  keepalived

 

4)在客户端测试  #yum   install   elinks   -y

      客户端使用浏览器访问VIP,#elinks  http://vip  ,可看到node1上的内容 “this  is  web1  server”

      停止node1上的keepalived: #systemctl  stop  keepalived;客户端使用浏览器访问VIP,可看到node2上的内容 “this  is  web2  server”


转载请注明出处,谢谢!

代码交流 2021