徐冬丽 发表于 2015-9-4 08:37:15

Keepalived配置流程

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
TCP220.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
TCP220.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]
查看完整版本: Keepalived配置流程