HAProxy-keepalived负载均衡及基于域名动静分离

HAProxy-keepalived负载均衡及基于域名动静分离,第1张

HAProxy-keepalived负载均衡及基于域名动静分离

项目环境:

系统:centos6.6-x86内核:2.6

HAproxy版本:haproxy-1.5.2-2.el6.x86_64

keepalive版本:keepalive-1.2.13-4.el6.x86_64



拓扑结构:



前端HAproxy用于调度客户请求,keepalived用于避免单节点故障。有两个站点的业务需求,www.test.com和www.dragon.com。在后端部署了四台服务器,将两个站点的静态和动态分开,并将www.dragon.com的DNS解析为虚拟IP:22.22.22.251。www.test.com的DNS解析为虚拟IP22.22.22.252,使用keepalived互为备份。作为HA的主机,我用两个网卡,一个用来接收请求,一个用来连接内网。



配置Haproxy:

global      log 127.0.0.1 local0 notice    //local0是日志设备,info是日志记录级别(err,warning,info,debug),可以在系统日志里查看            maxconn 5535         //HAproxy接受的最大连接数,还要注意linux文件接受的最大连接数,用命令"ulimit -n"看以查看,在/etc/security/limit.conf可以永久修改。            chroot /usr/local/haproxy  //          user nobody  //进程用户      group nobody  //进程组      nbproc 1    //进程可以创建的进程数,建议小于服务器的cpu数                 daemon          //后台运行             defaults     option httplog  //记录http日志     mode http   //http模式,不与RFC格式兼容的请求都会被拒绝,还有TCP模式作为4层转发,多用于SSL,SSH,SMTP     option dontlognull     retries 3     //连接失败后重试此树                         maxconn 5535                          timeout connect       5s  //连接后端服务器的最长等待时间     timeout server            30s     //服务端回应客户端数据发送的最长等待时间     timeout client              30s    //连接客户端发送数据的最长等待时间     timeout check 5s                //每5s检验一次后端服务器     stats refresh 30s   //后端服务器健康状态刷新时间                       stats uri  /stats       //通过浏览器可以查看业务状态,例如:www.w4ya.com/stats     stats realm welcome    //提示信息        stats auth admin:dragon123   //查看HA监控后端状态时的帐号密码验证            stats hide-version      //不显示haproxy的版本信息     frontend www   bind :80     acl host_web hdr(host) -i   www.draon.com  //定义ACL匹配域名www.dragon.com   acl url_static path_end  .html .css .jpg   //定义ACL匹配静态文件   acl host_test hdr_dom(host) -i  www.test.com    //定义ACL匹配域名www.test.com   acl url_dynamic path_end  .php .jsp   //定义ACL匹配动态      use_backend web-dynamic-server if host_web url_dynamic       //如果域名为www.dragon.com和页面是动态的,则把请求调度给web-dynamic-server    use_backend web-static-server if host_web url_static || host_web     //如果域名为www.test.com和页面是静态的,或则域名为www.dragon.com,则把请求调度给web-static-server    use_backend test-dynamic-server if  host_test url_dynamic     use_backend test-static-server if   host_test url_static || host_test                                                                                                                                            backend    web-static-server          //定义www.dragon.com动态页面的管理集群   mode http   balance   roundrobin     //负载均衡算法为轮询   option    redispatch  // 保持cookie环境,使客户机的session持久连接。   option    abortonclose     //在服务器高负载时,自动放弃队列中处理时间较长的连接   option  httpchk GET /index.html  /通过请求后端http服务的页面,判断状态   server     web01 192.168.1.118:80  check inter 2000 rise 2  fall  3 weight 10   //后端响应的服务器,根据需求可能会有多个。  ckeck:表示启用对后端服务器的健康检查  rise:由故障切换会正常需要进行的检查次数  fall:由正常到故障认定检查的次数  weight:权重                                                                          backend web-dynamic-server    mode http    option  redispatch    option  abortonclose    option  httpchk GET /index.php    balance     roundrobin                              server     web02 192.168.1.111:80  check inter 2000 rise 2 fall 3 weight 10                                                              backend test-static-server    mode http    option  redispatch    option  abortonclose    option  httpchk GET /index.html    balance     roundrobin                              server     test01 192.168.1.117:80  check inter 2000 rise 2 fall 3 weight 10     backend test-dynamic-server    mode http    option  redispatch    option  abortonclose    option  httpchk GET /index.php    balance     roundrobin    server     test02 192.168.1.114:80  check inter 2000 rise 2 fall 3 weight 10   HA1和HA2的配置文件都是一样的。

请求www.dragon.com和静态页面:

请求www.dragon.com和动态页面:


请求www.test.com和静态页面:

请求www.test.com和动态页面:

要查看HA检测到的后端服务群集的运行状况,请执行以下 *** 作:




配置保持活动状态:

  global_defs {    //全局配置    notification_email {    //报警邮箱      [email protected]      [email protected]      [email protected]    }    notification_email_from [email protected]    smtp_server 220.181.12.11  smtp server地址    smtp_connect_timeout 30    smtp连接超时    router_id haproxy_DEVEL    邮箱主题信息 } vrrp_script check_haproxy {       script "killall -0 haproxy"   //对HAproxy的健康检查    interval  2 } vrrp_instance VI_1 {   //实例标识     state MASTER    //设置为MASTER   #另一keepalived配置这里为SLAVE或者BACKUP     interface eth2    //指定HA监听的网卡     virtual_router_id 51  //虚拟路由ID       priority 100    //MASTER选举的优先级   #另一keepalived配置改为80     advert_int 1   //MASTER和BACKUP的同步检查时间间隔          authentication {    //MASTER和BACKUP密码验证         auth_type PASS         auth_pass 1234     }    track_script {  //调用HA检查     check_haproxy }        virtual_ipaddress {   //虚拟IP,可以有多个         22.22.22.251/24 dev eth2          } nopreempt  //故障恢复以后,不抢夺VIP重回MASTER. nopreempt_delay 300  //抢占延时 } vrrp_instance VI_2 {     state MASTER    #另一keepalived配置为MASTER     interface eth2     virtual_router_id 52     priority 80  #另一keepalived配置为100     advert_int 1     authentication {         auth_type PASS         auth_pass 1234     }  track_script {     check_haproxy         }    virtual_ipaddress {         22.22.22.252/24 dev eth2     } } 需要注意两个keepalived配置文件不同的地方已经用#注释


检查keepalived的运行效果:

root@centos-server~]#cat/var/log/messages

这里,实例VI_1进入备份状态,VI_2发现自己的优先级高于对方,切换到主用状态,将VIP:22.22.22.252添加到eth2网卡

查看虚拟IP:


这里实例VI_1进入主,VI_2也进入主,但是后来发现网络中有一个优先级更高的keepalived主机,它自动切换回备份状态。

查看虚拟IP:



仿真Haproxy失败:

在其中一台机停掉Haproxy [root@centos-server ~]# service haproxy stop 停止 haproxy:                                             [确定]

另一个主机获得失败的Haproxy的VIP接管:


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/783915.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存