通过 LVS+keepalived 对调度服务器进行双机热备,利用高可用(HA)技术提供持续不间断的服务。
keepalived双机热备
利用高可用(HA)技术提供持续的、不间断的计算机系统或网络服务。
使用keepalived实现双击热备,包括针对IP地址的故障切换,以及在LVS高可用群集中的热备应用。
Keepalived双击热备基础知识
专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
Keepalived的热备方式
VRRP:一主+多备 ,公用同一个IP地址,但优先级不同
LVS+Keepalived 高可用群集
Keepalived的实际目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务,管理服务器池,而不仅仅用作双机热备。使用keepalived
构建LVS群集更加简便易用。主要优势体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后在重新加入。
负载均衡 + 高可用群集
针对LVS调度器实现双机热备
能够管理服务器池,自动隔离失效节点
安装及服务控制
安装支持软件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 rpm -q kernel-devel rpm -q ipvsadm yum -y install openssl-devel yum -y install popt-devel rpm -q openssl-devel popt-devel tar zxf keepalived-1.2.13.tar.gz cd keepalived-1.2.13./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ make make install ll /etc/init.d/keepalived chkconfig --add keepalived chkconfig keepalived on cd /etc/keepalived/cp keepalived.conf keepalived.conf.bak
配置主服务器
主从调度器配置要点
DR模式必须调整/proc参数
清除VIP地址、清除ipvsadm策略
配置keepalived双击热备,并添加服务器池设置
Web节点注意事项
DR模式必须调整/proc参数、清除VIP地址及路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 cat > keepalived.conf <<EOF ! Configuration File for keepalived global_defs { router_id TEST } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.104.210 } } EOF
配置从服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 cat > keepalived.conf <<EOF ! Configuration File for keepalived global_defs { router_id TEST } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.104.210 } } EOF tail -f /var/log/messages Apr 17 16:51:48 wcq10 Keepalived_vrrp[32233]: VRRP_Instance(VI_1) Entering MASTER STATE Apr 17 16:51:48 wcq10 Keepalived_vrrp[32233]: VRRP_Instance(VI_1) setting protocol VIPs. Apr 17 16:51:48 wcq10 Keepalived_vrrp[32233]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.104.210 Apr 17 16:51:48 wcq10 Keepalived_healthcheckers[32232]: Netlink reflector reports IP 192.168.104.210 added Apr 17 16:51:53 wcq10 Keepalived_vrrp[32233]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.104.210 Apr 17 16:51:47 wcq03 Keepalived_vrrp[4646]: VRRP_Instance(VI_1) Received higher prio advert Apr 17 16:51:47 wcq03 Keepalived_vrrp[4646]: VRRP_Instance(VI_1) Entering BACKUP STATE Apr 17 16:51:47 wcq03 Keepalived_vrrp[4646]: VRRP_Instance(VI_1) removing protocol VIPs. Apr 17 16:51:47 wcq03 Keepalived_healthcheckers[4645]: Netlink reflector reports IP 192.168.104.210 removed
lvs+Keppalived高可用群集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 配置双机热备,并添加服务器池设置,主从服务器服务器池设置一样 virtual_server 192.168.104.210 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.104.20 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.104.30 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
主从服务器的优化设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 cat >> /etc/sysctl.conf <<EOF net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth1.send_redirects = 0 EOF ifconfig lo:0 192.168.104.210/32 cat >> /etc/sysctl.con <<EOF net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 EOF service keepalived restart
Haproxy搭建web集群
Haproxy是目前比较流行的一种集群调度工具,同类的集群调度工具很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂,Nginx 的
upstream 模块支持集群功能,但是对集群节点健康检查功能不强,性能没有 Haproxy 好。
Http请求
请求方式:
GET方式:GET方法是默认的HTTP请求方法,我们日常用 GET 方法来提交表单数据,然而用 GET 方法提交的表单数据只经过了简单的编码,同时它将
作为 URL 的一部分向 Web 服务器发送,因此,如果使用 GET 方法来提交表单数据就存在安全隐患。
POST方式:POST 方法是 GET 方法的一个替代方法,它主要是向 web 服务器提交表单数据,尤其是大批量的数据。POST 方法克服了 GET 方法的缺点。
通过 POST 方法提交表单数据时,数据不是作为 URL 请求的一部分而是作为标准数据传送给 web 服务器,这也克服了 GET 方法中的信息无法保密和数据量
太小的缺点。因此,出于安全考虑以及对用户信息的考虑,通常表单提交时采用 POST 方法。
返回状态码
正常的状态吗为2xx、3xx
异常的状态码为4xx、5xx
负载均衡常用的调度算法:
RR:轮询查询(加权轮询)
LC:最小连接数(加权最小链接)
SH:基于来源访问调度
搭建负载均衡高可用环境相对简单,主要是要理解其中原理。
三种负载均衡器的优缺点说明如下:
LVS的优点:
抗负载能力强、工作在第4层仅作分发作用,没有流量的产生,这个特点决定了它在负载均衡软件里的性能最强;无流量,同时保证了均衡器IO的性能不会受到
大流量的影响;
工作稳定,自身有完整的双击热备方案,如 LVS+Keepalived 和 LVS+hertbeat
应用范围比较广,可以对所有应用作负载均衡;
配置型比较低,这是一个缺点,也是一个优点,因为没有太多可配置的东西,所以并不需要太多更改,大大减少了人为出错的几率
LVS的缺点:
软件本身不支持正则处理,不能做动静分离,这就凸显了 Nginx/HAProxy+keepalived 的优势
如果网站应用比较大,LVS/DR + Keepalived 就比较复杂,特别是后面有 Windows Server 应用的机器,实施及配置还有维护过程比较麻烦,相对而言,
Nginx/HAProxy+keepalived 就简单多了。
Nginx的优点:
工作在 OSI 第七层,可以针对 HTTP 应用做一些分流的策略,比如针对域名、目录结构。它的正则比 HAProxy 更为强大和灵活;
Nginx 对网络的依赖非常小,理论上能 ping 通就能就行负载功能,这个也是它的优势所在;
Nginx 安装和配置比较简单,测试起来比较方便;
可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
Nginx 可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;
Nginx 不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是强大的 Web 应用服务器。LNMP 现在也是非常流行的 web 环境,大有和 LAMP 环境
分庭抗礼之势。Nginx 在处理静态页面、特别是提高并发方面相对 Apache 有优势;
Nginx 现在作为 web 反向加速缓存越来越成熟了。速度比传统的 squid 服务器更快,有需求的朋友可以考虑用其作为反向代理极速器;
Nginx的缺点:
Nginx 不支持 url 检测;
Nginx 仅能支持 http 和 email,这是它的弱势;
Nginx 的 session 的保持,cookie 的引导能力相对欠缺。
HAProxy的优点:
HAProxy 是支持虚拟主机的,可以在4/7层上工作(支持多网段);
能够补充 nginx 的一些缺点比如 session 的保持,cookie 的引导等工作;
支持 url 检测后端的服务器;
它跟 LVS 一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲 HAProxy 比 nginx 有更出色的负载均衡速度,在并发处理上也是优于 nginx 的;
HAProxy 可以对 mysql 读进行负载均衡,对后端的 mysql 节点进行检测和负载均衡,不过在后端的 mysql slaves 数量超过 10 台时性能不如 LVS;
HAProxy 的算法较多,达到8种。
案例
安装haproxy
1 2 3 4 5 6 7 8 9 10 rpm -qa pcre-devel bzip2-devel yum -y install pcre-devel bzip2-devel tar zxf haproxy-1.4.24.tar.gz cd haproxy-1.4.24make TARGET=Linux26 make install
1 2 3 mkdir /etc/haproxycp examples/haproxy.cfg /etc/haproxy/vim /etc/haproxy/haproxy.cfg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # this config needs haproxy-1.1.28 or haproxy-1.2.1 global log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 #chroot /usr/share/haproxy uid 99 gid 99 daemon #debug #quiet defaults log global mode http option httplog option dontlognull retries 3 #redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen web-insert 0.0.0.0:80 option httpchk GET /index.html balance roundrobin server inst1 192.168.104.20:80 check inter 2000 fall 3 server inst2 192.168.104.30:80 check inter 2000 fall 3
1 2 3 4 5 6 7 8 9 10 11 cp examples/haproxy.init /etc/init.d/haproxyln -s /usr/local/sbin/haproxy /usr/sbin/haproxychmod +x /etc/init.d/haproxyservice haproxy start chkconfig haproxy on chkconfig --list haproxy
1 vim /etc/haproxy/haproxy.cfg
1 2 3 4 5 6 7 8 9 10 global log /dev/log local1 notice log /dev/log local0 info maxconn 4096 #chroot /usr/share/haproxy uid 99 gid 99 daemon #debug #quiet
1 2 service haproxy restart