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

[经验分享] 用keepalived来lvs配置及其问题初汇

[复制链接]

尚未签到

发表于 2015-12-24 10:55:15 | 显示全部楼层 |阅读模式
1 配置:普通lvs配置复杂,日志信息少,涉及的软件多,出错可能大和出现故障排查麻烦,跟新停滞,官方文档有错误。
        到了现今第3方的配置方法出现解决了以上大部分问题.
        于2011年4月将采用keepalived的方法,一次性成功配置lvs分发web服务的情况总结如下:
        
     a. 拓扑:
     b. ip规划:
        LVS-DR-Master        222.211.74.44      
        LVS-DR-BACKUP        222.211.74.43      
        LVS-DR-VIP           222.211.74.42      
        WEB1-Realserver      222.211.74.36      
        WEB2-Realserver      222.211.74.37
        WEB3-Realserver      222.211.74.38      
        WEB4-Realserver      222.211.74.39
        WEB4-Realserver      222.211.74.40
            
        GateWay              222.211.74.1

    c.  安装和配置网上多就不写了,只是注意现在只有1.1.21之前的版本编译能顺利通过
        dr方式的主配置文件是:
        [iyunv@LVS-LB1 ~]# cat /etc/keepalived/keepalived.conf
        
        #-----------------------------------------------------------------
        #Configuration File for keepalived
        global_defs {
            router_id mllvs1              #注意:这个不是唯一是标识,主辅可以一样                     
                     }
        #-----------------------------------------------------------------
        vrrp_instance VI_1       {
             state MASTER              #注意:这是唯一,辅助服务器改成:    BACKUP
             priority 200              #注意:这是唯一,辅助服务器改成不同的数值:100
            #state BACKUP
            #priority 100
        
            #interface for inside_network, bound by vrrp
             interface bond0           #注意:指定vrrp的网卡
            #interface eth2
        
            #Ignore VRRP interface faults (default unset)
            #dont_track_primary
        
            #Binding interface for lvs syncd
             lvs_sync_daemon_interface bond0  #注意:指定keepalived的同步网卡
            #lvs_sync_daemon_interface eth2
            #lvs_sync_daemon_interface eth2
            virtual_router_id 20              #注意:这是唯一,主辅都一样
            advert_int 1
        
            authentication {
                auth_type PASS
                auth_pass 7890                #注意:这2行是唯一,主辅都一样
                            }
        
            virtual_ipaddress {
                #Web
                 222.211.74.44/27 brd 222.211.74.255 dev bond0 label bond0:1
                 
                #注意:不是必需,设置后服务起来后有虚网卡出现便于检查。
                                }
                                               } # End vrrp_instance VI_1
        
        #-----------------------------------------------------------------
        # Web APP Server
        virtual_server 222.211.74.42 80 {
            delay_loop 6              #注意:每隔10秒查询realserver状态
            lb_algo wrr               #注意:指定lvs的负载算法
            lb_kind DR                #注意:指定lvs的负载方式
            persistence_timeout 120   #注意:同一IP的连接60秒内被分配到同一台realserver
            protocol TCP              #注意:用TCP协议检查realserver状态
        
           real_server 222.211.74.36 80 {
                weight 2                      #注意:权重为2
                TCP_CHECK {                     
                    connect_timeout 10        #注意:10秒无响应超时
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 80
                          }
                                       } #end real_server 1
        
           real_server 222.211.74.37 80 {
                weight 3
                TCP_CHECK {
                    connect_timeout 10
                   nb_get_retry 3
                    delay_before_retry 3
                   connect_port 80
                          }
                                         } #end real_server 2
        
            real_server 222.211.74.38 80 {
                weight  3
                TCP_CHECK {
                    connect_timeout 10
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 80
                          }
                                         } #end real_server 3
        
            real_server 222.211.74.39 80 {
              weight 2
               TCP_CHECK {
                   connect_timeout 10
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 80
                         }
                                          } #end real_server 4
        
            real_server 222.211.74.40 80 {
                weight 2
                TCP_CHECK {
                    connect_timeout 10
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 80
                          }
                                          } #end real_server 5
        
        } # End virtual_server 222.211.74.44 80
