keepalived

docker部署keepalived(搭建keepalived) 阅读详情

一、高可用集群keepalived

解决问题:可以实现当lvs即挂了以后,架构依然可用,客户端依然能够连接到服务器

1.1 集群类型

LB:Load Balance 负载均衡

​ LVS/HAProxy/nginx(http/upstream, stream/upstream)

HA:High Availability 高可用集群

​ 数据库、Redis

SPoF: Single Point of Failure,解决单点故障

​ HPC:High Performance Computing 高性能集群

1.2 系统可用性

SLA:Service-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能 等方面所达成的双方共同认可的协议或契约)

A = MTBF / (MTBF+MTTR)

例如:99.95%:(60X24X30)X(1-0.9995)=21.6分钟 #一般按一个月停机时间统计

指标 :99.9%, 99.99%, 99.999%,99.9999%

计算结果越大,越可用

1.3 实现高可用

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

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

1.4 vrrp

思路:虚拟一个网关,让终端连接这个虚拟网关。同时真实的路由器会竞争这个虚拟网关的身份,竞争成功则成为主网关,竞争失败则成为从网关,当主网关挂了以后,从网关就会晋升为主网关,从而实现备份效果。

二、keepalived部署

vrrp协议的软件设计,原生设计目的为了高可用 ipvs服务

支持nginx、haproxy等服务

官网: http://keepalived.org/

在这里插入图片描述

2.1 环境准备

四台:linux7,一个网卡,net模式

KA1:172.25.254.10

KA2:172.25.254.20

realserver1:172.25.254.110

realserver2:172.25.254.120

VIP:172.25.254.100


realserver1

[root@realserver1 ~]# vmset.sh eth0 172.25.254.110 realserver1.timinglee.org

realserver2

[root@realserver2 ~]# vmset.sh eth0 172.25.254.120 realserver.timinglee.org

KA1

[root@ka1 ~]# vmset.sh eth0 172.25.254.10 ka1.timinglee.org

KA1

[root@ka2 ~]# vmset.sh eth0 172.25.254.20 ka2.timinglee.org

ALL

查看selinux状态

[root@local ~]# getenforce
Disabled

查看防火墙状态—确认为防火墙关闭

[root@ka1 ~]# systemctl status firewalld
● firewalld.service
Loaded: masked (/dev/null; bad)
Active: inactive (dead)

realserver1

下载httpd

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

在静态网页中写入172.25.254.110

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

设置为开机自启动

[root@realserver1 ~]# systemctl enable --now httpd

realserver2

下载httpd

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

在静态网页中写入172.25.254.120

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

设置为开机自启动

[root@realserver2 ~]# systemctl enable --now httpd

2.2 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

KA1

安装keepalived

[root@ka1 ~]# yum install keepalived -y

全局配置—修改发送警报邮件的邮箱

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

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}

配置vrrp

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

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

开机自启动keepalived

[root@ka1 ~]# systemctl enable --now keepalived.service

传递配置给ka2

[root@ka1 ~]# scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf

The authenticity of host '172.25.254.20 (172.25.254.20)' can't be established.
ECDSA key fingerprint is SHA256:E3qE8JvU9z/9Q6iQNWX4FB2C7Of1r+MKoHRNklKH9ow.
ECDSA key fingerprint is MD5:26:47:a1:e9:a2:08:3a:f9:fa:eb:2d:a8:99:11:bf:6b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.254.20' (ECDSA) to the list of known hosts.
root@172.25.254.20's password:
keepalived.conf                                        100% 3552     3.9MB/s   00:00

测试

