六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 587|回复: 0

Haproxy、Keepalived双主高可用负载均衡

[复制链接]
 楼主| 发表于 2016-2-2 13:44:52 | 显示全部楼层 |阅读模式
Haproxy、Keepalived双主高可用负载均衡
在测试了Nginx+Keepalived的负载均衡后,也对Haproxy+Keepalived双主模式做了测试,双主的模式充分利用了服务器资源,这样不会导致服务器浪费。这里举例说明:
默认情况下,第一台负载均衡器主要分发www.zhirs.com的请求,第二台负载均衡器主要分发img.zhirs.com的请求。
任意一台宕机都不会影响网站分发。

实验环境

VIP1=192.168.137.200 (www.zhirs.com)
VIP2=192.168.137.100 (img.zhirs.com)
haproxy01=192.168.137.254
haproxy02=192.168.137.253
web1=192.168.137.201
web2=192.168.137.202
img1=192.168.158.101
img2=192.168.158.102

架构图


安装配置过程

1、安装配置过程,(两台Haproxy的安装配置步骤一样)

haproxy下载地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
  1. #cd /usr/local/src
  2. #wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
  3. #tar xf haproxy-1.4.24.tar.gz
  4. #cd haproxy-1.4.24
  5. #make TARGET=linux26 ARCH=x86_64
  6. #TARGET是指定内核版本,ARCH指定CPU架构,我使用的是64bit系统
  7. #make install
复制代码
2、安装完毕后,创建配置文件和启动文件。
  1. #mkdir /etc/haproxy
  2. #cp examples/haproxy.cfg /etc/haproxy
  3. #cp examples/haproxy.init /etc/init.d/haproxy
  4. #chmod +x /etc/init.d/haproxy
  5. #ln -s /usr/local/sbin/haproxy /usr/sbin/
  6. #mkdir /usr/share/haproxy
复制代码
3、编辑配置文件(两台Haproxy配置文件相同)
  1. #vim /etc/haproxy/haproxy.cfg
  2. # this config needs haproxy-1.1.28 or haproxy-1.2.1
  3. global
  4.     log 127.0.0.1   local0  #日志输出配置,所有日志都记录在本机,通过local0输出
  5.     log 127.0.0.1   local1 notice
  6.     #log loghost    local0 info
  7.     maxconn 4096                #最大连接数
  8.     chroot /usr/share/haproxy   #改变当前工作目录。
  9.     uid 99                  #所属用户的uid
  10.     gid 99                  #所属运行的gid
  11.     daemon                  #以后台形式运行haproxy
  12.     #debug
  13.     #quiet

  14. defaults
  15.     log global
  16.     mode    http
  17.   #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
  18.     option  httplog
  19.     option  dontlognull
  20.     option   redispatch
  21.   #当serverId对应的服务器挂掉后,强制定向到IT论坛健康的服务器
  22.     option  abortonclose
  23.   #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
  24.     retries 3               #两次连接失败就认为是服务器不可用
  25.     maxconn 2000            #默认的最大连接数
  26.   #timeout http-keep-alive 10s
  27.   # timeout queue 1m
  28.     contimeout  5000        #连接超时
  29.     clitimeout  50000       #客户端超时
  30.     srvtimeout  50000       #服务器超时
  31.     timeout check 5s            #心跳检测超时
  32.     stats refresh 30s           #统计页面自动刷新时间
  33.     stats uri  /stats           #统计页面url
  34.     stats realm baison-test-Haproxy         #统计页面密码框上提示文本
  35.     stats auth admin:admin123           #统计页面用户名和密码设置
  36.     stats hide-version                  #隐藏统计页面上HAProxy的版本信息
  37. frontend www
  38.     bind *:80
  39.     #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到IT论坛机器就不能访问了。
  40.     acl web hdr(host) -i www.zhirs.com
  41.     #acl后面是规则名称,-i是要访问的域名,如果访问www.zhirs.com这个域名就分发到下面的webserver 的作用域。
  42.     acl img hdr(host) -i img.zhirs.com
  43.     #如果访问img.baison.com.cn就分发到imgserver这个作用域。
  44.     use_backend webserver if web
  45.     use_backend imgserver if img

  46. backend webserver             #webserver作用域
  47.     mode http
  48.     balance   roundrobin      
  49.     #banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数
  50.     option  httpchk /index.html
  51.     #检测文件,如果分发到后台index.html访问不到就不再分发给它
  52.     server     web01 192.168.137.201:80  check inter 2000 fall 3 weight 30
  53.    server     web01 192.168.137.202:80  check inter 2000 fall 3 weight 20
  54.    server     web01 192.168.137.203:80  check inter 2000 fall 3 weight 10

  55. backend imgserver
  56.     mode http
  57.     option  httpchk /index.php
  58.     balance     roundrobin                          
  59.     server      img01 192.168.137.101:80  check inter 2000 fall 3
  60.     server      img02 192.168.137.102:80  check inter 2000 fall 3
