1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Web服务器群集——LVS-DR+Keepalived高可用集群

Web服务器群集——LVS-DR+Keepalived高可用集群

时间:2024-05-16 15:26:10

相关推荐

Web服务器群集——LVS-DR+Keepalived高可用集群

LVS-DR+Keepalived高可用集群

什么是高可用集群?高可用集群的衡量标准自动切换/故障转移(FailOver)自动侦测脑裂常见解决方案KeepalivedKeepalived是什么?keepalived工作原理keepalived主要有三个模块Keepalived配置初识Keepalived,实现Web服务器的高可用集群Keepalived感知NginxKeepalived+LVS-DR集群配置

什么是高可用集群?

高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度

高可用集群的衡量标准

要保证集群服务的100%时间永远完全可用,几乎可用说是一件不可能完成的任务。比如,淘宝在这几年双十一刚开始的时候,一下子进来买东西的人很多,访问量大,都出现一些问题,如下单后却支付不了。所以说只能保证服务尽可能的可用,当然有些场景相信还是可能做到100%可用的。通常用平均无故障时间(MTTF:mean time to failure)来度量系统的可靠性,用平均故障维修时间(MTTR:mean time to restoration)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%。

具体HA(高可用)衡量标准:

其他高可用方案heartbeat、pacemaker、piranha (web页面)

自动切换/故障转移(FailOver)

自动切换阶段某一主机如果确认对方故障,则正常主机除继续进行原来的任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序及服务。通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。通过上面判断节点故障后,将高可用集群资源(如VIP、httpd等)从该不具备法定票数的集群节点转移到故障转移域(Failover Domain,可以接收故障资源转移的节点)。

自动侦测

自动侦测阶段由主机上的软件通过冗余侦测线,经由复杂的监听程序,逻辑判断,来相互侦测对方运行的情况。常用的方法是:集群各节点间通过心跳信息判断节点是否出现故障。

脑裂

在高可用(HA)系统中,当联系2个节点的“心跳线"断开时,本来为一整体、动作协的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人"一样,争抢“共享资源"、争起"“应用服务",就会发生严重后果——或者共享资源被瓜分、2边"服务"都起不来了;或者2边“服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)。

常见解决方案

添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑"发生几率;启用磁盘锁,正在服务一方锁住共享磁盘,“裂脑"发生时,让对方完全"抢不走"共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁",另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人4HA中设计了“智能"锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。设置仲裁机制,例如设置参考IP(如网关IP或某一个服务器),当心跳线完全断开时,2个节:都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务"的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。裂脑的监控报警,如邮件及手机短信等或值班,当然,在实施高可用方案时,要根据业务实际需求确定是否能容忍这样的损失。对于一般的网站常规业务.这个损失是可容忍的。

Keepalived

Keepalived是什么?

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障

keepalived工作原理

keepalived是以VRRP,协议为实现基础的,VRRP全称Virtual Router RedundancyProtocol,即虚拟路由冗余协议。将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip) , master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master

keepalived主要有三个模块

分别是core、 check和vrrpcore模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

Keepalived配置

初识Keepalived,实现Web服务器的高可用集群

Server1:192.168.100.10Server2:192.168.100.20VIP:192.168.100.100

一、Server1:Master的配置

Server1:192.168.100.10

