HA-Keepalived(LVS+Keepalived)解析与部署(二)

HA - Keepalived

在这里插入图片描述

原理解析

💯介绍:Keppalived高可用技术,防止服务的单点故障造成不可避免地影响,增强服务的高可用性、安全性。比如:中间件 rabbitmq、mysql、mycat、Haproxy等这种服务器,一旦发生故障,将影响整套服务系统的运作过程。将因软件、硬件、人为造成的故障对业务的影响降低到最小程度。

特性

  • 自动切换/故障转移(FailOver)
    • 有两台主机(主、从),两台服务器会共同模拟出一个虚拟IP地址,用户通过虚拟IP访问到后方服务。
    • 主从之间会相互去监听服务状态,当主服务器出现问题,从服务器会过来接替主服务器的虚拟IP,继续对外提供服务,用户这边是无感知的。
  • 自动侦测
    • 主与从之间,连接一根心跳线,由主机上的软件,进行复杂的监听、逻辑判断来互相侦测对方的运行情况。

问题

脑裂:两台主机(主从),各有着Apache与keepalive,当我们的主服务出现问题时,从服务器会代替服务(政变)
但两台服务器无法进行通信时,分成两个独立的节点,两边都以为对面挂了,就会出现争抢(资源共享),
会导致两边服务器都起不来,但起来了也会造成读写(资源共享),导致数据损坏(数据库轮询的联机日志)。

解决方案

  • 添加冗余的心跳线
  • 启动磁盘锁
    • 正在服务的一方锁住共享磁盘,另外一方只能读,不能写。
    • 正在服务的一方只在发现心跳线全部断开才启用磁盘锁,平时不启用。
  • 设置仲裁机制
    • 当有四台机器,1主3从 ==> 当主down了,3从 会进行投票,选IP最大的
    • 当双方平均时:仲裁机制充当一票
  • 监控报警:邮件及手机短信等

一、Keepalived 部署

组播:对同一局域网内的主机发送消息,主机组接收到消息,其他主机当作没收到
组播是指以224.0.0.0地址作为通信地址的一种方式。
原理

​ 将N台功能相同的服务器组成一个服务器组,组里有一个主(master)与多个从(backup)

​ master上有一个对外提供服务的VIP(该服务器所在局域网默认的路由为该服务器的VIP)

​ master会发送组播信息,当backup服务收不到消息时,会认为master宕机了

​ backup会根据VRRP的优先级来选择一个backup来充当master。

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

1、环境准备

#将web服务于keepalived部署在同一台机器上
web1/keepalived:192.168.178.60
web2/keepalived:192.168.178.61

# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0

2、安装软件

1、两台主机同时进行
# yum -y install keepalived httpd
2、往 Web1 中添加:
# echo "web1" > /var/www/html/index.html
3、往 Web2 中添加:
# echo "web2" > /var/www/html/index.html
4、两台主机启动:
# systemctl start httpd

3、web1

3.1、修改配置
# cd /etc/keepalived/
# cp keepalived.conf keepalived.conf.bak
# vim keepalived.conf
! Configuration File for keepalived
global_defs {                          #全局配置
 router_id web1                        #设备在组中的标识,设置不一样即可
 }

vrrp_script chk_httpd {                #健康检查
 script "/etc/keepalived/ck_httpd.sh"     #检查脚本
 interval 2                            #检查频率.秒(每隔两秒去执行脚本)
 weight -5                             #priority减5
 fall 3                                #失败三次(尝试三次,每隔两秒去执行脚本,如果脚本失败,就记下来,等检查三次后,将优先级减5)
 }

vrrp_instance VI_1 {               #VI_1(组号)。实例名两台路由器相同。
    state MASTER                        #主或者从状态
    interface ens33                     #监控网卡(心跳网卡)
    mcast_src_ip 192.168.178.60         #心跳源IP
    virtual_router_id 55                #虚拟路由编号(组编号),主备要一致。
    priority 100                        #优先级 (主要应用与1主多从)
    advert_int 1                        #心跳间隔S (对方主机运行状态的监控)/可以为毫秒级监控

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

    virtual_ipaddress {                 #VIP
    192.168.178.200/24
        }

  track_script {                       #引用脚本,监控脚本
       chk_httpd
    }

}
3.2、编写监控脚本
1、编写监控脚本:
# vim ck_httpd.sh
#!/bin/bash
         #检查httpd进程是否存在
       counter=$(ps -C httpd --no-heading|wc -l)
       if [ "${counter}" = "0" ]; then
             service httpd start
             sleep 5                  #尝试启动一次httpd,停止5秒后再次检测
          counter=$(ps -C httpd --no-heading|wc -l)
          if [ "${counter}" = "0" ]; then
                  systemctl stop keepalived    #如果启动没成功,就杀掉keepalive触发主备切换
          fi
       fi