[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:31:10.631725 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:31:11.632742 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

KA2

安装keepalived

[root@ka2 ~]# yum install keepalived -y

全局配置

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

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

[root@ka2 ~]# systemctl enable --now keepalived.service

测试

realserver1

远程登录ka1

[root@realserver1 ~]# ssh -l root 172.25.254.10

The authenticity of host '172.25.254.10 (172.25.254.10)' can't be established.
ECDSA key fingerprint is SHA256:E3qE8JvU9z/9Q6iQNWX4FB2C7Of1r+MKoHRNklKH9ow.
ECDSA key fingerprint is MD5:26:47:a1:e9:a2:08:3a:f9:fa:eb:2d:a8:99:11:bf:6b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.254.10' (ECDSA) to the list of known hosts.
root@172.25.254.10's password:
Last login: Sun Aug 11 19:28:30 2024 from 172.25.254.1

在realserver1机上远程登陆ka1,关闭服务,模拟ka1的keepalived服务故障

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

在ka1机上检查

[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

20:32:37.737668 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:32:38.129269 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 0, authtype simple, intvl 1s, length 20
20:32:38.817522 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
20:32:39.819082 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20

# ka1挂了以后,ka2无缝衔接

在realserver1机上恢复ka1的keepalived服务

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

在ka1机上检查

[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

20:32:55.827526 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
20:32:56.828071 IP 172.25.254.20 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
20:32:56.828462 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:32:57.829287 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

#因为为抢占模式,所以恢复为ka1的服务

2.3 keepalived’开启通信功能

linux7可以使用,linux9不可以

在全局里面添加该参数,允许vip可以通信

ka1机

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

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
}

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

ka2机

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

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
}

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

测试

[root@realserver1 ~]# ping 172.25.254.100

PING 172.25.254.100 (172.25.254.100) 56(84) bytes of data.
64 bytes from 172.25.254.100: icmp_seq=1 ttl=64 time=0.237 ms
64 bytes from 172.25.254.100: icmp_seq=2 ttl=64 time=0.583 ms

ka1机

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

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   #vrrp_iptables
}

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

ka2机

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

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   #vrrp_iptables
}

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

测试

[root@realserver1 ~]# ping 172.25.254.100

PING 172.25.254.100 (172.25.254.100) 56(84) bytes of data.
64 bytes from 172.25.254.100: icmp_seq=1 ttl=64 time=0.237 ms
64 bytes from 172.25.254.100: icmp_seq=2 ttl=64 time=0.583 ms

2.4 keepalived配置独立日志

ka1机

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

# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
#

KEEPALIVED_OPTIONS="-D -S 6"

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

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

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local6.*                                                /var/log/keepalived.log

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

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

测试

[root@ka1 ~]# ll /var/log/keepalived.log
-rw------- 1 root root 8168 Aug 11 21:11 /var/log/keepalived.log

2.5 keepalived配置独立子配置文件

独立子配置文件:将配置改到子配置文件中

注释以后,虚拟路由消失

ka1机

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

#vrrp_instance VI_1 {
#    state MASTER
#    interface eth0
#    virtual_router_id 100
#    priority 100
#    advert_int 1
#    authentication {
#        auth_type PASS
#        auth_pass 1111
#    }
#    virtual_ipaddress {
#        172.25.254.100/24 dev eth0 label eth0:1
#    }
#}
include "/etc/keepalived/conf.d/*.conf"

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

# 因为找不到conf.d目录,所以报错
Job for keepalived.service failed because the control process exited with error code. See "systemctl status keepalived.service" and "journalctl -xe" for details.

[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 eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

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

三、工作过程

3.1 抢占模式和非抢占模式、延迟抢占

抢占模式:优先级高的直接抢

非抢占模式:等优先级低的挂了在抢

延迟抢占:优先级高的在指定时间后抢占

非抢占模式配置

ka1

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

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    nopreempt          #设置非抢占模式
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

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

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

ka2

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

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    nopreempt   #设置非抢占模式
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

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

测试:ka1:ip a

延迟抢占模式配置

ka1

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

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    preempt_delay 5s   #设置延迟5s抢占
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

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

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

ka2

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

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    preempt_delay 5s   #设置延迟5s抢占
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

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

测试:ka1:ip a

3.2 VIP单播配置

默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量

组播换成单播配置

前提,两个ka机中,全局配置global_defs 中vrrp_strict参数要注释掉,因为它不支持单播

ka1

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

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
   }
}

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

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

