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

[经验分享] Keepalived配置流程

[复制链接]

尚未签到

发表于 2015-9-4 08:37:15 | 显示全部楼层 |阅读模式
Keepalived配置流程

注意事项


  • 使用 Keepalived,主要是为了服务器的高可用性。
  • 当前线上的 Keepalived 主要使用 DR 模式。
  • 针对的主要服务是上传量小,下载量大的服务。

目的
  使用Keepalived的主要目的是2个:


  •   高可用性  * IP 地址主从备份,防止单点故障

  •   方便扩展  * 早期单台服务器的网络带宽有限,使用 Keepalived的DR模式,可以很容易的扩展服务器的可用带宽。


配置说明

全局定义
  主要是定义通知邮件地址和 lvs_id (lvs_id 在failover中会用到)

global_defs {
notification_email {
NNTP.org.163.sa.space@news.163.org
}
notification_email_from keepalived@lvszw2.space.163.org
smtp_server 127.0.0.1
smtp_connect_timeout 4
lvs_id BLOG_LVSZW2
}

vrrp实例定义
  定义一个vrrp实例(如果一个局域网内,有多个lvs,注意vrrp实例里面的 virtual_router_id 不要冲突)。

vrrp_instance VI_179 {
state BACKUP
interface eth0
virtual_router_id 179
priority 75
advert_int 1
smtp_alert
authentication {
auth_type AH
auth_pass keep@lived
}
virtual_ipaddress {
220.181.31.179/24
}
track_interface {
eth0
eth1
}
}


  •   state 可以设置为MASTER或者BACKUP,同时需要注意这个设置要和priority的设置对应。

  •   interface 指vrrp主要维护的端口,一般是指绑定 virtual_address 的网口。

  •   priority 数字越大,优先级越高。

  •   advert_int 表示协商间隔时间,一般默认是1 sec。

  •   authentication 是服务器间协商的认证色设置。

  •   smtp_alert 是说这个vrrp开启邮件报警。

  •   virtual_ipaddress 就是绑定到这个vrrp的虚拟ip。

  •   track_interface 设置检测的网口(下面实例配置中,如果eth0或者eth1 down掉,就会触发一次vrrp迁移)


virtual_server设置
  定义一个虚拟服务器设置。

virtual_server 220.181.31.179 80 {
delay_loop 8
lb_algo wrr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80
include conf.d/blog-china-tele.conf
}


  •   delay_loop 指server polling的延迟时间。

  •   lb_algo 指负责均衡的策略。主要有 rr|wrr|lc|wlc|lblc|sh|dh 。

  •   lb_kind 指服务器的负载均衡模式。主要有 NAT|DR|TUN 。

  3. protocol 当前只有TCP


  •   sorry_server 是指所以后端服务器全部挂掉的时候指向的服务器(主要是用于挂错误页之类的)。

  •   include 导入的是realserver的配置。


real_server
  定义一个后端的real_server。

real_server 172.17.0.7 80 {
weight 50
TCP_CHECK {
connect_port 80
connect_timeout 4
}
}


  •   weight 指权重,数字越大接受到的请求越多。

  •   TCP_CHECK 定义了对后端的检测参数


在线配置流程


  •   keepalived服务器要求

  •   keepalived主要要求服务器的网卡对小包转发性能
      推荐使用intel系列的网卡。如果是BC家的网卡,请注意高InPPS的数据。如果是早期的无多队列的网卡,一般InPPS最多在5w~7w间。BC家的网卡在高InPPS下会工作异常。在当前的网络环境下,推荐使用多队列的网卡。

  •   多队列网卡绑定,这个目前只能手工绑定。 提取中断列表脚本

    #!/bin/bash
    for i in `ls /proc/irq/*/eth*TxRx*`;do echo $i;done |sed -e s:\\/:\ :g|awk '{print "/"$1"/"$2"/"$3"/smp_affinity"}'

      然后手动生成类似

    echo "00000400" > /proc/irq/133/smp_affinity
    echo "00000800" > /proc/irq/134/smp_affinity
    echo "00001000" > /proc/irq/135/smp_affinity
    echo "00002000" > /proc/irq/136/smp_affinity
    echo "00004000" > /proc/irq/137/smp_affinity
    echo "00008000" > /proc/irq/138/smp_affinity
    ...

      这样的shell语句到/etc/rc.local。

  •   防火墙设置上开启对应的服务端口。

  •   sysctl调整

    fs.file-max = 3145728
    kernel.printk = 4 4 1 7
    kernel.shmmax = 1073741824
    net.ipv4.ip_local_port_range = 8192 65535
    net.ipv4.ip_nonlocal_bind = 1
    net.ipv4.netfilter.ip_conntrack_max = 1048576
    net.ipv4.tcp_max_tw_buckets = 1048576
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_rmem = 4096 87380 4120576
    net.ipv4.tcp_wmem = 4096 16384 4120576
  •   后端服务器设置

  •   开启对应的服务,确保上面的数据和当前在线的服务器一致。

  •   防火墙上开启对应的服务端口(如果是高版本的shorewall,注意ROUTE_FILTER=Keep)

  •   sysctl调整
      主要需要修改arp和rp_filter的设置。

    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.eth0.arp_announce = 2
    net.ipv4.conf.eth1.arp_announce = 2
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.eth0.arp_ignore = 1
    net.ipv4.conf.eth1.arp_ignore = 1
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.eth0.rp_filter = 0
    net.ipv4.conf.eth1.rp_filter = 0
    net.ipv4.conf.lo.rp_filter = 0
    net.ipv4.ip_local_port_range = 8192 65535
    net.ipv4.ip_nonlocal_bind = 1
    net.ipv4.netfilter.ip_conntrack_max = 4194304
    net.ipv4.tcp_max_tw_buckets = 1048576
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_rmem = 4096 87380 4120576
    net.ipv4.tcp_wmem = 4096 16384 4120576
  •   修改网络配置,创建 dummy0 设置,将 keepalived 的 virtual_ipaddress 绑定到dummy0上。

  •   添加后端服务器

  •   通知相关人员测试后端服务器

  •   修改 keepalived 的 realserver 配置

  •   如果是针对相册或者博客的 keepalived 服务器,那么请同时修改后端的 apache 的 rpaf 模块设置。

  •   apache 的 rpaf 配置上线后,再上线 keepalived 配置。

  •   再次通知相关人员观察线上情况。


Keepalived工具
  最主要的工具是ipvsadm。

ipvsadm -ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
-> RemoteAddress:Port
TCP  220.181.31.152:80                   8       74        0    14739        0
-> 172.19.0.56:80                      3       25        0     4343        0
-> 172.19.0.114:80                     3       24        0     5187        0
-> 172.19.0.133:80                     3       25        0     5208        0
TCP  220.181.31.153:80                   0        0        0        0        0
-> 172.19.0.56:80                      0        0        0        0        0
-> 172.19.0.114:80                     0        0        0        0        0
-> 172.19.0.133:80                     0        0        0        0        0

TroubleShoot


  • keepalive无法工作
  使用ipvsadmin检查是否有数据包转发到后端服务器。如果有,那么检查后端服务器的防火墙设置,sysctl设置和dummy0设置。如果没有,那么检查 virtual_ipaddress 是否正常,检查网卡中断是否正常。

延伸阅读文档
  Keepalived.conf
  smp_affinity说明
  

运维网声明 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-109213-1-1.html 上篇帖子: keepalived+haproxy-部署高可用负载均衡 下篇帖子: Redis+Keepalived高可用方案详细分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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