设为首页 收藏本站
查看: 771|回复: 0

[经验分享] lvs+keepalived使用总结

[复制链接]

尚未签到

发表于 2018-12-30 09:55:58 | 显示全部楼层 |阅读模式
一、lvs简介和推荐阅读的资料二、lvs和keepalived的安装三、LVS VS/DR模式搭建四、LVS VS/TUN模式搭建五、LVS VS/NAT模式搭建六、keepalived多种real server健康检测实例七、lvs持久性工作原理和配置八、lvs数据监控九、lvs+keepalived故障排除一、lvs简介和推荐阅读的资料
  学习lvs+keepalived必须阅读的三个文档。
  1、  《keepalived权威指南》
  2、  《lvs手册》
  3、  《Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN》
  这三个文档是官方文档,介绍了大部分原理和基础知识。下面我主要记录一些使用的案例,方便查阅。
  他们负责什么工作?
  在lvs+keepalived环境里面,lvs主要的工作是提供调度算法,把客户端请求按照需求调度在real服务器,keepalived主要的工作是提供lvs控制器的一个冗余,并且对real服务器做健康检查,发现不健康的real服务器,就把它从lvs集群中剔除,real服务器只负责提供服务。
二、lvs和keepalived的安装
  环境规划
  2*(lvs+keepalived服务器)+n*real-server,一般lvs+keepalived是这样的架构。
  开始安装
  1、  下载软件包
  在http://www.linuxvirtualserver.org/ 下载lvs的软件包
  在http://www.keepalived.org/ 下载keepalived软件包
  2、先编译安装lvs,再安装keepalived,安装lvs需要内核源码
  下载lvs源码的时候,一定要选择你内核版本对应的源码包。
# uname  -r  
2.6.18-164.el5PAE
  
#yum install kernel-devel -y  //安装内核源码包
  
#ln -s /usr/src/kernels/2.6.18-164.el5PAE-i686/ /usr/src/linux
  
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz  //                                                ipvsadm包就是lvs软件包,别觉得名字不一样
  
# tar -zxvf ipvsadm-1.24.tar.gz
  
# cd ipvsadm-1.24
  
#make && make install
  检查lvs是否安装成功:
  #ipvsadm //查看是否有输出
  #lsmod | grep ip_vs   //如果ipvsadm有输出,那么使用这个命令查看是否加载ip_vs模块,如果加载,那么lvs算安装成功。
  2、  编译安装keepalived,一定在安装完lvs以后在安装keepalive
#wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz //不建议选择最新的版本  
#tar -zxvf keepalived-1.1.15.tar.gz
  
#cd keepalived-1.1.15
  
#./configure --prefix=/  --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/linux/
  
Keepalived version       : 1.1.15
  
Compiler                 : gcc
  
Compiler flags           : -g -O2
  
Extra Lib                : -lpopt -lssl -lcrypto
  
Use IPVS Framework       : Yes
  
IPVS sync daemon support : Yes
  
Use VRRP Framework       : Yes
  
Use LinkWatch            : No
  
Use Debug flags          : Nod
  看见如上输入,注意yes和no的值,如果一样,证明配置成功,如果lvs为no,那么证明你的lvs没有安装成功,需要从新安装lvs再安装keepalived。
#make && make install  如果没有报错,那么就安装成功了,检查一下是否生成了keepalived命令。
三、LVS VS/DR模式搭建
  环境介绍
  主机IP
  角色
  安装软件
  122.225.32.134
  Lvs+keepalived MASTER
  Ipvsadm keepalived
  122.225.32.135
  Lvs+keepalived BACKUP
  Ipvsadm keepalived
  122.225.32.136
  Real server
  Lvs_real脚本
  122.225.32.137
  Real server
  Lvs_real脚本
  122.225.32.142
  VIP
  注意:所有机器都在一个交换机,并且在一个网段。
  1、在134和135上安装ipvsadm和keepalived软件。
  2、修改keepalived的配置文件
  122.225.32.134
# cat /etc/keepalived/keepalived.conf  
! Configuration File for keepalived
  
global_defs {
  notification_email {
  lr@isadba.com
  }
  notification_email_from lvs@isadba.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
  
}
  
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 150
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  122.225.32.142
  }
  
}
  