#创建etc下的keepalived目录,编辑配置文件[root@server1 ~]# yum -y install keepalived#安装keepalived[root@server1 ~]# vim /etc/keepalived/keepalived.conf#编辑主配置文件#将原有的配置文件清空添加如下!Configuration File for keepalived#keepalived配置文件文档声明global_defs {#全局配置router_id 1 #路由器编号,设备在组中的标识}#vrrp_script chk_nginx {#健康检查# script "/etc/keepalived/ck_ng.sh" #检查脚本# interval 2 #检查频率/秒# weight -5 #优先级减5# fall 3#失败三次# }vrrp_instance VI_1 {#VRRP模块实例 VI_1,实例名,两台路由器相同state MASTER #主或从状态interface ens32#监控心跳网卡,(因为实验环境就一张网卡所以监控ens32)mcast_src_ip 192.168.100.10 #心跳源IPvirtual_router_id 55 #虚拟路由编号,主备一致priority 100 #优先级advert_int 1 #心跳间隔/秒authentication {#认证模块auth_type PASS #认证类型为密码认证auth_pass 123456#认证密码123456}virtual_ipaddress {#VIP192.168.100.100}#track_script { #跟踪脚本# chk_nginx# }}[root@server1 ~]# scp -r /etc/keepalived/keepalived.conf 192.168.100.20:/etc/keepalived/ #复制至back服务器[root@server1 ~]# systemctl enable keepalived #开机自启#安装nginx[root@server1 ~]# yum -y install nginx #安装nginx,默认yum源中1.16.1版本[root@server1 ~]# systemctl enable nginx --now[root@server1 ~]# vim /usr/share/nginx/html/index.html #测试keepalived修改默认主页内容...131 <div id="content">132 133 <h1>Welcome to CentOS Pakho one</h1>...[root@server1 ~]# systemctl start keepalived #启动keepalived

http://192.168.100.10/

二、Server2:Backup的配置

Server2:192.168.100.20

#backup服务器的配置几处修改[root@server2 ~]# yum -y install keepalived[root@server2 ~]# vim /etc/keepalived/keepalived.conf...state BACKUP#改为backup服务器...mcast_src_ip 192.168.100.20#改为backup真实服务器...priority 99#优先级99[root@server2 ~]# systemctl enable keepalived[root@server2 ~]# yum -y install nginx[root@server2 ~]# systemctl enable nginx --now[root@server2 ~]# vim /usr/share/nginx/html/index.html...131 <div id="content">132 133 <h1>Welcome to CentOS Pakho two</h1>...[root@server2 ~]# systemctl start keepalived

http://192.168.100.20/

三、客户端访问

#访问vip: http://192.168.100.100/

#拔掉master服务器网线模拟master服务器宕机

http://192.168.100.100/ #再次访问vip

Keepalived感知Nginx

恢复之前的实验,启动两台主机的keepalived和nginx,确保页面访问正常,关闭master的nginx服务

[root@server1 ~]# systemctl stop nginx

继续访问VIP,页面不会切换到slave原因是keepalived监控的是接口IP状态。无法监控nginx服务状态

一、编辑监控脚本

Server1:192.168.100.10

#添加nginx监控脚本[root@server1 ~]# vim /etc/keepalived/ck_ng.sh#!/bin/bash#检查nginx进程是否存在counter=$(ps -C nginx --no-heading | wc -l)if [ "${counter}" = 0 ] ;then#尝试启动一次nginx,停止五秒后再次检测systemctl restart nginxsleep 5if [ "${counter}" = 0 ];then#如果没有启动成功,杀死keepalived进程触发主备切换systemctl stop keepalivedfifi[root@server1 ~]# chmod +x /etc/keepalived/ck_ng.sh[root@server1 ~]# scp /etc/keepalived/ck_ng.sh 192.168.100.20:/etc/keepalived/

Server2:192.168.100.20

[root@server2 ~]# chmod +x /etc/keepalived/ck_ng.sh

二、启动监控脚本

Server1:192.168.100.10

[root@server1 ~]# vim /etc/keepalived/keepalived.conf#取消注释即可...vrrp_script chk_nginx {script "/etc/keepalived/ck_ng.sh"#脚本位置interval 2 #每两秒钟执行一次weight -5#减去本机优先级fall 3 #尝试三次}...track_script {chk_nginx#chk_nginx对应上方策略名}...[root@server1 ~]# systemctl restart nginx keepalived

Server2:192.168.100.20同理

[root@server2 ~]# vim /etc/keepalived/keepalived.conf...[root@server2 ~]# systemctl restart nginx keepalived

Keepalived+LVS-DR集群配置

Master:192.168.100.10backup:192.168.100.20web1:192.168.100.30web2:192.168.100.40VIP:192.168.100.100

