keepalived详解

一.高可用集群

1.集群类型

1. 负载均衡集群(Load Balance Cluster)

定义:将网络流量分配到多个服务器的技术,旨在优化资源使用、最大化吞吐量、减少响应时间,并避免单个服务器过载。
常用技术:
    + LVS(Linux Virtual Server):基于Linux内核的负载均衡器,工作在四层(传输层,TCP/UDP),非常适合处理大量流量,常用于高性能场景。
    + HAProxy:一个强大的开源负载均衡器,支持四层(TCP)和七层(HTTP)负载均衡,广泛用于HTTP和TCP协议的高性能环境。
    + Nginx:作为Web服务器、反向代理服务器以及负载均衡器,Nginx可以在七层(HTTP)进行负载均衡,尤其适合处理静态内容和高并发连接。

 2. 高可用集群(High Availability Cluster)

定义:如单系统一样地运行并支持计算机持续正常运行的一个主机群。高可用集群通过消除单点故障,确保系统在任何组件出现故障时仍能提供服务。
关键技术:
    + 故障转移:当一个节点出现故障时,其他节点能够接管其工作,保证服务的连续性。
    + 冗余机制:如active/passive(主/备)和active/active(双主)模式,其中active节点处理所有请求,而passive节点或另一个active节点在active节点故障时接管工作。
    + 心跳检测:节点之间定期发送心跳信号以检测彼此的健康状态,确保在出现故障时能够迅速进行故障转移。

3. 高性能集群(High Performance Computing Cluster)

定义:通过计算集群并行处理大量计算任务,以实现比单个计算机更高的处理能力。
应用场景:常用于科学研究、工程模拟、大数据处理等领域。

 4. 特定用途集群

数据库高可用集群:使用数据库复制和故障切换机制(如MySQL的主从复制、Galera Cluster)来确保数据库服务的高可用性。
Redis高可用集群:使用Redis Sentinel或Redis Cluster来实现高可用性,确保数据的持续

2.系统可用性

SLA:服务等级协议

A=MTBF/(MTBF➕MTTR)

3.实现高可用

提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)
解决方案:建立冗余机制

active/passive 主/备
active/active 双主
active --> HEARTBEAT --> passive
active <–> HEARTBEAT <–> active

67f7bc5f3d5c45deb25b15e15a687dfe.png

4. VRRP:Virtual Router Redundancy Protocol

虚拟路由冗余协议,解决静态网关单点风险

物理层:路由器、三层交换机

软件层:keepalived

da289ab9cdaa42f5a9de180527acdb19.png

 

5.VRRP 相关术语

VRID:唯一标识虚拟路由器

VIP:虚拟IP

VMAC:虚拟IP的mac地址

物理路由器: mater:主设备

backup: 备用设备

priority: 优先级

二.keepalived环境配置

 

四台7.9克隆机

KA1(nat):

ip:172.25.254.10

KA2(nat):

ip:172.25.254.20

realserver1:

ip:172.25.254.110

realserver2:

ip:172.25.254.120

在realserver1和realserver2安装

[root@realserver1 ~]# yum install httpd -y