复制代码
4、启动Haproxy服务,查看状态。
1
#service haproxy start



[url=]
[/url]

5、安装配置keepalived(两台keepalived安装步骤一样)
  1. #cd /root/software
  2. #wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz
  3. #tar -zxvf pcre-8.33.tar.gz
  4. #cd pcre-8.33
  5. #./configure
  6. #make && make install
  7. #wget http://nginx.org/download/nginx-1.2.9.tar.gz
  8. #tar -zxvf nginx-1.2.9.tar.gz
  9. #cd nginx-1.2.9
  10. #./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_gzip_static_module
  11. #make && make install
复制代码
6、第一台keepalived配置文件。第一台做192.168.137.200vip的master,192.168.137.100的backup。
  1. #vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3.    notification_email {
  4.      admin@centos.bz
  5.    }
  6.    notification_email_from keepalived@domain.com
  7.    smtp_server 127.0.0.1
  8.    smtp_connect_timeout 30
  9.    router_id LVS_DEVEL
  10. }
  11. vrrp_script chk_http_port {
  12.                 #script "/opt/nginx_pid.sh"
  13.                 script "/opt/check_haproxy.sh"
  14.                 interval 2
  15.                 weight 2
  16. }
  17. vrrp_instance VI_1 {
  18.     state MASTER        ############ 辅机为 BACKUP
  19.     interface eth0
  20.     virtual_router_id 51
  21.     mcast_src_ip 192.168.137.254
  22.     priority 100                  ########### 权值要比 back 高
  23.     advert_int 1
  24.     authentication {
  25.         auth_type PASS
  26.         auth_pass 1111
  27.     }
  28. track_script {
  29.         chk_http_port ### 执行监控的服务
  30.         }
  31.     virtual_ipaddress {
  32.        192.168.137.200
  33.     }
  34. }
  35. vrrp_instance VI_2 {
  36.     state BACKUP
  37.     interface eth0
  38.     virtual_router_id 52
  39.     priority 99
  40.     advert_int 1
  41.     authentication {
  42.          auth_type PASS
  43.          auth_pass 1111
  44.     }
  45.     virtual_ipaddress {
  46.         192.168.137.100  
  47.          }
  48. }
复制代码
7、第二台keepalived的配置文件。
  1. #vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3.    notification_email {
  4.      admin@centos.bz
  5.    }
  6.    notification_email_from keepalived@domain.com
  7.    smtp_server 127.0.0.1
  8.    smtp_connect_timeout 30
  9.    router_id LVS_DEVEL
  10. }
  11. vrrp_script chk_http_port {
  12.                 #script "/opt/nginx_pid.sh"
  13.                 script "/opt/check_haproxy.sh"
  14.                 interval 2
  15.                 weight 2
  16. }
  17. vrrp_instance VI_1 {
  18.     state BACKUP
  19.     interface eth0
  20.     virtual_router_id 51
  21.     mcast_src_ip 192.168.137.253
  22.     priority 99             ##########权值 要比master低
  23.     advert_int 1
  24.     authentication {
  25.         auth_type PASS
  26.         auth_pass 1111
  27.     }
  28. track_script {
  29.         chk_http_port
  30.         }
  31.     virtual_ipaddress {
  32.        192.168.137.200
  33.     }
  34. }
  35. vrrp_instance VI_2 {
  36.     state MASTER
  37.     interface eth0
  38.     virtual_router_id 52
  39.     priority 100
  40.     advert_int 1
  41.     authentication {
  42.          auth_type PASS
  43.          auth_pass 1111
  44.     }
  45.     virtual_ipaddress {
  46.         192.168.137.100
  47.          }
  48. }
复制代码
8、检测脚本,为了防止haproxy服务关闭导致keepalived不自动切换。
  1. #vim /opt/check_haproxy.sh
  2. #!/bin/bash
  3. if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
  4.      /etc/init.d/haproxy  start
  5. fi
  6. sleep 2
  7. if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
  8.        /etc/init.d/keepalived stop
  9. fi
复制代码
9、启动两台keepalived和Haproxy服务。
  1. #servcie haproxy start
  2. #service keepalived start
复制代码
10、查看两台服务器的VIP查看
查看192.168.137.254:
        2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:dc:01:3e brd ff:ff:ff:ff:ff:ff
inet 192.168.137.254/24 brd 192.168.137.255 scope global eth0
inet 192.168.137.200/32 scope global eth0
查看192.168.137.253:
        2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:d5:e7:3d brd ff:ff:ff:ff:ff:ff
inet 192.168.137.253/24 brd 192.168.137.255 scope global eth0
inet 192.168.137.100/32 scope global eth0
inet6 fe80::20c:29ff:fed5:e73d/64 scope link
valid_lft forever preferred_lft forever
11、测试,关闭任意一台keepalived,img和www域名访问正常。后续会对Nginx+Keepalived 双主结果做测试。
http://blog.chinaunix.net/uid-25266990-id-3989321.html
Haproxy、Keepalived双主高可用负载均衡

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表