设为首页 收藏本站
查看: 860|回复: 0

[经验分享] Haproxy+Keepalived双主高可用负载均衡

[复制链接]
YunVN网友  发表于 2018-12-31 13:04:47 |阅读模式
  一、HAPROXY介绍
  提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件
  它是免费、快速并且可靠的一种解决方案
  特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理
  二、衡量负责均衡器性能的因素
  Session rate 会话率
  – 每秒钟产生的会话数
  Session concurrency 并发会话数
  – 服务器处理会话的时间越长,并发会话数越多
  Data rate 数据速率
  – 以MB/s或Mbps衡量
  – 大的对象导致并发会话数增加
  – 高会话数、高数据速率要求更多的内存
  三、HAProxy工作模式
  mode http
  – 客户端请求被深度分析后再发往服务器
  mode tcp
  – 在客户端与服务器这间建立全双工会话,不检查第七层信息
  mode health
  – 仅做健康状态检查,已经不建议使用
  四、HTTP事务模型
  HTTP协议是事务驱动的
  每个请求(Request)仅能对应一个响应(Response)
  常见模型:
  – HTTP close
  – Keep-alive
  – Pipelining
  1、HTTP close
  客户端向服务器建立一个TCP连接
  客户端发送请求给服务器
  服务器响应客户端请求后即断开连接
  如果客户端到服务器的请求不只一个,那么就要不断的去建立连接
  TCP三次握手过程消耗相对较大的系统资源,同时延迟较大
  2、Keep-alive
  一次连接可以传输多个请求
  客户端需要知道传输内容的长度,以避免无限期的等待传输结束
  降低两个HTTP事务间的延迟
  需要相对较少的服务器资源
  3、Pipelining
  仍然使用Keep-alive
  在发送后续请求前,不用等前面的请求已经得到回应
  适用于有大量图片的页面
  降低了多次请求之间的网络延迟
  五、实验部分
  1.实验环境
  系统:Centos6.5       软件版本 haproxy-1.4.24.tar.gz
  VIP1=192.168.2.100
  VIP2=192.168.2.101
  haproxy01=192.168.2.10
  haproxy02=192.168.2.11
  web1=192.168.2.200
  web2=192.168.2.201
  img1=192.168.2.202
  img2=192.168.2.203
  2.实验拓扑

  3.网站服务器的设置
  web1和web2
  # yum -y install httpd
  # cd /var/www/html/
  #  echo WEB1 > index.html
  # echo WEB2 > index.html
  ing1和img2
  # echo img1 > index.html
  # echo img2 > index.html
  # service httpd restart
  4.安装配置
  (1)、安装HAProxy
  1>、两台HAProxy的安装配置步骤一样
  haproxy下载地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
  # cd haproxy-1.4.24
  [root@nagios haproxy-1.4.24]# vim README

  [root@nagios haproxy-1.4.24] # uname -r
  2.6.32-431.el6.x86_64                                                           # 根据以上要求找到对应自己系统的内核版本,此处选择linux26
  [root@nagios haproxy-1.4.24]# make TARGET=linux26 PREFIX=/usr/local/haproxy install
  #将HAProxy安装到/usr/local/haproxy下
  [root@nagios haproxy-1.4.24]# ls
  doc sbin       #安装完成后会在安装目录下生成doc ,sbin ,share三个文件夹
  此时,HAProxy安装完成
  2>、创建配置文件和启动文件
  [root@nagios haproxy-1.4.24]# mkdir /etc/haproxy
  [root@nagios haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy
  [root@nagios haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy
  [root@nagios haproxy-1.4.24]# chmod +x /etc/init.d/haproxy
  [root@nagios haproxy-1.4.24]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/   
[root@nagios haproxy-1.4.24]# mkdir /usr/share/haproxy
  3>、编辑配置文件(两台Haproxy配置文件相同)
  # vim /etc/haproxy/haproxy.cfg
  #this config needs haproxy-1.1.28 or haproxy-1.2.1      
global      
    log 127.0.0.1   local0  #日志输出配置,所有日志都记录在本机,通过local0输出      
    log 127.0.0.1   local1 notice      
    #log loghost    local0 info      
    maxconn 4096                #最大连接数      
    chroot /usr/share/haproxy   #改变当前工作目录。      
    uid 99                  #所属用户的uid      
    gid 99                  #所属运行的gid      
    daemon                  #以后台形式运行haproxy      
    #debug      
    #quiet

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

  backend webserver             #webserver作用域      
    mode http      
    balance   roundrobin      #banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数      
   option  httpchk /index.html           #检测文件,如果分发到后台index.html访问不到就不再分发给它

      server   web1 192.168.2.200:80  check inter 2000 fall 3 weight 10      
    server   web2 192.168.2.201:80  check inter 2000 fall 3 weight 20

  backend imgserver
      mode http      
    option  httpchk /index.php      
    balance     roundrobin      
    server      img1 192.168.2.202:80  check inter 2000 fall 3      
    server      img2 192.168.2.203:80  check inter 2000 fall 3      

  在192.168.2.11上面执行,复制当前配置文件
  [root@nagios conf]# scp /etc/haproxy/haproxy.cfg root@192.168.2.11:/etc/haproxy/
  4>、启动Haproxy服务,查看状态。
  # service haproxy start


  状态检查没有问题,程序正常
  (2)、安装keepalived
  1>、安装配置keepalived(两台keepalived安装步骤一样)
  参考博客
  http://9265463.blog.运维网.com/9255463/1831850     keepalived 安装
  2>、第一台keepalived配置文件。第一台:192.168.2.100vip的master,192.168.2.101vip的backup。
  # vim /etc/keepalived/keepalived.conf   
global_defs {      
   notification_email {      
     admin@centos.bz      
   }      
   notification_email_from keepalived@domain.com      
   smtp_server 127.0.0.1      
   smtp_connect_timeout 30      
   router_id LVS_DEVEL      
}      
vrrp_script chk_http_port {      
         script "/opt/check_haproxy.sh"      
         interval 2      
         weight 2      
}      
vrrp_instance VI_1 {      
    state MASTER        ############ 辅机为 BACKUP      
    interface eth0      
    virtual_router_id 51      
    mcast_src_ip 192.168.2.10   

      priority 100                  ########### 权值要比 back 高      
    advert_int 1      
    authentication {      
        auth_type PASS      
        auth_pass 1111      
    }      
track_script {      
        chk_http_port ### 执行监控的服务      
        }      
    virtual_ipaddress {      
       192.168.2.100      
    }      
}      
vrrp_instance VI_2 {      
    state BACKUP      
    interface eth0      
    virtual_router_id 52      
    priority 99      
    advert_int 1      
    authentication {      
         auth_type PASS      
         auth_pass 1111      
    }      
    virtual_ipaddress {      
        192.168.2.101   
         }      
}

  3>、第二台keepalived的配置文件。
  #vim /etc/keepalived/keepalived.conf   
global_defs {      
   notification_email {      
     admin@centos.bz      
   }      
   notification_email_from keepalived@domain.com      
   smtp_server 127.0.0.1      
   smtp_connect_timeout 30      
   router_id LVS_DEVEL      
}      
vrrp_script chk_http_port {      
                script "/opt/check_haproxy.sh"      
                interval 2      
                weight 2      
}      
vrrp_instance VI_1 {      
    state BACKUP      
    interface eth0      
    virtual_router_id 51      
    mcast_src_ip 192.168.2.11      
    priority 99             ##########权值 要比master低      
    advert_int 1      
    authentication {      
        auth_type PASS      
        auth_pass 1111      
    }      
track_script {      
        chk_http_port      
        }      
    virtual_ipaddress {      
       192.168.2.100      
    }      
}      
vrrp_instance VI_2 {      
    state MASTER      
    interface eth0      
    virtual_router_id 52      
    priority 100      
    advert_int 1      
    authentication {      
         auth_type PASS      
         auth_pass 1111      
    }      
    virtual_ipaddress {      
        192.168.2.101

           }      
}

  4>、检测脚本,为了防止haproxy服务关闭导致keepalived不自动切换(两台keepalived都需部署)。
  # vim /opt/check_haproxy.sh
  #!/bin/bash      
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then      
     /etc/init.d/haproxy  start      
fi      
sleep 2      
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then      
       /etc/init.d/keepalived stop      
fi      

  # chmod -R +x /opt/check_haproxy.sh
  5>、启动两台keepalived和Haproxy服务。
  # service haproxy start
  # service keepalived start
  6>、测试
  1>、查看两台服务器的VIP 查看
  查看192.168.2.10:

  查看192.168.2.11:

  2>、测试,关闭任意一台keepalived,img和www域名访问正常。
  由于测试环境,则每台机器分别添加主机解析(生产环境申请域名即可)
  # vim /etc/hosts
  192.168.2.200  web1.hyzc.com  web1   
192.168.2.201  web2.hyzc.com  web2     
192.168.2.202  img1.hyzc.com  img1     
192.168.2.203  img2.hyzc.com  img2     
192.168.2.100  www.hyzc.com   www     
192.168.2.101  img.hyzc.com   img
  测试关闭2.10机器,在2.11测试结果

  结论:
  高可用实现
  3>、测试2.10
  www和img的页面轮询,结论负载实现
  遇到的问题:
  1.启动haproxy报多少行错误
  解决办法:
  找到对应的行,注意是注释行的原因




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657978-1-1.html 上篇帖子: 使用Nginx+Keepalived组建高可用负载平衡Web server集群 下篇帖子: 高可用集群技术之keepalived实现lvs高可用并负载均衡web服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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