高可用集群 keepalived+LVS

高可用HA

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

自动侦测

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

脑裂

简介

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

***脑裂产生的原因****

因心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
因心跳线间连接的设备故障(网卡及交换机)。
因仲裁的机器出问题(采用仲裁的方案)。
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。

****脑裂的解决方案****

1)添加冗余的心跳线

2)启用磁盘锁

正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。

3)设置仲裁机制

例如设置参考IP(如网关IP或某一个服务器),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

4)裂脑的监控报警

其他高可用方案

heartbeat、pacemaker、 piranha(web页面)

keepalived

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

keepalived工作原理

 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

将N台具有相同功能的服务器组成一个服务器组,这个组里包含一个master和多个backup,master上有一个对外提供服务的VIP,master会向其他服务器发出组播,当backup收不到VRRP包时,会认为master已经宕机,这是就会根据VRRP的优先级选出一个BACKUP当做master向外提供服务

IPV4总共三种通信方式:单播,组播,广播。
组播是指以224.0.0.0地址作为通信地址的一种方式。

keepalived主要有三个模块

core模块

        为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。

check模块

        负责健康检查,包括常见的各种检查方式。

vrrp模块

        是来实现VRRP协议的。

实战案例1 keepalived

环境:两台keepalived,一台window客户机用来访问

al1    192.168.31.181        (master)
al2    192.168.31.180        (backup)
VIP    192.168.31.110

server1

yum -y install keepalived

vim /etc/keepalived/keepalived.conf

!Configuration File for keepalived
global_defs {
router_id 1    #设备在组中的标识,设置不一样即可
}

#vrrp_script chk_nginx {                #健康检查
# script "/etc/keepalived/ck_ng.sh"       #检查脚本
# interval 2                #检查频率.秒
# weight -5                   #priority减5
#fall 3                        #失败三次
# }

vrrp_instance VI_1 {        #VI_1。实例名两台路由器相同。
    state MASTER            #主或者从状态
    interface ens33            #监控网卡
    mcast_src_ip 192.168.31.181    #心跳源IP
    virtual_router_id 55         #虚拟路由编号,主备要一致。
    priority 100                        #优先级
    advert_int 1                        #心跳间隔

    authentication {                    #秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {                 #VIP
    192.168.31.110/24
        }

#  track_script {                       #引用脚本
#       chk_nginx
#    }

}

# scp -r /etc/keepalived/keepalived.conf  192.168.31.180:/etc/keepalived/

systemctl enable keepalived.service
    开机启动keepalived

安装NGINX

yum -y install nginx

systemctl  enable  nginx  &&  systemctl start nginx

echo nginx1 >/usr/share/nginx/htm/index.html

systemctl start keepalived.service

server2 (backup)

# yum  -y install keepalived

# vim /etc/keepalived/keepalived.conf

state MASTER改为  state BACKUP
mcast_src_ip 改为backup服务器实际的IP mcast_src_ip 192.168.31.180
priority 100改为priority 99

# systemctl enable keepalived.service

安装apache

yum -y install httpd

systemctl  enable  httpd  &&  systemctl start httpd

echo apache1 >/var/www/html/index.html

systemctl start keepalived.service

client

访问VIP   http://192.168.31.110        出现的是  nginx1

拔掉181的网线   再次访问出现的是

apache1

关于keepalived对nginx状态未知的问题

keepalived监控的是master的IP是否存在,不会单独监控nginx或者是apache,当master上的nginx服务关闭时,继续访问VIP访问的还是181,显示没有服务

编辑监控脚本

        server1

                vim /etc/keepalived/ck_ng.sh

count=$(ps -C nginx --no-heading | wc -l)
if  [ $count -eq 0  ]
    then
    systemctl start nginx
    sleep5
        count=$(ps -C nginx --no-heading | wc -l)    
        if  [ $count -eq 0  ]
            then
            systemctl stop keepalived
        fi
fi

        赋予执行权限        chmod  +x  /etc/keepalived/ck_ng.sh

       server2    添加apache监控脚本

                vim /etc/keepalived/ck_apache.sh

