面试必考
keepalived的功能,脚本也能实现
keepalive,主要是有VRRP
基于IP(第3层网络层),port(第4层传输层),应用层(第7层),保证服务正常运行
master会定时给bakcup发广播包,不发了backup就认为master挂了,重新选举,这个只能检查本机,重启本机,要配合LVS才能均衡,
直接yum install -y keepalived ipvsadm
或者源码安装
yum install kernel kernel-devel popt-devel openssl-devel gcc gcc-c++ -y &&
wget http://www.keepalived.org/software/keepalived-1.2.1.tar.gz &&
tar -zxf keepalived-1.2.1.tar.gz && cd keepalived-1.2.1;
./configure --with-kernel-dir=/usr/src/kernels/2.6.32-696.1.1.el6.x86_64/
mkdir /etc/keepalived
\cp /usr/local/sbin/keepalived /usr/sbin/keepalived
\cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
\cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/keepalived
\cp -r /usr/local/etc/keepalived /etc/keepalived
cd /etc/keepalived
改conf文件如下,配置文件分三部分
第一部分全局配置,主要是改邮箱和路由ID,两个机器要一样
第二部分是配置虚拟IP,
第三部分写检查本机哪些服务
! Configuration File for keepalived #配置全局变量,全局主要是改邮件,发给谁、从哪里发
global_defs {
notification_email {
[email protected] #配置接收报警邮件
}
notification_email_from [email protected] #配置谁发邮件
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL #路由id
}
# VIP1 VRRP协议 Config这一段的配置就是生成虚拟路由器
vrrp_instance VI_1 {
state BACKUP #master和backup,比优先级更优先
interface eth0 #发广播包是用哪个网卡发
lvs_sync_daemon_inteface eth0
virtual_router_id 151 #两台的路由id是一样的
priority 100 #优先级
advert_int 5
nopreempt #不抢占,就选优先级高也不抢占,这条加或不加
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress { ##虚拟ip地址,特别重要,可以回车配多个
192.168.1.204
}
notify_master #当是matser执行这个脚本
notify_backup
}
##这里写检查本机什么服务,只能检查本机
virtual_server 192.168.1.204 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.104 3306 {
weight 100
notify_down /data/sh/mysql.sh #当down了就执行这个脚本
notify_up也可以
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查的端口的端口
}
}
}
然后重启/etc.init.d/keepalived restart
tail -fn 100 /var/log/message
如果没有IPVS这个模块,modprobe ip_vs加载这个模块
通过ip addr list 可以看到虚拟IP配在了eth0上
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查的端口的端口
}
1、上面是基于端口。基于2、应用:
注意:使用了脚本监控Nginx或者MYSQL,不需要虚拟服务器设置块,也就是端口检查块。
vrrp_script chk_nginx {
script "/data/script/nginx.sh" #监控服务脚本;
interval 2 #检测时间间隔(执行脚步间隔)
weight 2
}
#实例1
vrrp_instance VI_1 {
state MASTER #master和backup,比优先级更优先
interface eth0 #发广播包是用哪个网卡发
lvs_sync_daemon_inteface eth0
virtual_router_id 151 #两台的路由id是一样的
priority 100 #优先级
advert_int 5
nopreempt #不抢占,就选优先级高也不抢占,这条加或不加
authentication {
auth_type PASS
auth_pass 2222
}
#实例2
vrrp_instance VI_2 {
state BACKUP #master和backup,比优先级更优先
interface eth0 #发广播包是用哪个网卡发
lvs_sync_daemon_inteface eth0
virtual_router_id 152 #两台的路由id是一样的
priority 100 #优先级
advert_int 5
nopreempt #不抢占,就选优先级高也不抢占,这条加或不加
authentication {
auth_type PASS
auth_pass 2222
}
track_script { #以脚本为监控chk_nginx;
chk_nginx
}
virtual_ipaddress { #设置vip
192.168.111.188
}
}
#其中/data/script/nginx.sh里的内容:
#!/bin/bash
NUM=`ps -C nginx --no-header |wc -l`
if [ $NUM -eq 0 ];then
/etc/init.d/keepalived stop
sleep 30
/usr/local/nginx/sbin/nginx
/etc/init.d/keepalived start
fi
###
3、基于URL
把TCP_CHECK那部分改成
HTTP_GET{
url{ #检查url,可以指定多个
path /
digest ATM #检查后的摘要信息
status_code 200 #检查的返回状态码,
}
从上
把state改成backup,priority改成90,检查的服务器改成本机
然后就可以用LAP连虚拟服务器的mysql了
keepalived的核心:
当端口停了,执行脚本,down.sh
然后VIP才会切到从上
脚本内容:
/etc/init,d/keepalived stop
sleep 5
/etc/init,d/keepalived start
监控的服务 restart
从上也要有这个脚本
这个脚本要给o+x权限
互为主主
两个实例两个虚拟服务器,各一个VIP,互为主备,路由id不能一样
Heartbeat
两台机器必须要用网线连起来
LVS
基于IP实现负载均衡是目前负载调度器中效率最高的
有NAT,TUN,DR模式
有算法:RR(round-robin)、LC(least_connection)、W(weight)RR、WLC模式等(RR为轮询模式,LC为最少连接模式)
NAT方式:VIP所在主机可以为公网IP,进出都要做个地址转换,效率比较低。用户请求LVS到达director(主管),director将请求的报文的目标地址和端口改成后端的realserver地址和端口,请求到达realserver,realserver将数据返给director,director再把数据返给用户(两次请求都要经过director),访问量大的话director会成为瓶颈。后端不能超过20台。
DR原理(将VIP配在后端realserver上):IP为内网,用户请求LVS到达director,director将请求目标的MAC地址改成realserver的MAC地址,目标IP还是VIP,源IP还是用户IP,然后director将报文发送给realserver,realserver发现目标IP和MAC都是自己。如果用户跟realserver不在一个网段,则通过网关返回给用户,如果在同一网段,将请求直接返给用户。 效率最高,互联网企业。这个要求LVS和后端服务器在一个网络里,不然没法实现VIP配在后端realserver上。
TUN原理:跟DR类似,也是改变封装MAC地址,多了一层隧道加密,比DR效率略低,比NAT高。
DR模式,后端带几百台nginx
cd /usr/src/
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
版本不同需要的这个软件版本可能也不同
yum install kernel kernel-devel gcc gcc-c++ -y
ln -s /usr/src/kernels/2.6* /usr/src/linux
tar xzvf ipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make install
ipvsadm看安装成功没
参数说明:
-A 增加一台虚拟服务器地址。-D删除
-t 虚拟服务器提供的是tcp服务。
-s 使用的调度算法。
-a 在虚拟服务器中增加一台后端真实服务器。
-r 指定真实服务器地址。
-m 设置当前转发方式为NAT模式;-g为直接路由模式;-i 模式为隧道模式。
-w 后端真实服务器的权重。
LVS安装完毕之后,需要进行配置,配置的步骤有两步,第一步为定义端口服务,第二步为添加realserver后端服务。
ipvsadm -A -t 192.168.1.200:80 -s rr #添加VIP
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.103 -g -w 2
在后端realserver上,在回环地址上配上VIP
VIP=192.168.1.201
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
这样绑重启了就失效了
ipvsadm-save >/tmp/lvs.txt保存LVS配置
ipvsadm-restore
route -n
看网关
然后抑制ARP,不抑制的话所有赔了VIP的都可以响应了
客户端抑制ARP脚本,企业里客户端可能不止一个VIP,就把lo:0换成1 2 3 4
vim auto_realserver.sh
#!/bin/sh
#LVS Client Server
VIP=192.168.2.200
case $1 in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
exit 0
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
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 "RealServer Stoped OK"
exit 1
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
###
压测工具http-tools
ab -c 5000 -n 10000 http://192.168.1.200/
watch ipvsadm -L -n 可以实时看压测
keepalived+LVS或者脚本检查+LVS
服务端配置keepalived即可,两个LVS服务器。realserver客户端执行脚本
安装keepalived
写入配置文件
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state MASTER
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51
priority 100
advert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo wrr
lb_kind DR #这里配转发方式
# persistence_timeout 60 #这里配置会话保持时间
protocol TCP
real_server 192.168.1.102 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.103 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
################
realserver端
tcpdump -nn port 80 nn是显示网络地址
tcpdump -nn port 22 and host 192.168.0.116看本机有哪些连22端口的
LVS排错
ping网站域名,看能否解析到IP
登录LVS服务器,ipvsadm -Ln查看信息,tail -fn /var/log/messages看报错
看zabbix监控服务器有没有报警
看keepalived.conf配置文件有没有错误
看客户端的auto——realserver.sh脚本是否启动
看realserver有没有挂(nginx)
如果后端nginx能接收到LVS的请求,但是不返回,说明nginx端VIP没有起来
LVS、haproxy与nginx均衡区别
LVS是4层网络层,haproxy是又有7层又有4层,nginx是7层应用层
LVS优点
LVS抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,也保证了均衡器I/O的性能不会受到大流量的影响
LVS是专门的负载均衡软件,对任何应用都可以做负载均衡
工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,目前用的比较多的是lvs+keepalived,比较大型的用的多的是lvs+heartbeat
nginx的优点:
1:Nginx的高并发,同时能承载上万个并发连接;
2:nginx有充足的第三方功能模块的支持,主要通过upstream模块进行负载均衡;
3:nginx对网络的依赖较小,理论上只要Ping得通,网页访问正常,nginx就能连得通;
4:工作在网络的7层之上,可以针对http应用做一些分流的策略,它的正则规则比haproxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,nginx单凭这点可利用的场合就远多于lvs了。
nginx的缺点:
1:将Nginx当做反向代理时,负载均衡功能不是很好,对后端服务器的健康检查功能较弱;
2:nginx仅能支持http、https和email协议,这样就在适用范围上面小些,这个是它的缺点;
3:nginx只支持通过端口来检测,不支持通过url来检测。
keepalived+mysql
msyql主down机了,可以手动换成从的IP,也可以自动切换,用keepalived,heartbeat