#-----------------------------------------------------------------

   d. 确认服务:
    启动服务/etc/init.d/keepalived start后,在log里面有:
    cat /var/log/messages|grep -iE "Keepalived"
    Jun  7 10:57:05 bnet Keepalived: Starting VRRP child process, pid=10524
    Jun  7 10:57:05 bnet Keepalived_healthcheckers: Netlink reflector reports IP 222.211.74.44 added
    Jun  7 10:57:05 bnet Keepalived_healthcheckers: Netlink reflector reports IP 10.0.4.44 added
    Jun  7 10:57:05 bnet Keepalived_healthcheckers: Registering Kernel netlink reflector
    Jun  7 10:57:05 bnet Keepalived_healthcheckers: Registering Kernel netlink command channel
    Jun  7 10:57:05 bnet Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
    Jun  7 10:57:05 bnet Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.
    Jun  7 10:57:05 bnet Keepalived_vrrp: Configuration is using : 35660 Bytes
    Jun  7 10:57:05 bnet Keepalived_healthcheckers: Configuration is using : 17829 Bytes
    Jun  7 10:57:05 bnet Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
    Jun  7 10:57:05 bnet Keepalived_healthcheckers: Using LinkWatch kernel netlink reflector...
    Jun  7 10:57:06 bnet Keepalived_healthcheckers: Activating healtchecker for service [222.211.74.36:80]
    Jun  7 10:57:06 bnet Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(10,11)]
    Jun  7 10:57:06 bnet Keepalived_healthcheckers: Activating healtchecker for service [222.211.74.37:80]
    Jun  7 10:57:06 bnet Keepalived_healthcheckers: Activating healtchecker for service [222.211.74.38:80]
    Jun  7 10:57:06 bnet Keepalived_healthcheckers: Activating healtchecker for service [222.211.74.39:80]
    Jun  7 10:57:06 bnet Keepalived_healthcheckers: Activating healtchecker for service [222.211.74.40:80]
    Jun  7 10:57:07 bnet Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
    Jun  7 10:57:07 bnet Keepalived_healthcheckers: TCP connection to [222.211.74.40:80] failed !!!
    Jun  7 10:57:07 bnet Keepalived_healthcheckers: Removing service [222.211.74.40:80] from VS [222.211.74.42:80]
    Jun  7 10:57:08 bnet Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
    Jun  7 10:57:08 bnet Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
    Jun  7 10:57:08 bnet Keepalived_healthcheckers: Netlink reflector reports IP 222.211.74.42 added
    Jun  7 10:57:08 bnet Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 222.211.74.42
    Jun  7 10:57:08 bnet Keepalived_vrrp: Netlink reflector reports IP 222.211.74.42 added
    Jun  7 10:57:13 bnet Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 222.211.74.42

   d1在主服务器上应该有以下服务进程存在:
     root     10522     1  0 10:57 ?        00:00:00 keepalived -D
     root     10523 10522  0 10:57 ?        00:00:00 keepalived -D
     root     10524 10522  0 10:57 ?        00:00:00 keepalived -D
     root     10528     1  0 10:57 ?        00:00:00 [ipvs_syncmaster]

   d2在辅服务器上应该有以下服务进程存在:
   root      4649     1  0 11:11 ?        00:00:00 keepalived -D
   root      4650  4649  0 11:11 ?        00:00:00 keepalived -D
   root      4651  4649  0 11:11 ?        00:00:00 keepalived -D
   root      4662     1  0 11:11 ?        00:00:00 [ipvs_syncbackup]
   
   d3在主服务器上观察能看见lvs的分发比重是2:3:3:2,分发的连接数分别是200 600 580 180大致符合分发比重:
      # ipvsadm -ln
       IP Virtual Server version 1.2.1 (size=4096)
       Prot LocalAddress:Port Scheduler Flags
         -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
       TCP  222.211.74.42:80 wrr persistent 120
         -> 222.211.74.39:80             Route   2      200          190         
         -> 222.211.74.38:80             Route   3      600          610        
         -> 222.211.74.37:80             Route   3      580          570         
         -> 222.211.74.36:80             Route   2      180          160         
   d4在副服务器上能看见lvs的分发比重是2:3:3:2,分发的连接数由于没有提供服务所有的分发数为0:
                                          
   d5 在主服务器上用ifconfig观察能看见服务对应的虚网卡 eth0:1,而在副服务器上由于没有提供服务而没有对应的虚网卡出现
          eth0:1    Link encap:Ethernet  HWaddr 00:14:5E:32:7F:98  
          inet addr:222.211.74.42  Bcast:222.211.74.255  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:169 Memory:dcff0000-dd000000
   d6 lvs日志的观察:tail -f /var/log/messages
   
    e 注意:由于防火墙ipables和lvs在linux的内核中所在的位置相近,其官方也在文档中提出这2者之间可能会互相影响建议1台机器只用其一,
            所以我的环境中直接不启用iptables,其他基于内核的防火墙建议也这样,不启用,lvs的主机的安全由以下决定:
            1 系统关闭除了ssh和lvs以外的所有的有服务端口的服务
            2 ssh启用管理ip限制
    f realserver上要启用arp本地包不回应所以要修改内核参数:
         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
     lvs上不需要修改net.ipv4.ip_forward
            
