1、keepalive
1.1概念
调度器的高可用
vip地址主备之间的切换,主在工作时,vip地址只在主上,主停止工作,vip漂移到备服务器
在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器
1、配优先级
2、配置vip和真实服务器
3、主备的id要一致
4、主备的id要区分
keepalive是专门为lvs打造的,但是不是为lvs专门服务的
keepalive也可以使用nginx、haproxy
keepalive+nginx实现高可用
1.2如何监测vip的漂移?
用一个监控的脚本,来监控nginx1的状态,如果nginx1挂了,nginx1的keepalive会停掉,vip漂移到nginx2上
nginx+keepalive实现主备切换,实验步骤:
关闭防火墙,安装keepalive
编写监控的脚本
vim check_nginx.sh
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi
重启keepalived,查看keepalived的状态
[root@nginx1 opt]# systemctl restart keepalived
[root@nginx1 opt]# systemctl status keepalived
给脚本赋权
[root@nginx1 opt]# chmod 777 check_nginx.sh
打开keepalived的配置文件
[root@nginx1 keepalived]# vim keepalived.conf
重启keepalived,查看状态
[root@nginx1 keepalived]# systemctl restart nginx
[root@nginx1 keepalived]# systemctl restart keepalived.service
暂停nginx,查看keepalived状态
将配置文件发送给nginx2
[root@nginx2 ~]# scp root@192.168.230.60:/etc/keepalived/keepalived.conf /etc/keepalived
编辑配置文件
[root@nginx2 ~]# scp root@192.168.230.60:/etc/keepalived/keepalived.conf /etc/keepalived
开启nginx1和keepalived
vip地址生成了
[root@nginx1 keepalived]# systemctl start nginx
[root@nginx1 keepalived]# systemctl start keepalived.service[root@nginx1 keepalived]# ip addr
重启nginx2和keepalived,没有生成vip地址
修改nginx1和2的访问页面
[root@nginx1 keepalived]# vim /usr/local/nginx/html/index.html
访问vip地址,只能访问nginx1,不会轮询
暂停nginx1,vip地址消失了,漂移到nginx2上,此时访问的是nginx2
恢复nginx1,开始keepalived,vip从nginx2漂移到nginx1上,此时访问的是nginx1
2、脑裂
2.1概念
HA高可用架构中的一个特殊现象,只要使用vip地址代理的冗余模式的高可用,都有可能出现脑裂的问题。
主和备同时都有vip地址
主和备无法确定各自的身份,同时出现了vip地址,两边都起来了,但是两边都无法使用。
2.2原因
1、keepalive的配置文件问题
2、心跳线(网线)断了,老化
3、网卡出了问题(硬件),ip地址配置冲突
4、防火墙的策略,iptables的策略,屏蔽了组播的地址广播,屏蔽了vrrp协议的报文
5、两台服务器的时间不同步也可能导致
6、其他的服务配置对心跳线的检测造成了干扰
2.3解决方法
1、进入keepalive的配置文件,查看哪一步的配置出现问题
2、查看服务器之间的网络连接是否正常,如果网线老化了,更换新的网线
3、检查硬件比如网卡是否正常,ip地址是否配置正确或者与其他地址冲突了
4、关闭防火墙,查看iptables的策略,vrrp协议的报文能否正常发送
5、保证两台服务器的时间同步,设置时间同步协议
6、检查其他服务配置是否有问题
3、Haproxy负载均衡
nginx:四层转发,七层转发(走的是用户态)
lvs:四层转发,走的是内核态
Haproxy:四层转发,七层转发
3.1Haproxy的作用和使用场景
3.1.1场景
用于高并发的web场景,可以支持一万个以上的并发请求,是高性能的tcp和http的负载均衡器
3.1.2工作原理
提供一个代理地址访问集群
3.2作用
1、进行四层和七层转发
2、支持https
3、Haproxy本身不自带缓存功能,请求当中添加cookie,使用缓存
4、支持主备切换(keepalive)
3.3特点
可靠性高,稳定性好
可以同时维护40000-50000个并发,单位时间内可以处理的最大请求数20000个
支持负载均衡算法,虽然不带缓存,但是可以支持会话保持
算法:rr wrr leastconn
3.4七层转发配置
安装test1的依赖环境
[root@localhost opt]# yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
将haproxy的安装包拖进来,解压
[root@localhost opt]# tar -xf haproxy-1.5.19.tar.gz
查看内核版本
[root@localhost haproxy-1.5.19]# uname -r
3.10.0-957.el7.x86_64
make,target使用的版本要大于linux.2.60以上的版本
[root@localhost haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64
安装
[root@localhost haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64
创建目录
[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy
复制haproxy.cfg
[root@localhost examples]# cp haproxy.cfg /etc/haproxy
修改配置文件
[root@localhost haproxy]# vim haproxy.cfg
1 # this config needs haproxy-1.1.28 or haproxy-1.2.1
2
3 global
4 log /dev/log local0 info
5 log /dev/log local1 notice
6 #log loghost local0 info
7 maxconn 4096
8 #最大连接数,推荐10240
9 #chroot /usr/share/haproxy
10 uid 99
11 gid 99
12 daemon
13 nbproc 6
15 #debug
18 defaults
19 #这里是默认参数配置,包含了连接配置、监听配置以及代理配置
20 log global
21 mode http
22 option httplog
23 option dontlognull
24 retries 3
26 redispatch
28 maxconn 2000
30 #contimeout 5000
31 #clitimeout 50000
40 #客户端超时时间
41 timeout server 1m
42 #服务端的超时时间
43 timeout http-keep-alive 10s
44 #默认长连接的超时时间
39 timeout client 1m
40 #客户端超时时间
41 timeout server 1m
42 #服务端的超时时间
43 timeout http-keep-alive 10s
44 #默认长连接的超时时间
45 timeout check 10s
46 #检查后端服务器的超时时间
47 #转发请求的设置,既可以是四层也可以是七层
48 #七层的配置
49 listen xy102 0.0.0.0:80
50 option httpchk GET /index.html
51 #设置转发请求的内容
52 balance static-rr
53 #轮询算法
54 server rs01 192.168.230.60:80 check inter 2000 fall 3 weight 2
55 server rs02 192.168.230.70:80 check inter 2000 fall 3 weight 3
56 #server指定真实服务器,rs01自定义后台服务器名称,check inter 2000启动对后端服务器进行检查,间隔是2000毫秒。fall 3连续3次检测不到认为失败
复制 haproxy.init,赋权
[root@localhost examples]# cp [root@localhost examples]# cp haproxy.init /etc/init.d/haproxy
[root@localhost examples]# chmod 777 /etc/init.d/haproxy
添加到管理服务中
[root@localhost examples]# chkconfig --add /etc/init.d/haproxy
建立软连接
[root@localhost examples]# ln -s /usr/local/sbin/haproxy /usr/sbin/
关闭防火墙,重启haproxy,访问成功实现轮询
3.5四层转发配置
配置文件haproxy.cfg
#四层转发
frontend test
bind *:80
mode tcp
default_backend test
backend test
mode tcp
balance roundrobin
server server1 192.168.230.60:80 check inter 2000 fall 3 weight 2
server server2 192.168.230.70:80 check inter 2000 fall 3 weight 2
重启,访问成功