ka2

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

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
          172.25.254.10
    }
}

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

测试

ka1和ka2同时使用该命令

[root@ka1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20

[root@ka2 ~]# tcpdump -i eth0 -nn src host 172.25.254.20 and dst 172.25.254.10

终端中

[root@realserver1 ~]# ssh -l root 172.25.254.10
[root@ka1 ~]# systemctl stop keepalived.service
[root@ka1 ~]# systemctl start keepalived.service

一方获得ip地址以后,另一方就停止:ka1有结果时,ka2就无结果。当ka1挂了以后,ka2立马就有结果

四、邮件通知

让linux可以发邮件

4.1 给qq邮箱发邮件

让linux的邮件发送到qq邮箱中,前提:QQ邮箱->账户与安全->安全设置->POP3/IMAP/SMTP/Exchange/CardDAV 服务开启

ka1配置

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

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

# For Linux and BSD, this should be set.
set bsdcompat
set from=1540509690@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1540509690@qq.com
set smtp-auth-password=pbqcsmebsewfbabi
set smtp-auth=login
set ssl-verify=ignore

测试

给自己的qq邮箱发邮件

[root@ka1 ~]# echo hello world | mail -s test 1540509690@qq.com
在这里插入图片描述

ka2

[root@ka2 ~]# yum install mailx -y

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

# For Linux and BSD, this should be set.
set bsdcompat
set from=1540509690@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1540509690@qq.com
set smtp-auth-password=pbqcsmebsewfbabi
set smtp-auth=login
set ssl-verify=ignore

测试

给自己的qq邮箱发邮件

[root@ka2 ~]# echo hello world2 | mail -s test 1540509690@qq.com
在这里插入图片描述

4.2 脚本编写

ka1、2

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

#! /bin/bash

mail_dst="1540509690@qq.com"
send_message()
{
   mail_sub="$HOSTNAME to be $1 vip move"
   mail_msg="`date +%F\ %T`:vrrp move $HOSTNAME chage $1"
   echo $mail_msg | mail -s "$mail_sub" $mail_dst
}

case $1 in
        master)
        send_message master
        ;;
        backup)
        send_message backup
        ;;
        fault)
        send_message fault
        ;;
        *)
        ;;
esac

~

[root@ka1 ~]# chmod +x /etc/keepalived/mail.sh

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

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
   }
   #如下为添加的配置
   notify_master "/etc/keepalived/mail.sh master"
   notify_backup "/etc/keepalived/mail.sh backup"
   notify_fault "/etc/keepalived/mail.sh fault"

}

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

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

测试

[root@ka1 ~]# /etc/keepalived/mail.sh fault

在这里插入图片描述

五、实现keepalived双主结构

给两台keepalived一台配置一个vip

配置

ka1

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

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
   }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 200
    priority 80
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
   }
}

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

ka2

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

以下为两个,第一个保持不变,变更名称即可,下图为复制的

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
          172.25.254.10
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 200
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
          172.25.254.10
    }
}

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

六、实现ipvs的高可用性(lvs+keepalived)

6.1 虚拟·服务器配置结构

virtual_server IP port {
 	...
 real_server {
 ...
 }
 real_server {
 ...
 }
 …
 }

6.2 虚拟服务器配置

virtual_server IP port {		#VIP和PORT                
delay_loop <INT>               	#检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh    #定义调度方法
lb_kind NAT|DR|TUN                  #集群的类型,注意要大写        
persistence_timeout <INT>			#持久连接时长         
protocol TCP|UDP|SCTP				#指定服务协议,一般为TCP              
sorry_server <IPADDR> <PORT>        #所有RS故障时,备用服务器地址   
real_server <IPADDR> <PORT> {       #RS的IP和PORT   
weight <INT>                        #RS权重   
notify_up <STRING>|<QUOTED-STRING>  #RS上线通知脚本   
notify_down <STRING>|<QUOTED-STRING>   #RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... }   #定义当前主机健康状
态检测方法
}
 }
 #注意:括号必须分行写,两个括号写在同一行,如: }} 会出错