[root@realserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html

[root@realserver1 ~]# systemctl restart httpd.service

 

 

 

[root@realserver2 ~]# yum install httpd -y

[root@realserver2 ~]# echo 172.25.254.120 > /var/www/html/index.html

[root@realserver2 ~]# systemctl restart httpd.service

测试:

f8613aeb0174426b92f6bc7895874667.png

 二.1. KeepAlived 配置说明

配置文件组成部分

配置文件:/etc/keepalived/keepalived.conf

配置文件组成

GLOBAL CONFIGURATION Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等

VRRP CONFIGURATION

VRRP instance(s): 定义每个vrrp虚拟路由器

LVS CONFIGURATION

Virtual server group(s)

Virtual server(s):LVS集群的VS和RS

全局配置

ef8726078112456d9310d552b08745ee.png

 虚拟路由配置

c95237e136d74b478365a0e92b1ec85e.jpg

4a9d636942084b1ab486ad730c911ab2.png 

 修改satte

16977cc250664c41817f08f78be1c7ec.jpg

抓包测试

 fcf052cce6f6437394ae3c41a4e94124.png

 [root@ka1 ~]# vim /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -S 6"

[root@ka1 ~]# vim /etc/rsyslog.conf

local6.* /var/log/keepalived.log

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# systemctl restart keepalived.service rsyslog.service

[root@ka1 ~]# ll /var/log/keepalived.log 

-rw-------. 1 root root 4569 Aug 18 12:24 /var/log/keepalived.log

c85adb19bf3e41ac8edcc7e6c95105ba.png

f72614b5bac640b28d78de9be01891bf.png 

 [root@ka1 ~]# vim /etc/keepalived/keepalived.conf

include "/etc/keepalived/conf.d/*.conf" 

[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d

[root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf

vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 100

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.254.100 dev ens33 label ens33:1

    }

}

 

[root@ka1 ~]# systemctl restart keepalived.servive

581a5983466b41149ea4d25e48a43588.png

 5.抢占模式和非抢占模式

非抢占模式 nopreempt

默认为抢占模式 preempt ,即当高优先级的主机恢复在线后,会抢占低先级的主机的 master 角色,

这样会使 vip 在 KA 主机中来回漂移,造成网络抖动, 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的 master 角色

非抢占模块下 , 如果原主机 down 机 , VIP 迁移至的新主机 , 后续也发生 down 时 , 仍会将 VIP 迁移回原主机

ka1主机配置

 vrrp_instance VI_1 {

 state BACKUP

 interface ens33

 virtual_router_id 20

 priority 100 #优先级高

 nopreempt #非抢占模式

 advert_int 1

 authentication {

 auth_type PASS

 auth_pass 1111

 }

 virtual_ipaddress {

 172.25.254.100/24 dev ens33 label ens33:1

 }

}

 

#KA2主机配置

 vrrp_instance VI_1 {

 state BACKUP

 interface ens33

 virtual_router_id 20

 priority 80 #优先级低

 advert_int 1

 nopreempt #非抢占模式

 authentication {

 auth_type PASS

 auth_pass 1111

 }

 virtual_ipaddress {

172.25.254.100/24 dev etns33 label ens33:1

}

}

6. 抢占延迟模式preempt_delay

        抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回VIP。

环境:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict

用法:

preempt_delay # # 指定抢占延迟时间为 #s

VIP的单播

 

KA1中的配置:

 virtual_ipaddress {
        172.25.254.100/24 dev ens33 label ens33:1
    }
    unicast_src_ip 172.25.254.10 #本机IP
    unicast_peer {
        172.25.254.20             #指向对端主机IP
                                  #如果有多个keepalived,再加其它节点的IP
    }

KA2中的配置:

virtual_ipaddress {
        172.25.254.100/24 dev ens33 label ens33:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10           
                                 
    }
 

测试

9b8de26cce6843ee96fb5f0cd9f57cc8.png

 7.邮件配置

安装邮件发送工具

[root@ka1 ~]# dnf install mailx -y

扣扣邮箱配置

 

[root@ka1 ~]# vim /etc/mail.rc

set from=2268027137@qq.com                
set smtp=smtp.qq.com
set smtp-auth-user=2268027137@qq.com        
set smtp-auth-password=hbjdgetvshllincy           # 授权码
set smtp-auth=login
set ssl-verify=ignore

 

 

邮件发送:

[root@ka1 ~]# echo test message | mail -s test 2268027137@qq.com

8d6f463f8dc64fa285452d607115b80f.png

 7.实现 Keepalived 状态切换的通知脚本

创建通知脚本

[root@KA1 + KA2 ~]# vim /etc/keepalived/mail.sh

 #!/bin/bash

 mail_dest='2268027137@qq.com'

 mail_send()

 {

 mail_subj="$HOSTNAME to be $1 vip move"

 mail_mess="`date +%F\ %T`: vrrp move,$HOSTNAME change $1"

 echo "$mail_mess" | mail -s "$mail_subj" $mail_dest

}

 case $1 in

 master)

 mail_send master

 ;;

 backup)

 mail_send backup

 ;;

 fault)

 mail_send fault

 ;;

 *)

 ;;

 esac

 

