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

[经验分享] haproxy实现高可用站点架构

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-10-20 10:54:49 | 显示全部楼层 |阅读模式
   在负载均衡的调度器中,有个lvs,nginx,haproxy,lvs的搭建相比后两者较困难些,而nginx的主要用处是轻量级的web服务器,haproxy是一种很好的高可用软件,它可以基于4层和7层做高可用,分别表现在TCP上和http上,下面我们就通过一幅图来了解haproxy的工作原理。
hap_1.png haproxy的工作模式:调度时发生的协议层次
     http:仅用于调度http协议的服务器,7层
          会对应用层数据做深入分析,因此支持7层过滤、处理、转换等机制

     tcp:非http协议的服务器调度,包含https,4层
          通过在客户端和后端的backend server之间建立一个全双工的连接

后端提供两个web服务器的节点,并且提供主页以示区分,两个节点的网段调为自定义的vnet2
node1:
1
web1 test page



node2:
1
this is web2



然后,给这两台主机规划IP地址
1
2
3
4
node1:211.70.160.15
node2:211.70.160.16
[iyunv@node1 ~]ifconfig  eth0  211.70.160.15/24  up
[iyunv@node2 ~]ifconfig  eth0  211.70.160.16/24  up



此时,我们就可以将两个节点上的web服务启动了
1
[iyunv@node1 ~]service  httpd start



安装haproxy软件
1
[iyunv@localhost ~]# yum install -y haproxy



将haproxy的日志定向到rsyslog中,在rsyslog的配置文件中更改如下
1
2
3
4
5
6
7
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
local2.*               /var/log/haproxy.log     #将haproxy的日志发往local2设施上



然后,重启我们的rsyslog服务
1
[iyunv@localhost ~]# service rsyslog restart



查看514端口是否在监听

更改haproxy的配置文件,并且备份一份原有配置
1
[iyunv@localhost haproxy]# cp haproxy.cfg haproxy.cfg.bak



删除defaults段落后的所有内容,添加如下
1
2
3
4
5
6
7
8
9
10
11
12
frontend  main  *:80
    default_backend  webs
backend webs
    balance  roundrobin
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check

或者修改为listen形式
listen  main  *:80
    balance  roundrobin
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check



启动haproxy服务
1
[iyunv@localhost haproxy]# service haproxy start



此时,haproxy的主机上已经监听了80端口,可以使用ss查看

在我们的浏览器中进行验证
hap_2.png
刷新一次后,根据轮询效果,会返回后端的node1和node2的网站主页
使用基于source方法的haproxy调度
配置文件更改,只改了调度算法
1
2
3
4
5
6
frontend  main  *:80
    default_backend webs
backend webs
    balance  source
    server s1 211.70.160.15:80 check
    server s2 211.70.160.16:80 check



重启服务
1
[iyunv@localhost haproxy]# service haproxy restart



再回到浏览器中查看
hap_3.png
无论刷新多少次,出来的网页都是node2节点上提供的web2的主网页
使用基于cookie算法的haproxy
更改配置:
1
2
3
4
5
6
7
8
frontend  main
    bind :80
    default_backend webs
backend webs
    balance  source
    cookie web  insert nocache     #inset插入到http首部,nocache是中间的缓存服务器不允许缓存数据
    server s1 211.70.160.15
    server s2 211.70.160.16



重启haproxy服务
1
[iyunv@localhost haproxy]# service haproxy restart



然后在浏览器中访问我们的地址,并且查看http首部信息
hap_4.png
实现cookie绑定的效果

将我们的调度算法改为roundrobin轮询,更改配置文件为
1
2
3
4
5
6
7
8
9
10
frontend  main
    bind :80
    default_backend webs
backend webs
    balance  roundrobin
    cookie web  insert nocache
    server s1 211.70.160.15 cookie s1     #指定server的名称,实现cookie绑定
    server s2 211.70.160.16 cookie s2

[iyunv@localhost haproxy]# service haproxy reload



再为后端的两个web节点提供网页
node1上:
1
2
[iyunv@node1~ ]cat  /var/www/html/test.html
hello node1 test



node2上:
1
2
[iyunv@node2~ ]cat  /var/www/html/test.html
hello node2 test



访问我们的资源
hap_5.png
无论我们怎么刷新网页,返回的都是node1上提供的网页,因为这里的cookie实现了绑定的效果
启动haproxy的状态页:stats

修改haproxy的配置文件,使之支持stats状态页显示
1
2
3
4
5
6
7
8
9
10
frontend  main
    maxconn 4000
    bind :80
    default_backend webs
backend webs
    balance  roundrobin
    server s1 211.70.160.15 check port 80
    server s2 211.70.160.16 check port 80
    server b1 127.0.0.1:8080 backup
    stats enable     #开启stats



此时,将后端的node1的web服务上线
1
[iyunv@node1 ~]service httpd start



重新加载配置文件,在浏览器中访问状态也地址
1
[iyunv@localhost haproxy]# service haproxy reload



stats_1.png

图示,node1的web服务在线,node2在线,但是web服务没有启动
active:后端服务器中的active  server
backup:后端服务器中的backup server

将backup主机加入健康监测,更改下面选项
1
server b1 127.0.0.1:8080 backup check port 8080



重新加载配置文件
1
[iyunv@localhost haproxy]# service haproxy reload



hap_6.gif
对stats网页做网页访问控制
1
2
3
4
5
stats  hide-version     #隐藏版本号
stats  scope    .      #当前的作用范围
stats   uri   /haproxyadmin?stats     #自定义stats页面的uri
stats   realm  haproxy statistics     #用于下面选项,提示用户输入用户名密码的显示
stats   auth     statsadmin:password     #基于用户名和密码的认证



修改配置文件,使其具有认证功能,在backend中添加
1
2
3
4
5
6
    stats enable
    stats hide-version
    stats uri /hap?stats
    stats scope .
    stats realm INPUT your name & password
    stats auth admin:admin



重新加载配置,在浏览器中验证
1
[iyunv@localhost haproxy]# service haproxy reload



hap_7.gif
启用stats的管理接口
1
stats admin if TRUE     #添加此项



重新加载配置
1
[iyunv@localhost haproxy]# service haproxy reload



再次访问
hap_8.gif
也可以将stats单独放置在一个段落中,不在backend中了,虽然,这样安全了,但是,看不到后端服务器的状态了


运维网声明 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-26250-1-1.html 上篇帖子: haproxy+varnish搭建高可用web缓存服务器 下篇帖子: Varnish的负载均衡、动静分离
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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