6.3 应用层检测

应用层检测:HTTP_GET|SSL_GET

HTTP_GET|SSL_GET {
 url {
 	path <URL_PATH>    #定义要监控的URL      
	status_code <INT>  #判断上述检测机制为健康状态的响应码,一般为 200      
 }
 connect_timeout <INTEGER>  #客户端请求的超时时长, 相当于haproxy的timeout server
 nb_get_retry <INT>         #重试次数
 delay_before_retry <INT>   #重试之前的延迟时长
 connect_ip <IP ADDRESS>    #向当前RS哪个IP地址发起健康状态检测请求
 connect_port <PORT>        #向当前RS的哪个PORT发起健康状态检测请求
 bindto <IP ADDRESS>        #向当前RS发出健康状态检测请求时使用的源地址
 bind_port <PORT>           #向当前RS发出健康状态检测请求时使用的源端口
}

6.4 TCP检测

传输层检测:TCP_CHECK

TCP_CHECK {					
connect_ip <IP ADDRESS>     #向当前RS的哪个IP地址发起健康状态检测请求   
connect_port <PORT>         #向当前RS的哪个PORT发起健康状态检测请求   
bindto <IP ADDRESS>         #发出健康状态检测请求时使用的源地址   
bind_port <PORT>            #发出健康状态检测请求时使用的源端口   
connect_timeout <INTEGER>   #客户端请求的超时时长
							#等于haproxy的timeout server
}

6.5 实现双主的LVS-DR模式

rs1

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

[root@realserver1 ~]# cd /etc/sysconfig/network-scripts/

[root@realserver1 network-scripts]# vim ifcfg-lo

DEVICE=lo
IPADDR0=127.0.0.1
NETMASK0=255.0.0.0

IPADDR1=172.25.254.100
NETMASK1=255.255.255.255

NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

[root@realserver1 network-scripts]# systemctl restart network

Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.

删除多余网卡-ens33

[root@realserver1 network-scripts]# rm -fr ifcfg-ens33

[root@realserver1 network-scripts]# systemctl restart network

rs2

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

[root@realserver2 ~]# vim /etc/sysctl.d/arp.conf

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

查看是否生效

[root@realserver2 ~]# sysctl --system

* Applying /usr/lib/sysctl.d/00-system.conf ...
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
kernel.yama.ptrace_scope = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/arp.conf ...

#查看如下内容 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
* Applying /etc/sysctl.conf ...

[root@realserver2 ~]# scp /etc/sysctl.d/arp.conf root@172.25.254.110:/etc/sysctl.d/arp.conf

The authenticity of host '172.25.254.110 (172.25.254.110)' can't be established.
ECDSA key fingerprint is SHA256:E3qE8JvU9z/9Q6iQNWX4FB2C7Of1r+MKoHRNklKH9ow.
ECDSA key fingerprint is MD5:26:47:a1:e9:a2:08:3a:f9:fa:eb:2d:a8:99:11:bf:6b.
Are you sure you want to continue connecting (yes/no)? yes  #输入yes
Warning: Permanently added '172.25.254.110' (ECDSA) to the list of known hosts.
root@172.25.254.110's password:   #输入密码
arp.conf                                               100%  127   162.7KB/s   00:00

查看结果

[root@realserver2 ~]# sysctl --system

[root@realserver2 ~]# cat /etc/sysctl.d/arp.conf

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

ka1

[root@ka1 ~]# yum install ipvsadm -y

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

#include "/etc/keepalived/conf.d/*.conf"
virtual_server 172.25.254.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP
#################################################################
    real_server 172.25.254.110 80 {
        weight 1
        SSL_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
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
#################################################################
}

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

在这里插入图片描述

ka2

[root@ka2 ~]# yum install ipvsadm -y

查询是否能curl 172.25.254.100

