keepalive

本文介绍Keepalived软件在高可用集群中的配置与使用方法。Keepalived能够监测Web服务器状态并自动调整服务器权重,确保系统稳定运行。文中详细展示了配置文件示例,包括VIP设置、负载均衡算法及故障检测脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

Keepalived 的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

配置实例

VIP: 192.168.199.177 RealServer1: 192.168.199.222 RealServer2: 192.168.199.193

MASTER 配置

<pre> ! Configuration File for keepalived vrrp_instance VI_1 { state MASTER interface eth2 garp_master_delay 10 smtp_alert virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.199.177 } } virtual_server i192.168.199.177 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.199.222 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.199.193 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } </pre>

BACKUP

<pre> ! Configuration File for keepalived vrrp_instance VI_1 { state BACKUP interface eth2 garp_master_delay 10 smtp_alert virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.199.177 } } virtual_server i192.168.199.177 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.199.222 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.199.193 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } </pre>

192.168.199.193: service keepalived restart 192.168.199.222: service keepalived restart 配置完成


! Configuration File for keepalived

global_defs { notification_email { 定义接受邮件的邮箱 acassen@firewall.loc failover@firewall.loc
sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc 定义发送邮件的邮箱 smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_MASTER lvs服务器标识符 }

vrrp_instance LVSMASTER { lvs实例标识 state MASTER 服务器状态 interface eth0 监控的端口 virtual_router_id 51 虚拟路由标识,一组lvs的虚拟路由标识必须相同,这样才能切换 priority 100 lvs服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER advert_int 2 lvs服务器之间的存活检查时间2s authentication { auth_type PASS 认证类型 auth_pass hylanda 认证密码,一组lvs 服务器的认证密码必须一致 } virtual_ipaddress { 192.168.0.138 虚拟ip或服务ip } } virtual_server 192.168.0.138 80 { 虚拟服务运行方式定义 delay_loop 5 检查realserver存活的间隔时间 lb_algo rr 负载均衡算法 lb_kind DR 请求转发方式 persistence_timeout 50 连接保持时间 protocol TCP

real_server 192.168.0.132 80 { 真实服务器定义
    weight 1          负载参数
    TCP_CKECK {
        connect_timeout 10  连接超时时间
        nb_get_retry 3      重试连接的次数
        delay_before_reitry 3  每次连接间隔
        connect_port 80     端口
    }
}

real_server 192.168.0.133 80 {
    weight 1
    TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
    }
}

}

3.配置keepalive 两台服务器端keepalived.conf内容都为如下,都设置为backup,不抢占,注意修改优先级不同,更详细的keepalived配置文件说明可以执行man keepalived.conf查看:

! Configuration File for keepalived global_defs { notification_email { admin@lvtao.net } notification_email_from admin@lvtao.net smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } #监控服务.NGINX mysql等 vrrp_script chk_nginx { script "/home/check_nginx.sh" interval 2 weight 2 }

vrrp_instance VI_1 { state BACKUP #主从设置 MASTER interface eth2 #网卡名 virtual_router_id 51 mcast_src_ip 10.0.1.133 #本机IP priority 50 #从机小于主机 advert_int 1 authentication { auth_type PASS auth_pass chtopnet } virtual_ipaddress { 10.0.1.2 #VIP 的IP } track_script { chk_nginx #检测脚本 }

}

virtual_server 10.0.1.2 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP

real_server 10.0.1.132 80 { 
    weight 3 
    TCP_CHECK { 
        connect_timeout 10 
        nb_get_retry 3 
        delay_before_retry 3 
        connect_port 80 
    } 
} 
real_server 10.0.1.133 80 { 
    weight 3 
    TCP_CHECK { 
        connect_timeout 10 
        nb_get_retry 3 
        delay_before_retry 3 
        connect_port 80 
    } 
} 

}

启动相关服务。我在这儿使用的是nginx ,每个上面开了一个站点,通过IP可以直接访问的。启动keepalive后,就可以通过VIP的虚拟IP 10.0.1.2来访问站点了,测试方法就是 停止任何其中一个站点,看它是否能自动切换到从服务器上。

上面代码中 nginx的检测脚本如下 :

#!/bin/bash if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ] then /usr/local/nginx/sbin/nginx sleep 5 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ] then killall keepalived fi fi

在两台Web Server上执行realserver.sh脚本,为lo:0绑定VIP地址10.0.1.2、抑制ARP广播。

#!/bin/bash #description: Config realserver

VIP=10.0.1.2

/etc/rc.d/init.d/functions

case "$1" in start) /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) /sbin/ifconfig lo:0 down /sbin/route del $VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac

exit 0

分别在主从机上执行 sh realserver.sh start 就可实现负载均衡及高可用集群了

转载于:https://my.oschina.net/u/877567/blog/198582

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值