Haproxy简介
- Haproxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用的程序代理。
- Haproxy特别适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露在网络上
- Haproxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进行或线程模型受内存的限制,系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个cpu时间片做更多的工作
Haproxy搭建web群集分析
- Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具也有很多,比如LVS和Nginx.相对而言,LVS的性能最好,但是搭建相对复杂,Nginx的upstream模块支持群集功能,但是对群集节点的健康检查功能不强,性能没有Haproxy好
- Haproxy官网是http://haproxy.1wt.eu/
- 目前常见的web群集调度器分为软件和硬件两类,软件通常使用开源的LVS、Haproxy、Nginx,硬件一般使用比较多的是F5,当然国内也有一些产品,比如:梭子鱼、绿盟等。
搭建Nginx和Haproxy群集架构
实验环境:
类型 | IP地址 | 系统 | 软件包 |
Haproxy调度器 | 192.168.179.148 | centos7 | haproxy-1.5.19.tar.gz |
Nginx服务器1 | 192.168.179.132 | centos7 | nginx-1.12.2.tar.gz |
Nginx服务器2 | 192.168.179.228 | centos7 | nginx-1.12.2.tar.gz |
客户
|
- 配置两台Nginx服务
//解压缩包
tar zxvf nginx-1.12.2.tar.gz -C /opt
//创建用户
useradd -M -s /sbin/nologin nginx
//安装环境依赖包
yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y
//配置
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
//创建软连接,便于管理服务命令
ln -s /usr/local/nginx/sbin/* /usr/local/sbin
//便于service管理服务
vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG;;
stop)
kill -s QUIT $(cat $PIDF);;
restart)
$0 stop
$0 start;;
reload)
kill -s HUP $(cat $PIDF);;
*)
exit 1
esac
exit 0
//添加执行权限
chmod +x /etc/init.d/nginx
//添加为系统服务
chkconfig --add nginx
//创建站点目录
cd /usr/local/nginx/html
vim test.html
<h1>this is web1</h1>
<h1>this is web2</h1>
//启动服务
service nginx start
//验证服务
netstat -ntap | grep nginx
- 配置haproxy服务
yum install pcre-devel pcre bzip2-devel gcc gcc-c++ make -y
//解压缩包
tar zxvf haproxy-1.5.19.tar.gz -C /opt/
//安装配置
make TARGET=linux26
make install
//创建工作目录
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
//修改配置文件
vim /etc/haproxy/haprox.cfg
注释 #chroot /usr/share/haproxy
注释 #redispatch
删除所有listen
添加
listen webcluster 0.0.0.0:80
option httpchk GET /test.html
balance roundrobin
server inst1 192.168.179.228:80 check inter 2000 fall 3
server inst1 192.168.179.132:80 check inter 2000 fall 3
//启动脚本
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/
//启动服务
service haproxy start
netstat -ntap | grep haproxy
//访问代理服务器IP地址haproxy
IP/test.html
- 日志定义
vim /etc/haproxy/haproxy.cfg
global中更改
log /dev/log local0 info
log /dev/log local0 notice
service haproxy restart
touch /etc/rsyslog.d/haproxy.conf
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
//重启日志服务
systemctl restart rsyslog.service