[root@ka2 ~]# curl 172.25.254.100
172.25.254.110

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

virtual_server 172.25.254.100 80{
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.254.110 80 {
        weight 1
        SSL_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
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }

}

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

6.6 实现其他应用的高可用性 vrrp script(haproxy+keepalived)

6.6.1 利用脚本实现主从角色切换

ka1

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

#! /bin/bash
[ ! -f /mnt/lee ]

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

[root@ka1 ~]# echo $?

​ 0

[root@ka1 ~]# touch /mnt/lee

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

[root@ka1 ~]# echo $?

​ 1

[root@ka1 ~]# chmod +x /etc/keepalived/test.sh

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

vrrp_script check_file {
    script "/etc/keepalived/test.sh"
    interval 1
    weight -30
    fall 2
    rise 2
    timeout 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
    track_script {
        check_file
    }
}

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

check_file后的空格删除干净

[root@ka1 ~]# ls /mnt/lee

/mnt/lee

测试

[root@ka1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst host 172.25.254.20

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
01:43:30.217900 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28
01:43:31.218509 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28
01:43:32.220167 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28
01:43:34.222801 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28
01:43:35.224120 ARP, Request who-has 172.25.254.20 tell 172.25.254.10, length 28

6.6.2 haproxy+keepalived实现高可用的配置

ka1

root@ka1 ~]# yum install haproxy -y

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

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.

#For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_nonlocal_bind=1

[root@ka1 ~]# sysctl -p

net.ipv4.ip_nonlocal_bind = 1

ka2

root@ka1 ~]# yum install haproxy -y

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

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.

#For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_nonlocal_bind=1

[root@ka2 ~]# sysctl -p

net.ipv4.ip_nonlocal_bind = 1

ka1

[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check
listen webcluster
    bind 172.25.254.100:80
    balance roundrobin
    server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
    server web2 172.25.254.120:80 check inter 3 fall 2 rise 5

[root@ka1 ~]# systemctl enable --now haproxy.service

在这里插入图片描述

keepalived的日志在哪里、配置keepalived日志路径 阅读详情

相关推荐

修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径

修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径

qq_44952664的博客 5410

docker-部署Keepalived实现Nginx高可用

Keepalived是一款基于VRRP协议的高可用集群软件,通过虚拟IP(VIP)对外提供服务,能够实时监控集群中服务器的运行状态并自动进行故障隔离,这些服务器都启动着相同的服务,当主服务器发生故障时,会自动将虚拟IP漂移到备份服务器,从而实现业务高可用。

孟孟的博客 7166

keepalived的部署

节点部署 IP hostname 192.168.47.126 master 192.168.47.127 server 需求 任务需求: 1.部署keepalived 2.配置keepalived日志 3.配置自定义监测http服务脚本 操作 1.安装keepalived和httpd服务 主节点 [root@master ~]# yum -y install keepal...

qq_46464118的博客 1453

【keepalived】keepalived简介及配置文件详解

一、是什么     keepalived是集群管理中保证集群高可用的一个服务软件,它的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后,自动将web服务器加入到服务器集群中。解决了静态路由的单点故障问题。二、工作原理     keepalived是以VRRP协议为实现基础的,VRR...

柠檬树 1万+

LVS+keepalived搭建高可用架构

我在确认我所部署的lvs节点跟后端的real server不在同一二级网络,且中间还要经过一道防火墙后,想到了另外一个办法,在中间增加一层nginx,分别在两台lvs安装部署nginx,通过将请求转发到nginx,再由nginx转发请求,这样就能在不增加机器的情况下完成请求转发,实现后端服务的高可用。脚本执行成功后一样通过ip addr查看是否绑定成功,绑定成功则可以在客户端访问VIP了,看是否正常响应,到此MASTER就部署完成可,接下来可以按照以上的步骤完成另外一个lvs节点部署。

wukuncsdn的博客 1034

springcloud教程 -- 1.快速搭建入门级demo,看这一篇就够了

废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片 here] 生产者:提供服务 消费者:消费服务 服务注册/发现中心:服务注册,发现,监控 所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server)