virtual_server 122.225.32.142 80 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  nat_mask 255.255.255.0
  persistence_timeout 0             //此值为0,主要是为了方便测试,每次刷新页面结果会不一样
  protocol TCP
  real_server 122.225.32.136 80{
  weight 1
  TCP_CHECK {
  connect_port    80
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  real_server 122.225.32.137 80{
  weight 1
  TCP_CHECK {
  connect_port    80
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  
}
  122.225.32.135
  和122.225.32.134相比,值需要删除state MASTER 和 修改priority的值小于master的。
  real server
  在所有real server上添加下面脚本,名执行# cat  /sbin/lvs_real
#!/bin/bash  
#description:start realserver
  
vip=122.225.32.157
  
source /etc/rc.d/init.d/functions
  
case $1 in
  
start)
  echo "Start Realserver"
  /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
  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
  
;;
  
stop)
  echo "Stop Realserver"
  /sbin/ifconfig lo:0 down
  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 "Usage: $0 (start | stop)"
  
exit 1
  
esac
  执行脚本以后,使用ip add命令查看lo接口是否添加了虚拟ip地址。
  当然,real server上面需要安装http服务,并启动,在index.html里面添加自己的IP地址,方便客户端访问时候辨别访问的是哪个主机。
  3、配置完成以后,开始测试:
  在122.225.32.134和122.225.32.135上使用ip add检查,虚拟IP应该配置在134上面。
  测试1{主要测试lvs}:访问虚拟IP是否可以访问真实服务器,是否轮询real server
  在master上使用 ipvsadm命令查看lvs状态。
# ipvsadm  
IP Virtual Server version 1.2.1 (size=4096)
  
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
TCP  122.225.32.142:http rr
  -> 122.225.32.137:http          Route   1      0          0
  -> 122.225.32.136:http          Route   1      0          0
  在客户端访问虚拟IP 122.225.32.142,看是否可以访问。每次刷新,应该会换一个real server。访问数次后,通过ipvsadm观察lvs状态。
# ipvsadm  
IP Virtual Server version 1.2.1 (size=4096)
  
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
TCP  122.225.32.142:http rr
  -> 122.225.32.137:http          Route   1      0          6
  -> 122.225.32.136:http          Route   1      0          6
  测试2{主要测试keepalived}:lvs服务器的HA,当keepalived master挂掉后,keepalived backup会不会接管虚拟IP。
  关闭master主机上的keepalived进程。
  在backup上ip add查看是否添加虚拟IP,通过/var/log/message查看相关转换日志。
  测试3{测试backup的lvs}:使用客户端访问现在虚拟ip,查看是否一切正常
  测试完成后,开启master的keepalived进程,等虚拟ip转移到master以后,在从客户端访问,查看是否存在问题。
四、LVS VS/TUN模式搭建
  环境介绍
  主机IP
  角色
  安装软件
  122.225.32.134
  Lvs+keepalived MASTER
  Ipvsadm keepalived
  122.225.32.135
  Lvs+keepalived BACKUP
  Ipvsadm keepalived
  122.225.32.155
  Real server
  122.225.32.156
  Real server
  122.225.32.142
  VIP
  注意:虚拟ip,master和backup在同意网段和交换机,realserver在不同网段,但是同属于外网IP
  1、在134和135上安装ipvsadm和keepalived软件。
  2、修改keepalived的配置文件
  122.225.32.134
# cat /etc/keepalived/keepalived.conf  
! Configuration File for keepalived
  
global_defs {
  notification_email {
  lr@isadba.com
  }
  notification_email_from lvs@isadba.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
  
}
  
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 150
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  122.225.32.142
  }
  
}
  
