2018-10-16 直播课堂笔记
1.keepalived 配置文件详解
下面是配置文件的一张结构图,每个节点都有相应的解析。
第一部分:全局定义块
1、email通知。作用:有故障,发邮件报警。
2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。
3、花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
[email protected]
}
notification_email_from [email protected] #指定发件人
smtp_server localhost #指定smtp服务器地址
smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
第二部分:vrrp_sync_group作用:确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些? 实例组group{}至少包含一个vrrp实例
vrrp_sync_group VG_1{ #监控多个网段的实例
group {
VI_1 #实例名
VI_2
......
}
notify_master /path/xx.sh #指定当切换到master时,执行的脚本
netify_backup /path/xx.sh #指定当切换到backup时,执行的脚本
notify_fault "path/xx.sh VG_1" #故障时执行的脚本
notify /path/xx.sh
smtp_alert #使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
}
第三部分:vrrp_instance,实例名出自实例组group所包含的那些名字。
vrrp_instance VI_1 {
state BACKUP #指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决
定
interface eth0 #设置实例绑定的网卡
dont_track_primary #忽略vrrp的interface错误(默认不设置)
track_interface{ #设置额外的监控,里面那个网卡出现问题都会切换
eth0
eth1
}
mcast_src_ip #发送多播包的地址,如果不设置默认使用绑定网卡的primary ip
garp_master_delay #在切换到master状态后,延迟进行gratuitous ARP请求
virtual_router_id 50 #VPID标记
priority 99 #优先级,高优先级竞选为master
advert_int 1 #检查间隔,默认1秒
nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
preempt_delay #抢占延时,默认5分钟
debug #debug级别
authentication { #设置认证
auth_type PASS #认证方式
auth_pass 111111 #认证密码
}
virtual_ipaddress { #设置vip
192.168.202.200
}
}
1.2 将keepalived日志单独配置
修改/etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"
[[email protected] log]# vim /etc/sysconfig/keepalived
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp -P Only run with VRRP subsystem.
# --check -C Only run with Health-checker subsystem.
# --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
# --dump-conf -d Dump the configuration data.
# --log-detail -D Detailed log messages.
# --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON)
#
KEEPALIVED_OPTIONS="-D -d -S 0"
在/etc/rsyslog.conf 末尾添加 配置日志路径
//在最后增加一行
[[email protected] log]# vim /etc/rsyslog.conf
local0.* /var/log/keepalived.log
重启日志记录服务
[[email protected] etc]# systemctl restart rsyslog
重启keepalived,并查看日志
[[email protected] log]# systemctl restart keepalived
[[email protected] log]# tail keepalived.log
Oct 16 22:55:07 knightlai01 Keepalived_healthcheckers[15366]: TCP connection to [192.168.139.125]:80 failed.
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:10 knightlai01 Keepalived_healthcheckers[15366]: TCP connection to [192.168.139.170]:80 failed.
Oct 16 22:55:10 knightlai01 Keepalived_healthcheckers[15366]: Check on service [192.168.139.170]:80 failed after 1 retry.
Oct 16 22:55:10 knightlai01 Keepalived_healthcheckers[15366]: Removing service [192.168.139.170]:80 from VS [192.168.139.200]:80
2.配置通知邮件为第三方邮件
安装Postfix :
yum install postfix mail cyrus-sasl-* -y
修改postsfix配置文件 /etc/postfix/main.cf(postfix主要配置文件)
在其末尾添加以下内容
#指定默认的邮件发送服务器
relayhost = [smtp.163.com]:25
#**sasl认证
smtp_sasl_auth_enable = yes
#指定sasl密码配置文件
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
#非匿名登录smtp_sasl_security_options = noanonymous
#指定认证类型 (提示:需要yum安装cyrus-sasl-*组件,否则发邮件时会报错:no mechanism available)
smtp_sasl_type = cyrus
#linux用户与发件人的对应关系配置文件
sender_canonical_maps = hash:/etc/postfix/sender_canonical
编辑 /etc/postfix/sasl_passwd(邮箱账号和密码文件,每行一个。 创建好后需要使用postmap命令使配置文件生效)
添加以下内容
[smtp.163.com]:25 [email protected]:password
编辑 /etc/postfix/sender_canonical(linux用户和发件人对应关系,每行一个)
root [email protected]
将文本文件转换为hash格式的查找表文件。
#postmap /etc/postfix/sasl_passwd
#postmap /etc/postfix/sender_canonical
重启postfix:
service postfix restart
至此postfix设置完毕,测试keepalived即可正常发送报警邮件。
3.监控nginx脚本
脚本一:
#!/bin/bash
#description:check nginx service
run=`ps -C nginx --no-header | wc -l`
if [ $run -eq 0 ]
then
/etc/rc.d/init.d/nginx start
sleep 3
fi
脚本二:
#!/bin/bash
#description:check nginx service
count=0
for (( k=0; k<2; k++ ))
do
check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost/index.html -o /dev/null )
if [ "$check_code" != "200" ]; then
count=$(expr $count + 1)
sleep 3
continue
else
count=0
break
fi
done
if [ "$count" != "0" ]; then
/etc/init.d/nginx start
exit 1
else
exit 0
fi
4.LVS3种模式
4.1LVS 三种工作模式的优缺点比较
一、Virtual server via NAT(VS-NAT)
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。
解决办法:即使是是负载均衡器成为整个系统的瓶颈,如果是这样也有两种方法来解决它。一种是混合处理,另一种是采用Virtual Server via IP tunneling或Virtual Server via direct routing。如果采用混合处理的方法,将需要许多同属单一的RR DNS域。你采用Virtual Server via IP tunneling或Virtual Server via direct routing以获得更好的可扩展性。也可以嵌套使用负载均衡器,在最前端的是VS-Tunneling或VS-Drouting的负载均衡器,然后后面采用VS-NAT的负载均衡器。
二、Virtual server via IP tunneling(VS-TUN)
我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持"IP Tunneling"(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。
三、Virtual Server via Direct Routing(VS-DR)
优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36、2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上
4.2LVS调度算法
在内核中的连接调度算法上,IPVS已实现了以下八种调度算法:
- 轮叫调度(Round-Robin Scheduling)
- 加权轮叫调度(Weighted Round-Robin Scheduling)
- 最小连接调度(Least-Connection Scheduling)
- 加权最小连接调度(Weighted Least-Connection Scheduling)
- 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
- 目标地址散列调度(Destination Hashing Scheduling)
- 源地址散列调度(Source Hashing Scheduling)
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
一般应用场景 | 常用调度算法 |
---|---|
一般的网络服务,如 http,mail,mysql | 基本轮训、加权最小连接、加权轮训 |
防火墙集群 | 源地址散列调度SH和目标地址散列调度DH |
web cache和DB cache | 局部最小、带复制的局部最小 |
5. arp_ignore 与arp_announce
在搭建LVS集群的DR模式时,我们需要修改real server的arp_ignore和arp_announce这两个参数。修改这两个参数的主要目的是,当客户端向VIP发送请求时,确保该请求发送至Director上的VIP,而不是Real Server上的VIP。下面就介绍下这两个参数不同的值代表的含义。
arp_ignore参数:
设定请求的目标地址为本地ip时,对其arp的查询作不同的应答模式。默认有8个值,我们只使用2个。
arp_ignore为0时,表示无论哪块网卡收到arp查询请求,只要本机有此mac地址的网卡,就给予回应。
arp_ignore为1时,表示只有请求的mac地址是自己的网卡给予回应。比如一台服务器有两块网卡,其中的一块网卡收arp请求,但是请求的mac是本机的另一块网卡。那么这块网卡就一定不会作出应答。
3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4~7:预留。
8:不回应所有的arp请求。
arp_announce参数:
设定了网卡在向外部宣告自己IP-MAC时的级别。有3个值。
arp_announce为0时,表示无论哪块网卡收到了arp的请求,只要发现本机有请求的mac,就会响应。
arp_announce为1时,表示尽量避免响应ARP请求中MAC不是本网卡的。如一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就尽量避免响应。
arp_announce为2时,表示总是使用最合适的网卡来响应。一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应。