叶巨岩的博客 8万+

ubuntu安装keepalived

ubuntu版本 查看版本命令: lsb_release -a 安装前环境准备( 全敲一遍 ) sudo apt-get install libssl-dev sudo apt-get install libpopt-dev sudo apt-get install daemon sudo apt-get install build-essential sudo apt-get install libssl-dev sudo apt-get install openssl sudo a.

weixin_59613707的博客 2734

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南

本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。

weixin_29324401的博客 1191

Keepalived 原理及配置(高可用)

本文详细讲解了keepalived的工作原理,日常的配置,每个模式的详细配置及验证。还结合lvs和haproxy实现高可用集群的搭建,每个实验都有详细的流程及结果测试。

a_2373179473的博客 4718

点云PCL库学习-双目图像转化为点云PCD并显示

文章目录 双目视觉模型 代码实现 总结 参考文章 一、双目视觉模型 和RGBD相机主动发射光线实现测距不同,双目测距原理通过配置立体摄像头(通常由左眼相机和右眼相机两个水平放置的相机组成)来获取一对同一场景中的二维图像,再基于同一空间点在两个坐标系下的视差来计算深度。双目测距的示意图和数学表达式如下所示: 双目相机的成像示意图 上述示意图描述了一个空间点在左右两目相机中位置之间的成像关系,根据相似三角形原理可得: 其中,f和b分别为相机焦距和双目相机基线,d为空间点在两个坐标系下

weixin_41957687的博客 6948

基于STM32的PID恒温恒湿控制系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了基于双路PID算法的恒温恒湿闭环控制系统,覆盖高精度温湿度采集、双模式控制、参数在线配置、异常安全保护、掉电记忆等全功能,全程采用无跳步保姆式教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 346

keepalived服务介绍

Keepalived 是一个用于实现高可用性(HA)和负载均衡的开源工具,用 C 编写的路由软件,特别适用于 Linux 服务器。VRRP 是一种网络协议,用于在多个路由器之间实现冗余,以确保当主路由器出现故障时,备用路由器可以迅速接管。这种模式下,有一个主节点(Active)和一个或多个备节点(Passive)。只有主节点处理流量,当主节点出现故障时,备节点接管。但是这种情况下服务会中断一点时间,因为master节点恢复后备用节点将会把IP给主节点,而不是备用节点一直接管,用户会感到卡顿一下。

m0_56363537的博客 1204

【学长笔记】关于车牌识别的CCPD数据集按比例划分

本文介绍了一个用于CCPD车牌数据集划分的Python脚本,主要功能包括:1) 将数据集按比例划分为训练集、验证集和测试集;2) 支持图像与标签文件校验;3) 可自定义划分比例和样本数量限制;4) 自动生成标准目录结构。脚本使用随机种子确保可重复性,并通过tqdm显示进度条。处理后数据可直接用于YOLO等目标检测模型的训练与评估,建议在预处理完成后立即执行划分以避免数据泄露。文章还提供了相关技术博客的参考链接。

apple_53308981的博客 1478

keepalived集群搭建

文章目录一. 搭建过程二. 验证keepalived集群三. keepalived集群中的每台机器都出现了vip的解决办法(组播VS单播) keepalived是通过vrrp协议保证系统高可用的解决方案,一般作为一个高可用系统的入口,提供虚拟ip(vip)供用户访问系统,keepavlived集群的下一个中间件往往为haproxy或者nginx。 一. 搭建过程 主机名 ip 网卡名 ubuntu01 192.168.56.104 enp0s8 ubuntu02 192.168.56

没事学点AI小知识 1567

39、低功耗处理器性能评估与Cortex - M23/M33低功耗特性解析