virtual_server 122.225.32.142 80 {
  delay_loop 6
  lb_algo rr
  lb_kind TUN
  nat_mask 255.255.255.0
  persistence_timeout 0
  protocol TCP
  real_server 122.225.32.155 80{
  weight 1
  TCP_CHECK {
  connect_port    80
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  real_server 122.225.32.156 80{
  weight 1
  TCP_CHECK {
  connect_port    80
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  
}
  122.225.32.135
  和122.225.32.134相比,值需要删除state MASTER 和 修改priority的值小于master的。
  real server
  在所有real server上添加下面脚本,名执行。
# cat /sbin/lvs_real_tun  
#!/bin/sh
  
# description: Config realserver tunl port and apply arp patch
  
VIP=122.225.32.142
  
. /etc/rc.d/init.d/functions
  
case $1 in
  
start)
  
echo "Tunl port starting"
  
ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
  
/sbin/route add -host $VIP dev tunl0
  
echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
  
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
  
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
  
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
  
sysctl -p
  
;;
  
stop)
  
echo "Tunl port closing"
  
ifconfig tunl0 down
  
echo "1" > /proc/sys/net/ipv4/ip_forward
  
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
  
;;
  
*)
  
echo "Usage: $0" {start|stop}
  
exit 1
  
esac
  3、配置完成以后,开始测试:
  测试方法和DR方法一样。
五、LVS VS/NAT模式搭建
  环境介绍
  主机IP
  角色
  安装软件
  122.225.32.134
  Lvs+keepalived MASTER
  Ipvsadm keepalived
  122.225.32.135
  Lvs+keepalived BACKUP
  Ipvsadm keepalived
  10.1.1.9
  Real server
  Lvs_real脚本
  10.1.1.10
  Real server
  Lvs_real脚本
  122.225.32.142
  VIP eth0
  外网虚拟IP
  10.1.1.118
  VIP eth1
  内网虚拟IP
  注意:所有机器都在一个交换机,并且在一个网段,LVS服务器端最好开启数据包转发net.ipv4.ip_forward。
  1、在134和135上安装ipvsadm和keepalived软件。
  2、修改keepalived的配置文件
  注意:这里由于需要内外网IP的同时漂移,所以需要用到vrrp同步组,并且需要同时开启两个vrrp实例。
  122.225.32.134
  经过上面的配置,大家应该比较熟悉了,相对于TUN和DR模式,NAT的配置文件主需要做一下修改。
! Configuration File for keepalived  
global_defs {
  notification_email {
  lr@isadba.com
  }
  notification_email_from lvs@isadba.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
  
}
  
vrrp_sync_group G1 {
  group {
  VI_1
  VI_2
  }
  
}
  
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 150
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  122.225.32.142
  }
  
}
  
vrrp_instance VI_2 {
  state MASTER
  interface eth1
  virtual_router_id 51
  priority 150
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  10.1.1.118
  }
  
}
  