2  测试  
     a 主副切换测试:
          vip是222.211.74.42,在222.211.74.x网外一直ping 222.211.74.42,这时在主上停止服务:/etc/init.d/keepalived stop
          这时能观察到ping会中断约6s后恢复,而且主服务器上的虚网卡消失,而对应的副服务器上出现虚网卡。
     b ab压力测试:
       前提:在dns服务器(或者测试发起服务器上)上做好www.abc.com解析到222.211.74.42
       ab -n 1000 -c 200  http://www.abc.com/   #用apache的ab发1000个总链接并发数是200的并发到www.abc.com
       这时在主服务器上能看见lvs的分发情况:ipvsadm -ln;业务在线情况:ipvsadm -lnc
      
3 常见问题及其处理:
      不能同步 原因:1是配置文件不一致, 2是lvs的内核模块软故障,处理:停止服务后rmmod后再启用服务即可
      不能切换 原因同上2个,还有就是主副网络不通,上层网络做了arp限制(如arp绑定等)
      不能转发 配置文件错误
      realserver宕掉后还分发: 配置文件错误 网络故障 lvs的内核模块软故障
      转发比重问题 监控中发现:1测试并发只能打在一台机器上,处理:取消行 #persistence_timeout 120即可
                               2正常分发情况下突然一个realserver的链接数突破权重的设置一直上升到平常多很多的状况
                                这时一般是针对web的并发测试发生或者攻击,这个分析web的log可以找到原因。
      疑问:3.1 keepalive或者lvs用那种手段探测realserver服务器的状态以支撑其调度算法?本质上lvs只是个调度器,没有在真实服务器上做数据采集与分析,
              猜测lvs只是以其算法来分发负载而不管负载的真实情况,即使keepalived有对真实服务器的健康检查而不是负载能力的检查。
         3.2 http://www.linuxvirtualserver.org/zh/lvs1.html和http: //www.linuxvirtualserver.org/zh/lvs4.html在算法的描述上不一致,互相矛盾的:例如关于wlc部分。   
4 调优:    net.ipv4.tcp_tw_recyle=1
        net.ipv4.tcp_tw_reuse=1
        net.ipv4.tcp_max_syn_backlog=8192
        net.ipv4.tcp_keepalive_time=1800
        net.ipv4.tcp_fin_timeout=30
        net.core.rmem_max=16777216
        net.core.wmem_max=16777216
        net.ipv4.tcp_rmem=4096 87380 16777216
        net.ipv4.tcp_wmem=4096 65536 16777216
        net.core.netdev_max_backlog=3000

5 下步再次利用建立lvs群集论坛

6 参考文档:
   基础:http://zh.linuxvirtualserver.org/
      http://zh.linuxvirtualserver.org/node/95
      http://www.linuxvirtualserver.org/zh/lvs1.html
      http://www.linuxvirtualserver.org/zh/lvs4.html
   调优:http://machael.blog.iyunv.com/829462/211587

运维网声明 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-155629-1-1.html 上篇帖子: 如何重定向Keepalived日志的输出路径 下篇帖子: LVS+KEEPALIVED+NAT详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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