本文深入解析了Cortex-M23和Cortex-M33处理器的低功耗特性及其性能评估方法。介绍了ULPMark、CoreMark、IoTMark-BLE和SecureMark-TLS等基准测试在能效评估中的应用,并详细阐述了处理器的睡眠模式、系统控制寄存器(SCR)配置、WFI/WFE指令、退出时睡眠、挂起时发送事件(SEVONPEND)以及唤醒中断控制器(WIC)等关键低功耗机制。结合状态保留技术,展示了如何通过芯片级设计大幅降低泄漏电流,实现高效能低功耗的物联网与嵌入式系统设计。

Pepper的专栏 130

【嵌入式Linux驱动开发】二十四、Linux I2C 驱动上手尝试

  人的前程关于眼界、关乎格局。   志之所趋,无远弗届,穷山复海不能限也;   志之所向,无坚不入,锐兵精甲不能御也。 一、I2C驱动框架简介   Linux内核将 I2C 驱动分为两部分: ①、 I2C 总线驱动, I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。 ②、 I2C 设备驱动, I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。 1....

悟已往之不谏 知来者之可追 1068

Keepalived权威指南中文(Keepalived:The Definitive Guide)

Keepalived 权威指南 The Definitive Guide第一章 VRRP1.1 VRRP协议简介VRRP路由器VRRP虚拟路由器MASTER和BACKUP1.2 工作机制第二章 KEEPALIVED2.1 Keepalived的设计和实现2.1.1 多进程模式2.1.2 控制面板2.1.3 WatchDo2.1.4 IPVS封装2. 2 KeepAlived的安装2.3 KeepAlived配置详解2.3.1 全局配置全局定义静态地址和路由2.3.2 VRRPD配置VRRP Sync Gro

u012324798的博客 5714

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1542

Keepalived日志配置,将Keepalived从系统日志文件中分离出来成为独立的Keepalived日志文件

前言 在Linux服务器上,完成《 Nginx+Keepalived搭建高可用Web服务器详细教程 》搭建高可用Web服务器后,如果没有额外的配置,在查看日志时,可能会发现Keepalived的日志和Linux下的其它程序的日志打印在一起的,查看起来费时费力。在 Linux 下 messages 日志文件是用来记录 Linux 内核消息及各种应用程序的公共日志信息文件,其中包括了启动、IO...

Spring Boot-Common On With You 2910

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

docker部署keepalived

dokcer部署keepalived

zhenyu333的博客 4352

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Keepalived】keepalived部署

如下有部分是操作系统自带的,并不是所有的都需要。亦可通过window本地下载并上传。

qq_41466440的博客 1324

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LVS-keepalived

LVS-keepalived群集必须会!!!

m0_73695023的博客 988

keepalived安装文档

7、将keepalived文件拷贝到etc下,加入网卡配置。6、将init.d文件拷贝到etc下,加入开机启动项。9、将keepalived配置文件拷贝到etc下。8、创建keepalived文件夹。10、添加可执行权限。

棉花糖老丫 1384

linux keepalived 日志,如何重定向Keepalived日志的输出路径

Keepalived默认所有的日志都是写入到/var/log/message下的,由于message的日志太多了,而Keepalived的日志又很难分离出来,所以本文提供了一个调整Keepalived日志输出路径的方法。具体操作步骤如下:一、修改 /etc/sysconfig/keepalived把KEEPALIVED_OPTIONS="-D" 修改为KEEPALIVED_OPTIONS="-D ...

weixin_39935571的博客 763

Keepalived配置日志文件

最近安装keepalived,再centos上面一帆风顺啊,没有遇到任何阻拦,但是再ubuntu上装,差点没让我砸了电脑,各种坑,各种报错,ubuntu上安装可以看下我这边博客:ubuntu 下安装keepalived 所以,能够查看日志是一件很幸福的事情啊,根据日志来定位错误会事半功倍 好了,正片上映: 配置日志文件 修改配置文件 keepalived vi /etc/sysconfig/ke...

波风水门 3137
上一篇: haproxy
下一篇: nginx
Dream_of_falling
博客等级 码龄5年 82粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值