RHEL 7配置HAProxy实现Web负载均衡
Posted 0227-yyds
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHEL 7配置HAProxy实现Web负载均衡相关的知识,希望对你有一定的参考价值。
导读 | 本文将简单介绍使用HAProxy实现web负载均衡,主要内容包括基于权重的轮询、为HAProxy配置https、配置http重定向为https、配置HAProxy使用独立日志。 |
主机名:RH7-HAProxy
IP地址:192.168.10.20
操作系统:Red Hat Enterprise Linux Server release 7.2 (Maipo)最小化安装
防火墙与SELinux:关闭
安装的服务:HAProxy-1.5.14
主机名:RH7-Web-01
IP地址:192.168.10.21
操作系统:Red Hat Enterprise Linux Server release 7.2 (Maipo)最小化安装
防火墙与SELinux:关闭
安装的服务:Apache-httpd 2.4
主机名:RH7-Web-02
IP地址:192.168.10.22
操作系统:Red Hat Enterprise Linux Server release 7.2 (Maipo)最小化安装
防火墙与SELinux:关闭
安装的服务:Apache-httpd 2.4
1、使用浏览器访问两台web的IP地址,能成功访问到不同的页面,方便我们后面直观地观察负载均衡的效果。由于Apache的安装配置不是本文重点,具体可参考本人之前的博文《RedHat 7安装配置Apache 2.4》
2、在RH7-HAProxy上也访问一下两台Web,确认也可以正常访问
[root@RH7-HAProxy~]yum -y install haproxy [root@RH7-HAProxy~]systemctl start haproxy [root@RH7-HAProxy~]systemctl enable haproxy [root@RH7-HAProxy~]mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak [root@RH7-HAProxy~]vi /etc/haproxy/haproxy.cfg
增加以下内容,然后重启haproxy服务
使用浏览器访问HAProxy的IP地址,多次刷新,成功实现轮询访问web01和web02
登录haproxy的后台
可以看到访问web01和web02的相关统计数据
修改haproxy的配置文件,将web01的权重改为3,web02的权重仍为1,这样访问到两台web的比例应该为3:1,改好后重启下haproxy服务
再次通过浏览器访问HAProxy的IP地址,多次刷新进行访问测试
再次登录HAProxy后台查看统计数据,可以看到访问到web01和web02的比例为3:1
采用客户端到HAProxy使用https、HAProxy到WEB端使用http的方式,只需要在HAProxy上配置证书,这里我们就配置一张自签名证书来测试一下
查看一下配置好的证书jiangjianlong.pem
修改HAProxy的配置文件,增加以下参数后重启haproxy服务
使用https协议访问HAProxy的IP地址,提示证书存在问题,这是因为自签名证书不受浏览器信任,但说明上文配置的证书已经生效了,点击继续浏览此网站
成功访问到Web01页面,刷新也能访问到Web02,说明在https的加密访问下负载均衡也没问题
通过hosts解析配置一个域名指向HAProxy的IP地址,也能正常访问
查看下证书信息,跟我们创建的证书信息一致
配置http重定向,自动将http重定向为https,修改haproxy配置文件,增加以下参数,并重启服务
使用浏览器测试,成功实现http自动重定向为https进行访问,但由于截图无法呈现这个动态的效果,就不截了。
1、HAProxy的日志默认写入到系统日志中去,我们可以把它独立出来,方便排查管理。编辑/etc/rsyslog.conf,按下图进行修改
2、重启rsyslog服务,再通过浏览器访问一下web以便产生日志,然后查看/var/log/haproxy.log,发现日志已经按照我们上文所配置的那样,记录到/var/log/haproxy.log来了
RHEL8 上的 glibc sscanf 分段错误,相同的代码适用于 RHEL 5、RHEL6 和 RHEL7
【中文标题】RHEL8 上的 glibc sscanf 分段错误,相同的代码适用于 RHEL 5、RHEL6 和 RHEL7【英文标题】:glibc sscanf segmentation fault on RHEL8, same code is working on RHEL 5,RHEL6 and RHEL7 【发布时间】:2020-02-27 12:51:10 【问题描述】:我们有一个可以在 RHEL5、RHEL6 和 RHEL7 上正确运行的旧版 C 应用程序。 但是相同的应用程序在 RHEL 8 上崩溃了,调用堆栈指向 glibc 库函数 sscanf 中的崩溃。
下面是调用栈顶-
*#0 0x00007f437767696e in __GI__IO_vfscanf () from /lib64/libc.so.6
#1 0x00007f437768a991 in vsscanf () from /lib64/libc.so.6
#2 0x00007f4377684f48 in sscanf () from /lib64/libc.so.6*
传递给 sscanf 的所有参数都是有效的,具有正确的值,我们在 gdb 中确认。 相同的代码适用于旧 RHEL 版本。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:所有参数都有正确的值
如果我们相信你,你不应该在 sscanf
内部发生崩溃,但你会这样做。
如果我遇到这个问题,我会尝试两件事:
-
通过valgrind 验证您的程序在其他地方没有堆损坏。
安装 libc debuginfo 包 (instructions),这样您就可以准确地看到
__GI__IO_vfscanf
内的位置,您的程序崩溃了。
【讨论】:
以上是关于RHEL 7配置HAProxy实现Web负载均衡的主要内容,如果未能解决你的问题,请参考以下文章
RedHat 7配置keepalived+LVS实现高可用的Web负载均衡