标签:keepalived lvs
因为测试机其有限,而且也只是为了看看lvs负载均衡tcp端口能否正确获取到客户端的真实IP,之前用过nginx,haproxy,对非http协议的获取客户端真实IP都毫无办法。安装过程就不叙述。
keepalived+lvs server 192.168.53.10 DR server 192.168.53.10 real server 192.168.53.12
keepalived server :执行以下操作
[ root@keepalived ]cat keepalived.conf ! Configuration File for keepalived #!表示注释 global_defs { notification_email { ! root@example.com #接收警报的邮箱,可以添加多个 mortal@gmail.com #接收警报的邮箱,可以添加多个 } notification_email_from root@localhost smtp_server 127.0.0.1 #使用本机转发 email smtp_connect_timeout 30 router_id LVS_HA_R1 #本服务器的名称,备份组内唯一 } !vrrp_script chk_dispth { ! script "killall -0 dispatcher" ! interval 2 ! weight 2 !} vrrp_instance VI_1 { #定义VRRP热备实例 state MASTER #热备状态,MASTER(主);SLAVE(从);BACKUP(备份) interface eth1 #承载VIP地址的物理接口 virtual_router_id 50 #虚拟路由器的ID号,组内保存一致 priority 100 #优先级,数值越大优先级越高。 advert_int 1 #主备之间的通告间隔秒数(心跳频率) authentication { #认证信息,每个热备组保持一致 auth_type PASS #认证类型,主备切换时的验证 auth_pass 1111 #密码字串 } ! track_script { ! chk_dispth !} virtual_ipaddress { #指定漂移地址(VIP),可以有多个 116.93.71.66 #HA 虚拟 ip,可加多个 } } virtual_server 115.92.70.65 8001 { #虚拟服务器地址(VIP)、端口 delay_loop 6 #健康检查的间隔时间(秒) lb_algo rr #lvs 调度算法,这里使用轮询 lb_kind DR #lvs 负载均衡机制,这里使用直连路由 persistence_timeout 50 #同一IP连接50秒内被分配到同一台服务器 protocol TCP #用 TCP 协议检查 realserver 状态 real_server 192.168.53.12 8001 { #第一个WEB节点的地址、端口 weight 1 #节点的权重 TCP_CHECK { #健康检查方式 connect_port 8001 #检查的目标端口 connect_timeout 3 #故障重试秒数(即连接超时) nb_get_retry 3 #重试延迟(即重试次数) delay_before_retry 3 #重试间隔(秒) } } ! real_server 192.168.53.9 8001 { #第二个WEB节点的地址、端口 ! weight 1 ! TCP_CHECK { ! connect_port 8001 ! connect_timeout 3 ! nb_get_retry 3 ! delay_before_retry 3 ! } ! } }
[ root@keepalived ]ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 115.92.70.65:8001 rr persistent 50 -> 192.168.53.12:8001 Route 1 10 0
这里可以看到IP可以正常的漂移。
如果有备机keepalived,配置文件修改下
state BACKUP priority 99
基本这样就可以了。
如果你需要master 断了之后不抢占回资源,导致一些正常的链接断掉
master keepalived 需要修改下配置
state BACKUP #代替master nopreempt #不抢占资源,意思就是它活了之后也不会再把主抢回来,备机不需要设置该项
realserver上操作,更改一些内核参数,支持lvs
每台realserver都要操作
[root@MonitorANDBack ~]$ cat keepalive_vip.sh #!/bin/bash # # Script to start LVS DR real server. # description: LVS DR real server # . /etc/rc.d/init.d/functions VIP=115.92.70.65 #VIP地址 host=`/bin/hostname` #定义host变量 case "$1" in start) #start的时候设置本机arp不被外部主机解析 # Start LVS-DR real server on this machine. /sbin/ifconfig lo down /sbin/ifconfig lo up echo 1 > /proc/sys/net/ipv4/conf/default/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/default/arp_announce 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 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up #配置vip在lo:0,并且设置广播地址和子网掩码,此处使用32位是保证此vip不能与其他地址通信。 /sbin/route add -host $VIP dev lo:0 #增加路由 ;; stop) #stop的时候恢复到系统的初始化arp参数 # Stop LVS-DR real server loopback device(s). /sbin/ifconfig lo:0 down echo 0 > /proc/sys/net/ipv4/conf/default/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/default/arp_announce 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 ;; status) # Status of LVS-DR real server. islothere=`/sbin/ifconfig lo:0 | grep $VIP` isrothere=`netstat -rn | grep "lo:0" | grep $VIP` if [ ! "$islothere" -o ! "isrothere" ];then # Either the route or the lo:0 device # not found. echo "LVS-DR real server Stopped." else echo "LVS-DR real server Running." fi ;; *) # Invalid entry. echo "$0: Usage: $0 {start|status|stop}" exit 1 ;; esac
因为一些工作原因不贴图了,不过确实可以获取到客户端的真实IP。并且对keepalived也加深了点理解。
本文出自 “孜孜不倦的学习着...” 博客,转载请与作者联系!
标签:keepalived lvs
原文地址:http://jonyisme.blog.51cto.com/3690784/1676901