Centos环境下负载均衡软件Haproxy安装、配置+keepalive实现高可用

内容摘要
首先看下百度百科给的介绍:HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
文章正文

首先看下百度百科给的介绍:
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

haproxy是一款免费、开源的负载均衡软件,一些大型网站用的还是比较多比如京东,淘宝等,特点也比较突出:支持Session的保持,Cookie的引导,同时支持通过获取指定的url来检测后端服务器的状态;出色的负载均衡速度,而且并发处理上一定程度上高于nginx并发;支持TCP协议的负载均衡转发,对于各种基于tcp的软件进行负载均衡比如mysql;负载均衡算法策略比较多,设置更具体。

云海天教程原创内容,转载请注明出处。

下边正式开始安装、配置、测试以及高可用配置使用。

haproxy 配置中分成五部分内容,分别如下:
1、global:参数是进程级的,通常是和操作系统相关。这些参数一般只设置一次,如果配置无误,就不需要再次进行修改
2、defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件
3、frontend:接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend
4、backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器
5、Listen   Fronted和backend的组合体。

通过网上haproxy的了解以及学习、安装实践以及使用,这里本博客简单记录下haproxy的基础部分,包括安装、配置、使用以及配合keepalive的高可用。
硬件:kvm虚拟机
平台:centos  6.8  x86_64
4台机器如下:
VIP:192.168.1.120
DIP:192.168.1.102(keepalive_master)
Dip :192.168.1.104 (keepalive_backup)
RIP :192.168.1.122
RIP :192.168.1.123

一,haproxy的基本安装、配置和使用。

1,haproxy安装
我们这里首先安装192.168.1.102机器,先单台测试。
官网下载地址: haproxy软件官网下载地址:http://www.haproxy.org/#down  可以根据自己的系统内核版本进行版本
选择安装。
这里以官网提供的1.5.19稳定版进行下载安装。可以直接yum install  haproxy  -y安装,这里源码编译安装,具体安装步骤如下:

cd   /usr/local/src/
wget  http://www.haproxy.org/download/1.5/src/haproxy-1.5.19.tar.gz
tar  zxvf  haproxy-1.5.19.tar.gz
cd haproxy-1.5.19
uname  -a   #查看系统内核信息
make  TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy  #根据内核配置参数和设置安装路径
make  install PREFIX=/usr/local/haproxy

安装配置,设置配置文件以及haproxy服务、自启动。

mkdir /etc/haproxy -p
cp  examples/haproxy.cfg  /etc/haproxy 
cp  examples/haproxy.init  /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
chkconfig  haproxy on

2,配置haproxy
配置说明:
(1),haproxy在1.5版本以后没有haproxy.cfg配置文件,1.5之前在examples中是存在haproxy.cfg的配置文件的。从官网下载了高于1.5,比如1.6或者1.7,则需要自己配置一个配置文件。  1.5之前的版本可以直接复制examples/haproxy.cfg到配置目录/etc/haproxy并根据自己的环境进行修改。
(2)由于服务器读取的配置文件是/etc/haproxy/haproxy.cfg,所以我们新建了目录/etc/haproxy/并将配置文件放于这个目录。如果不创建而放到其他目录,请修改服务脚本中的配置文件路径或者采用后台-f指定配置文件运行,或者screen进行虚拟终端运行。建议设置haproxy服务方式,便于后期管理。

这里我们以默认自带的配置文件haproxy.cfg为基础进行了简单修改,修改后的内容如下:
当前简单配置如下:

global 
 log 127.0.0.1 local2 
 chroot /usr/share/haproxy
 pidfile /var/run/haproxy.pid 
 maxconn 4000 
 user haproxy
 group haproxy 
 daemon 
defaults
 mode http 
 log global 
 option httplog 
 
 option dontlognull 
 option http-server-close 
 option forwardfor except 127.0.0.0/8 
 option redispatch 
 retries 3 
 timeout http-request 10s 
 timeout queue 1m 
 timeout connect 10s 
 timeout client 1m 
 timeout server 1m 
 timeout http-keep-alive 10s 
 timeout check 10s 
 maxconn 3000 
frontend http_default_80
 bind 0.0.0.0:80
 mode http
 log global
 option httplog
 option httpclose
 option forwardfor
 acl 21yunwei_site hdr(host) -i 21yunwei.21yunwei.com
 acl 21yunwei_site hdr(host) -i 21yunwei.21yunwei.cn
 acl lvs_site hdr(host) -i lvs.21yunwei.com
 acl lvs_site hdr(host) -i lvs.21yunwei.cn
 use_backend web_21yunwei if 21yunwei_site
 use_backend web_lvs if lvs_site
 #acl url_static path_beg -i /static /images /javascript /stylesheets
 #acl url_static path_end -i .jpg .gif .png .css .js
 #use_backend static if url_static
 default_backend web_21yunwei
frontend www
 bind :81
 monitor-uri /haproxy 
backend web_21yunwei 
 mode http 
 balance roundrobin 
 cookie SERVERID 
 option httpchk GET /index.html
 server 21web1 192.168.1.123:80 check inter 2000 fall 3 weight 1 
 server 21web2 192.168.1.122:80 check inter 2000 fall 3 weight 1