一、在Master上安装Keepalived

ipvsadm安装并不启动,因为在keepalived配置中集成了ipvs代码

[root@master ~]# yum -y install keepalived ipvsadm

二、在Master上修改配置文件

[root@master ~]# vim /etc/keepalived/keepalived.conf#将原有的配置文件清空添加如下#Keepalived配置!Configuration File for keepalived#keepalived配置文件文档声明global_defs {#默认的全局配置route_id Director1 #该设备在组当中的名字,两边不一样}vrrp_instance VI_1 {#VRRP模块实例 VI_1,实例名,两台路由器相同state MASTER #主或从状态,另外一台是BACKUPinterface ens32#心跳网卡virtual_router_id 51 #虚拟路由编号,两边一样即可priority 150 #优先级advert_int 1 #检查间隔/秒authentication {#认证模块auth_type PASS #认证类型为密码认证auth_pass 1111 #认证密码1111}virtual_ipaddress {#VIP和工作接口192.168.100.100/24 dev ens32} } #LVS-DR配置virtual_server 192.168.100.100 80 {#VIPdelay_loop 3 #服务轮询时间间隔,每三秒测试真实服务器是否存活lb_algo rr #负载均衡策略算法 rr:轮询lb_kind DR #LVS集群模式 DRprotocol TCP #协议为TCP协议real_server 192.168.100.30 80 {#真实后端服务器weight 1#权重1TCP_CHECK {#TCP校验connect_timeout 3#健康检查方式,连接超时时间,与delay_loop配合使用}}real_server 192.168.100.40 80 {#真实后端服务器weight 1#权重1TCP_CHECK {#TCP校验 connect_timeout 3#健康检查方式,连接超时时间,与delay_loop配合使用}}}

三、在backup上安装keepalived

ipvsadm安装不启动

[root@backup ~]# yum -y install keepalived ipvsadm

四、拷贝Master上的keepalived.conf到backup上

[root@backup ~]# scp 192.168.100.10:/etc/keepalived/keepalived.conf /etc/keepalived/

五、拷贝后修改配置文件

[root@backup ~]# vim /etc/keepalived/keepalived.conf...route_id Director2...state BACKUP...priority 100 #优先级100,低于Master即可...

六、Master和backup上启动服务

[root@master ~]# systemctl enable keepalived --now[root@master ~]# shutdown -r now #重启[root@backup ~]# systemctl enable keepalived --now[root@backup ~]# shutdown -r now

七、Web服务器配置

web1和web2相同配置

[root@web1 ~]# yum -y install httpd && systemctl enable httpd --now[root@web1 ~]# echo Pakho1 > /var/www/html/index.html[root@web2 ~]# yum -y install httpd && systemctl enable httpd --now[root@web2 ~]# echo Pakho2 > /var/www/html/index.html

八、配置虚拟地址

[root@web1 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0#其余行删除,修改如下DEVICE=lo:0 #子接口IPADDR=192.168.100.100 #VIP地址NETMASK=255.255.255.255#子网掩码ONBOOT=yes #开机自启[root@web2 ~]# scp 192.168.100.30:/etc/sysconfig/network-scripts/ifcfg-lo:0 /etc/sysconfig/network-scripts/

九、配置路由

[root@web1 ~]# vim /etc/rc.local.../sbin/route add -host 192.168.100.100 dev lo:0[root@web2 ~]# vim /etc/rc.local.../sbin/route add -host 192.168.100.100 dev lo:0

十、配置ARP

[root@web1 ~]# vim /etc/sysctl.confnet.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.default.arp_ignore = 1net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2 #忽略arp请求,可以回复[root@web2 ~]# vim /etc/sysctl.confnet.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.default.arp_ignore = 1net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2

[root@web1 ~]# shutdown -r now[root@web2 ~]# shutdown -r now

十一、测试

#将Master网线断开http://192.168.100.100/

#将Master网线连接,断开backuphttp://192.168.100.100/

实现负载均衡高可用集群,实验完成!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。