virtual_server 122.225.32.142 80 {
  delay_loop 6
  lb_algo rr
  lb_kind NAT
  nat_mask 255.255.255.0
  persistence_timeout 0
  protocol TCP
  real_server 10.1.1.251 80{
  weight 1
  TCP_CHECK {
  connect_port    80
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  real_server 10.1.1.8 80{
  weight 1
  TCP_CHECK {
  connect_port    80
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  
}
  122.225.32.135
  和122.225.32.134相比,值需要删除state MASTER 和 修改priority的值小于master的。
  real server
  10.1.1.9和10.1.1.10的网关需要指定的lvs的内网虚拟IP也就是10.1.1.118,不需要其他设置。
六、keepalived多种real server健康检测实例
  keepalived对lvs的real server检测方式主要有以下几种,HTTP_GET,SSL_GET,TCP_CHECK,SMTP_CHECK,MISC_CHECK.
  其中TCP_CHECK是最常用的方式,一般内容在keepalived手册中都可以查到,值得提一下的就是关于digest和genhash的用法。
HTTP_GET | SSL_GET {  
url {
  
path /
  
digest  ##genssh工具算出的。
  
status_code 200
  
}
  
connect_port 80
  
bindto
  
connect_timeout 10
  
nb_get_retry 3
  
delay_before_retry 2
  
}
  这里需要注意的就是digest的值如何算,一般在安装keepalived后,会生成一个genhash的工具。
  可以使用
  #genhash -h 查看帮助
  常见的使用方法如下
# genhash  -s 10.1.1.8 -p 80 -u index.html 如果你是ssl连接,需要加 -S 参数,算出的值贴到配置文件中就可以了。七、lvs持久性工作原理和配置
  一、LVS持久连接技术
  lvs的持久性连接有两方面。
  1、把同一个client的请求信息记录到lvs的hash表里,保存时间使用persistence_timeout控制,单位为秒。persistence_granularity 参数是配合persistence_timeout的,在某些情况特别有用,他的值是子网掩码,表示持久连接的粒度,默认是255.255.255.255,也就是单独的client ip,如果改成,255.255.255.0就是client ip一个网段的都会被分配到同一个real server。
  2、一个连接创建后空闲时的超时时间,这个时间为3种
  a、tcp的空闲超时时间
  b、lvs收到客户端tcp fin的超时时间
  c、udp的超时时间
  如何查看这些值?
  # ipvsadm  //可以查看连接空闲的超时时间,红色标记。
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  122.225.32.142:http rrpersistent 10
  -> 122.225.32.137:http          Route   1      0          1
  -> 122.225.32.136:http          Route   1      0          0
  # ipvsadm -l –timeout  //查看tcp tcpfin udp的超时时间
  Timeout (tcp tcpfin udp): 900 120 300
  他们是如何工作的?
  我们通过
  # ipvsadm -Lcn
  IPVS connection entries
  pro expire state       source             virtual            destination
  TCP 00:57 NONE        110.184.96.173:0   122.225.32.142:80  122.225.32.136:80
  TCP 01:57  FIN_WAIT    110.184.96.173:54568 122.225.32.142:80  122.225.32.136:80
  当一个client访问vip的时候,ipvs或记录一条状态为NONE的信息,红色的值的初始值是persistence_timeout的值,然后根据时钟主键变小,在以下记录存在期间,同一client ip连接上来,都会被分配到同一个后端。
  FIN_WAIT的值就是tcp tcpfin udp的超时时间,当NONE的值为0时,如果FIN_WAIT还存在,那么NONE的值会从新变成60秒,再减少,直到FIN_WAIT消失以后,NONE才会消失,只要NONE存在,同一client的访问,都会分配到统一real server。
  如何设置这些值?
  persistence_timeout可以通过以下两种方法设置
  1、  ipvsadm -A -t 192.168.20.154:80 -s rr -p 60
  注意:上面命令中红色标记的80端口,表示同一客户端访问服务器的80端口,会被定义到同一个real server,如果把80端口改为0,那么同一客户端访问服务器的任何服务都会被转发到同一real server。
  2、修改keepalived配置文件在虚拟服务器配置下面加入 persistence_timeout 60
  tcp tcpfin udp的配置
  #ipvsadm –set tcp tcpfin udp
  # ipvsadm –set 120 50 50 //实例
  建议:tcpfin的值最好小于persistence_timeout的值,这样比较方便计算。
  lvs持久性参考资料:
  http://www.linuxvirtualserver.org/docs/persistence.html
  二、防火墙标记
  http://lymrg.blog.运维网.com/1551327/684681
  三、conn_syncd
  lvs负载调度器在进行切换的时候,还是会影响服务的,因为备用的调度器上没有已经建立的连接信息,当这些已经建立的连接通过备用的调度器的时候,连接会被reset掉,从而导致连接中断,这个时候就该conn_syncd上场了。详细信息请参见(http://www.linuxvirtualserver.org/docs/sync.html),lvs中文手册也提到过这个问题。
  解决方案:
Here is simple intructions to use IPVS connection synchronization. On the primary load balancer, run  
#ipvsadm --start-daemon=master --mcast-interface=eth0
  
On the backup load balancers, run
  
#ipvsadm --start-daemon=backup --mcast-interface=eth0
  
To stop the daemon, run
  
#ipvsadm --stop-daemon
  注意:这个命令需要手工启用,并且如果主lvs挂掉,切换到备用的时候,连接信息是同步的,但是主恢复,抢占vip后,连接信息是不会被反同步回去的。配置不抢占是使用nopreempt,只能配置在backup状态的主机,并且优先级必须比另外一台高,也就是配置在主lvs上,但是主lvs不能配置state master值。
八、lvs数据监控
  可以使用lvs-rrd工具和cacti来监控,具体请google。
九、lvs+keepalived故障排除



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657476-1-1.html 上篇帖子: (2)LVS+Keepalived+nginx高可用负载均衡架构原理及配置 下篇帖子: LVS+Keepalived 介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表