backend web_lvs
 mode http
 balance roundrobin 
 cookie SERVERID
 option httpchk GET /index.html
 server lvsweb1 192.168.1.123:80 check inter 2000 fall 3 weight 1 
 server lvsweb2 192.168.1.122:80 check inter 2000 fall 3 weight 3 
 
listen admin_stats 0.0.0.0:88
 option httplog
 stats refresh 30s
 stats uri /admin
 stats realm Haproxy Manager
 stats auth admin:admin

3,启动服务。
/etc/init.d/haproxy restart
报错1:Starting haproxy: [ALERT] 233/172027 (21384) : [/usr/sbin/haproxy.main()] Cannot chroot(/usr/share/haproxy).
解决办法:mkdir /usr/share/haproxy

常见报错2:/etc/init.d/haproxy: line 40: /usr/sbin/haproxy: No such file or directory
Errors found in configuration file, check it with ‘haproxy check’

解决办法:ln  -s  /usr/local/haproxy/sbin/haproxy    /usr/sbin/haproxy

直接浏览器访问http://192.168.1.102/test.php效果:
访问到了web1的测试页:
1
刷新,可见web2访问测试页:
2

通过刚才设置的listen,查看haproxy监控页面信息,地址http://192.168.1.104:88/admin:

1

二,haproxy+keepalive的高可用方案。
由于haproxy部署于一个机器,存在单点故障风险,这里配置keepalive加以高可用,其中一个haprox死掉以后,通过keepa实现另外一个haproxy机器接管做高可用。
VIP:192.168.1.120
DIP:192.168.1.102(keepalive_master)
Dip :192.168.1.104 (keepalive_backup)
1,配置keepalive。
首先备机配置一个haproxy:之前192.168.1.102也就是keepalive_master配置了一个haproxy,如果做高可用,那么备用机器keepalive_backup也需要安装这个haproxy。按照上边的方法也配置一个haproxy,只要访问192.168.1.104/test.php 跟之前的效果一样即可。

安装keepalive很简单,keepalive_master,keepalive_backup都要安装,就如下几个小步骤:
(1)开启转发
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p可以查看是否开启。
(2)安装keepalived
首先安装依赖包:
yum -y install gcc make openssl-devel openssl net-snmp net-snmp-devel popt popt-devel

安装ipvs和keepalived:
yum install  keepalived  -y
chkconfig keepalived on
(3)编辑配置文件

! Configuration File for keepalived

global_defs {
   router_id 21yunwei_haproxy_master
}

vrrp_instance  21yunwei {
    state MASTER    #备机这里改成BACKUP
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 51
    priority 100     #备机这里改成优先级99,低于100即可。数值越大,优先级越高。
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.120
    }
}

两个机器都启动keepalive服务:/etc/init.d/keepalived  start  正常启动,通过ip addr 查看到192.168.1.120这个VIP即可。

2,高可用测试。
首先测试VIP 192.168.1.120 访问:
http://192.168.1.120/test.php  效果和之前的一样:
12

停掉keepalive_master 的keepalive,查看keepalive_backup的/var/log/messages日志:

[[email protected]_backup haproxy]# tail  -f  /var/log/messages
Aug 22 18:06:34 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Transition to MASTER STATE
Aug 22 18:06:35 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Entering MASTER STATE
Aug 22 18:06:35 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) setting protocol VIPs.
Aug 22 18:06:35 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Sending gratuitous ARPs on eth0 for 192.168.1.120
Aug 22 18:06:35 localhost Keepalived_healthcheckers[22945]: Netlink reflector reports IP 192.168.1.120 added
Aug 22 18:06:35 localhost kernel: IPVS: stopping backup sync thread 22144 ...
Aug 22 18:06:35 localhost kernel: IPVS: sync thread started: state = MASTER, mcast_ifn = eth0, syncid = 51
Aug 22 18:06:40 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Sending gratuitous ARPs on eth0 for 192.168.1.120

可见停掉keepalive_master 的keepalived以后,keepalive_backup接管了工作,此时测试http://192.168.1.120/test.php 访问没有受影响。

恢复keepalive_master 的keepalived,查看keepalive_backup的/var/log/messages日志:

Aug 22 18:08:29 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Received higher prio advert
Aug 22 18:08:29 localhost kernel: IPVS: stopping master sync thread 24617 ...
Aug 22 18:08:29 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) Entering BACKUP STATE
Aug 22 18:08:29 localhost Keepalived_vrrp[22946]: VRRP_Instance(21yunwei) removing protocol VIPs.
Aug 22 18:08:29 localhost kernel: IPVS: sync thread started: state = BACKUP, mcast_ifn = eth0, syncid = 51
Aug 22 18:08:29 localhost Keepalived_healthcheckers[22945]: Netlink reflector reports IP 192.168.1.120 removed

高可用已经实现,这样就不用担心haproxy的单点故障了。

参考文档:
haproxy 配置详解   http://freehat.blog.51cto.com/1239536/1347882
haproxy配置文件详解  http://itnihao.blog.51cto.com/1741976/915537
负载均衡之Haproxy配置详解(及httpd配置)  /d/file/p/20221029/50056199  附带常用负载均衡的对比。
Haproxy+keepalived负载均衡配置 http://blog.csdn.net/aa168b/article/details/50372649

代码注释
[!--zhushi--]

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!