2、赋予执行权:
# chmod +x ck_httpd.sh
3.3、拷贝给Web2
# scp -r keepalived.conf 192.168.178.61:/etc/keepalived/
# scp -r ck_httpd.sh 192.168.178.61:/etc/keepalived/

4、Web2

4.1、修改配置
# cd /etc/keepalived/
# ls
ck_httpd.sh  keepalived.conf

# vim keepalived.conf
#找到进行修改
route_id  web2	#路由标识符
state  BACKUP	#身份为从
mcast_src_ip  192.168.178.61	#心跳源,为本机IP
priority	99		#优先级,从 比 主 设置少点

5、所有主机启动服务

1、自启动服务:
# systemctl --now enable keepalived

2、查看虚拟IP在那台主机:
# ip a | grep ens33

3、也可以观察日志,查看虚拟IP绑定情况:
# cat /var/log/messages | grep 'Sending gratuitous ARP'	

6、访问测试

1、可以看到,此时的虚拟IP在Web1上,访问到Web1的服务:
# curl 192.168.178.200
web1

7、故障测试

**解析:**将Web1的服务宕机,查看虚拟IP的转移,转移到Web2服务器上,实现访问到Web2服务

1、关闭Web1上的http服务,过2秒再去观察httpd状态,可以发现服务被重新拉起,脚本的效果:
# systemctl stop httpd
# systemctl status httpd

2、修改httpd配置,让httpd服务起不来,实现VIP的转移:
# mv /etc/httpd/conf /opt/
# systemctl stop httpd

3、再次访问服务,VIP转移成功,
# curl 192.168.178.200
web2

二、LVS + Keepalived 实战

在这里插入图片描述

解析:增加 LVS 数量,组成LVS集群,对LVS之间进行Keepalived高可用,事实上就是用户还是通过keepalived的虚拟IP访问,虚拟IP对应后方的Web服务器,keepalived本质是使用LVS-DR模式。

架构:Client > LVS1(HA)LVS2 > Web

1、环境准备

LVS1:192.168.178.60
LVS2:192.168.178.61
Web1:192.168.178.7
Web2:192.168.178.16

# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0

2、LVS

2.1、安装软件
LVS1:
# yum -y install ipvsadm keepalived
LVS2:
# yum -y install keepalived
2.2、LVS1配置
a、修改配置文件
[root@192 ~]# cd /etc/keepalived/
[root@192 keepalived]# cp -r keepalived.conf keepalived.conf.bak
[root@192 keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
        router_id LVS1    #名称,自定义
        }

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

virtual_server 192.168.178.200 80 {              #LVS 配置,VIP
        delay_loop 3                            #服务论询的时间间隔,#每隔3秒检查一次real_server状态
        lb_algo rr                              #LVS 调度算法
        lb_kind DR                              #LVS 集群模式
        protocol TCP
        real_server 192.168.178.7 80 {          #Web1服务器
                weight 1
                TCP_CHECK {
                        connect_timeout 3       #健康检查方式,连接超时时间 (每隔三秒去连接Web,如果超时,就认为Web服务down机)
                        }
                }
        real_server 192.168.178.16 80 {       #Web2服务器
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        }
                }
}
b、启动服务,重启
# scp -r keepalived.conf 192.168.178.61:/etc/keepalived/
# systemctl --now enable keepalived
# reboot
2.2、LVS2配置
a、修改配置
# vim /etc/keepalived/keepalived.conf
#找到进行修改
router_id  LVS2
state  BACKUP
priority  145
b、自启动服务与重启
# systemctl --now enable keepalived
# reboot

3、Web

两台主机同时操作

3.1、安装测试服务
1、安装httpd服务
# yum -y install httpd

2、编写测试网页
# Web1: echo web1 > /var/www/html/index.html
# Web2: echo web2 > /var/www/html/index.html

3、启动与开机自启httpd
# systemctl --now enable httpd
3.2、配置虚拟IP -> lo:0
# cd /etc/sysconfig/network-scripts/
# cp -r ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0
DEVICE=lo:0			#接口名
IPADDR=192.168.178.200		#虚拟IP
NETMASK=255.255.255.255		#地址唯一性
ONBOOT=yes		#自启
#其他的注释
3.3、配置路由
# vim /etc/rc.local
#添加
# 开机生效   确保如果请求的目标IP是$VIP,那么让出去的数据包的源地址也显示为$VIP
/sbin/route add -host 192.168.178.200 dev lo:0
3.4、配置ARP
1、忽略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
3.5、重启生效
# reboot
3.6、测试
# curl  192.168.178.200
web2
# curl  192.168.178.200
web1
3.7、故障测试
1、LVS1关闭keepalived,实现VIP转移:
# systemctl stop keepalived

2、再次访问服务,访问成功,可以发现VIP转移到LVS2上
# curl  192.168.178.200
web2
# curl  192.168.178.200
web1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值