counter=$(ps -C httpd --no-heading | wc -l)
if  [ $counter  -eq  0  ]
    then
    systemctl start httpd
    sleep 5
    counter=$(ps -C httpd --no-heading | wc -l)
    if [ $counter -eq  0 ]
        then
        systemctl stop keepalived
    fi
fi

        chmod +x /etc/keepalived/ck_apache.sh

启动监控脚本

清除掉配置文件中的注释。  /etc/keepalived/keepalived.conf

重启keepalived                        systemctl restart  keepalived

实战案例2 keepalived+lvs集群

环境

1    192.168.31.183  负载均衡器 master
2    192.168.31.182  负载均衡器 backup
3    192.168.31.184  web1
4    192.168.31.185  web2
VIP 192.168.31.110

1.在master上安装配置Keepalived   181

        # yum install keepalived  ipvsadm -y                ipvsadm安装并不启动

***2.在master上修改配置文件***        181

vim /etc/keepalived/keepalived.conf

!Configuration File for keepalived
global_defs {
router_id Director1    #两边不一样
}

vrrp_instance VI_1  {
state MASTER 
interface ens33    #心跳网卡
virtual_router_id 51    #虚拟路由编号,主备要一致
priority  150       #优先级
advert_int 1        #检查间隔,单位秒
    authentication {
            auth_type PASS
            auth_pass 1111
        }
    virtual_ipaddress{
            192.168.31.110/24   dev  ens33    #VIP和工作接口
        }
}

virtual_server 192.168.31.110 80 {    #LVS配置,VIP
delay_lop 3        #服务论询的时间间隔,#每隔3秒检查一次real_server状态
lb_algo rr    #LVS调度算法
lb_kind DR    #LVS 集群模式
protocol TCP
    real_server 192.168.31.184 80  {
    weight 1
    TCP_CHECK {
			    connect_timeout 3       #健康检查方式,连接超时时间
			    }
            }    
    real_server 192.168.31.85 80 {
    weight 1
    TCP_CHECK {
                connection_timeout3
                    }
            }
}

3.在backup上安装keepalived:  182

yum -y install  keepalived   ipvsadm        ipvsadm 不启动

4.拷贝master上的keepalived.conf到backup上:

scp -r /etc/keepalived/keepalived.conf 192.168.31.182:/etc/keepalived/

5.拷贝后,修改配置文件        182

 router_id Director2
state    BACKUP
priority 100

6.master和backup上启动服务:

#systemctl enable keepalived

# systemctl restart keepalived

#reboot

7.web服务器配置

web1和web2同配置

        安装web测试站点

                yum install -y httpd && systemctl start httpd && systemctl enable httpd

                netstat -antp | grep httpd

                # elinks 127.0.0.1                自定义web主页,以便观察负载均衡结果

        配置虚拟地址**

                # cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}

                # vim /etc/sysconfig/network-scripts/ifcfg-lo:0               

DEVICE=lo:0
IPADDR=192.168.31.110
NETMASK=255.255.255.255
ONBOOT=yes
其他行注释掉

        配置路由

               # vim /etc/rc.local   添加上

                /sbin/route add -host 192.168.31.110 dev lo:0

        配置ARP        忽略arp请求,可以回复

                # vim /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

        reboot 

8.测试

1)观察lvs路由条目

在master或者backup

高可用集群 keepalived+LVS_第1张图片

2)观察vip地址在哪台机器上

 master上 查询 # ip a

高可用集群 keepalived+LVS_第2张图片

3)客户端浏览器访问vip 

4)关闭master上的keepalived服务,再次访问vip

5)关闭web1站点服务,再次访问VIP

1.什么是集群?集群分为哪些类型?列举代表的产品。
2.有些负载均衡集群服务?他们有什么区别?
3.LVS-DR和LVS-NAT的工作原理。
4.keepalived的工作原理。
5.高可用集群有哪些产品。他们的区别。
6.负载均衡集群的策略有哪些?能否举例说明?

你可能感兴趣的:(服务器,运维,负载均衡)