高可用负载均衡:LVS + Keepalived
Posted yubenlam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高可用负载均衡:LVS + Keepalived相关的知识,希望对你有一定的参考价值。
LVS + Keepalived 方案,基于DR模式的。参考文章如下:
youzhibing2904,《主从热备+负载均衡(LVS + keepalived)》
lvshaorong,《Keepalived实现NAT+LVS+后端健康检测》
结构图如下:
一、配置网络
Tomcat-1: 192.168.44.18
Tomcat-2: 192.168.44.19
Master: 192.168.44.20
Slave: 192.168.44.21
二、Tomcat
1、安装JDK、Tomcat、net-tools(realserver脚本需使用 ifconfig / route 命令),开放8080端口,确保单独访问成功。
2、新增 /etc/init.d/realserver 脚本,为 lo 网卡增加 vIP。
SNS_VIP=192.168.44.100 /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_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) ifconfig lo:0 down route del $SNS_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
修改权限及运行
chmod 755 realserver service realserver start # 检查是否存在lo:0 ifconfig
三、Keepalived
1、安装keepalived、ipvsadm(主要用来查看 lvs 信息)。
这里遇到一个大问题,CentOS 7 下 yum 安装 keepalived,启动时 /var/log/message 报错,curl 过去发现只有轮询的转发功能(其中一个tomcat 停掉后,照样会把请求转发到这台服务器),负载均衡 & 健康检查 都失效,应该是个bug。
yum 上的 keepalived 版本为 1.3.5
避开这个版本手动编译安装,下载地址:http://www.keepalived.org/download.html
# 依赖包 yum install curl gcc openssl-devel libnl3-devel net-snmp-devel # 解压 tar -zxvf keepalived-xxxx # 进入目录编译安装 ./configure make && make install
手动新增配置文件 /etc/keepalived/keepalived.conf
global_defs { notification_email { 380249663@qq.com } notification_email_from sns-[email protected] smtp_server 192.168.44.20 smtp_connection_timeout 30 router_id LVS_MASTER # 同一网络上具有唯一性的id } # 健康检测 vrrp_instance VI_1 { state MASTER # 角色,MASTER为主,BACKUP为备 interface ens32 # 网卡名 virtual_router_id 66 # 虚拟路由编号,主从要一直 priority 100 # 优先级,数值越大,获取处理请求的优先级越高 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数) authentication { auth_type PASS auth_pass 1111 # 验证码,主从一致 } virtual_ipaddress { 192.168.44.100 # 定义虚拟ip(VIP),可多设,每行一个 } } # lvs负载均衡 virtual_server 192.168.44.100 8080 { delay_loop 6 # 健康检查时间,单位为秒 lb_algo wrr # 负载调度的算法为wrr lb_kind DR # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式 nat_mask 255.255.255.0 persistence_timeout 0 # 同一IP 0秒内的请求都发到同个real server protocol TCP # 应用服务器 real_server 192.168.44.18 8080 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.44.19 8080 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 } } }
启动 keepalived 后使用 ipvsadm 验证 lvs
ipvsadm -L -n
以上是关于高可用负载均衡:LVS + Keepalived的主要内容,如果未能解决你的问题,请参考以下文章
RedHat 7配置keepalived+LVS实现高可用的Web负载均衡