实现 master/master 的 Keepalived 双主架构:同时只有一个keepalived对外提供服务 为了解决利用率低下的处境可以使用双支架

KA1:

 

vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 100

    priority 100

# preempt_delay 5s

    advert_int 1

# nopreempt

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.254.100/24 dev ens33 label ens33:1

    }

    unicast_src_ip 172.25.254.10

    unicast_peer {

        172.25.254.20

      }

    track_script {

        check_haproxy

    }

}

 

 

vrrp_instance VI_2 {

    state BACKUP

    interface ens33

    virtual_router_id 200

    priority 80

# preempt_delay 5s

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.254.200/24 dev ens33 label ens33:2

    }

    unicast_src_ip 172.25.254.10

    unicast_peer {

        172.25.254.20

      }

 

}

 

KA2:

 

vrrp_instance VI_1 {

    state BACKUP

    interface ens33

    virtual_router_id 100

    priority 80

    advert_int 1

# nopreempt

    preempt_delay 5s

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.254.100/24 dev ens33 label ens33:1

    }

    unicast_src_ip 172.25.254.20

    unicast_peer {

        172.25.254.10

    }

 

     track_script {

        check_haproxy

    }

 

}

 

 

vrrp_instance VI_2 {

    state MASTER

    interface ens33

    virtual_router_id 200

    priority 100

    advert_int 1

# nopreempt

    preempt_delay 5s

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.254.200/24 dev ens33 label ens33:2

    }

    unicast_src_ip 172.25.254.20

    unicast_peer {

        172.25.254.10

    }

 

}

7a2ee89c3bf7417986b56cb95dad80c7.png

 9.实现ipvs的高可用

配置

[root@realserver1~]# yum install httpd -y

[root@realserver1~]# echo - 172.25.254.110 > /var/www/html/index.html

[root@realserver1 ~]# ip addr add 172.25.254.100/32 dev lo

[root@realserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@realserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@realserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@realserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

 

[root@realserver2 ~]# yum install httpd -y

[root@realserver1 ~]# echo - 172.25.254.120 > /var/www/html/index.html

[root@realserver2 ~]# ip addr add 172.25.254.100/32 dev lo

[root@realserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@realserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@realserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@realserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

对keepalived进行配置

 

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

virtual_server 172.25.254.100 80 {

 delay_loop 6

 lb_algo wrr

 lb_kind DR

 protocol TCP

 

real_server 172.25.254.110 80 {

 weight 1

 HTTP_GET {

   url{

   path /

   status_code 200

 connect_timeout 3

 nb_get_retry 2

 delay_before_retry 2

}

}

 

 

real_server 172.25.254.120 80 {

 weight 1

 HTTP_GET {

  url {

  path /

  status_code 200

}

 connect_timeout 3

 nb_get_retry 2

 delay_before_retry 2

}

}

}

aaacf07116564ba8950c6443ba113f0a.png

 [root@ka1 ~]# systemctl stop keepalived.server

74ab2d27755e44cc8cc987f4deac14be.png

 

10 实现 HAProxy 高可用

在两个ka1和ka2先实现haproxy的配置
[root@ka1 & ka2 ~]# vim /etc/haproxy/haproxy.cfg
   listen webserver
     bind 172.25.254.100:80
     server web1 172.25.254.101:80 check
     server web2 172.25.254.102:80 check

 

在两个ka1和ka2两个节点启用内核参数

[root@ka1 & ka2 ~]# vim /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind = 1

在ka1中编写检测脚本

[root@ka1 ~]# vim /etc/keepalived/test.sh

#!/bin/bash

/usr/bin/killall -0 haproxy

在ka1中配置keepalived

[root@ka1 ~]#cat /etc/keepalived/keepalived.conf

   vrrp_script check_haproxy {

        script "/etc/keepalived/test.sh"

        interval 1

        weight -30

        fall 2

        rise 2

        timeout 2

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值