Haproxy01-安装Haproxy
1、HAProxy安装(二进制)
1.1、部署环境
- 软件版本
- lua:5.4.3
- haproxy:2.5.6
- 系统环境
- 192.168.1.101:CentOSLinuxrelease7.7.1908(Core)
- 192.168.1.102:CentOSLinuxrelease7.7.1908(Core)
- 192.168.1.254:CentOSLinuxrelease7.7.1908(Core)
- 在192.168.1.254上安装haproxy,提供负载均衡能力。在192.168.1.101和192.168.1.102上安装httpd,提供后端服务。
- HAProxy的机器上有两个IP,将10.1.1.12当作外网IP。
1.2、安装httpd提供后端服务
1、安装httpd
//在192.168.1.101和192.168.1.102上安装httpd ]# yum install httpd -y
2、提供测试页
//在192.168.1.101上执行 ]# cat > /var/www/html/index.html << EOF <h1>192.168.1.101, test1</h1> EOF //在192.168.1.102上执行 ]# cat > /var/www/html/index.html << EOF <h1>192.168.1.102, test2</h1> EOF
3、启动httpd服务
//在192.168.1.101和192.168.1.102上执行 ]# systemctl start httpd.service
4、测试后端服务是否可用
//在192.168.1.254上执行 ]# curl http://192.168.1.101:80 <h1>192.168.1.101, test1</h1> ]# curl http://192.168.1.102:80 <h1>192.168.1.102, test2</h1>
1.3、安装HAProxy
- 在192.168.1.254上安装HAProxy
1.3.1、安装LUA
]# yum -y install gcc gcc-c++ openssl-devel systemd-devel -y ]# wget http://www.lua.org/ftp/lua-5.4.3.tar.gz ]# tar zvfx lua-5.4.3.tar.gz ]# mkdir -p /apps/lua-5.4.3/ ]# cd lua-5.4.3/ ]# make linux ]# make install INSTALL_TOP=/apps/lua-5.4.3/
1.3.2、安装HAProxy
1、安装HAProxy
]# wget https://www.haproxy.org/download/2.5/src/haproxy-2.5.6.tar.gz ]# tar zvfx haproxy-2.5.6.tar.gz ]# cd haproxy-2.5.6/ ]# mkdir /apps/haproxy-2.5.6/ ]# make TARGET=linux-glibc USE_LUA=1 USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1 USE_ZLIB=1 LUA_LIB=/apps/lua-5.4.3/lib LUA_INC=/apps/lua-5.4.3/include ]# make install PREFIX=/apps/haproxy-2.5.6/
2、创建系统服务
]# cd /apps/ ]# ln -s haproxy-2.5.6 haproxy ]# cat > /usr/lib/systemd/system/haproxy.service << EOF [unit] Description=HAProxy Load Balancer After=syslog.target network.target [Service] ExecStartPre=/apps/haproxy/sbin/haproxy -f /apps/haproxy/haproxy.cfg -c -q ExecStart=/apps/haproxy/sbin/haproxy -Ws -f /apps/haproxy/haproxy.cfg ExecReload=/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target EOF ]# systemctl daemon-reload
3、配置HAProxy
- 创建配置文件haproxy.cfg
- listen段可以独立完整的定义前端和后端。但这里使用listen只是为了配置HAProxy的状态页面,所以就没有定义后端服务器,HAProxy的状态页面与后端无关。
- frontend和backend配合使用。
- frontend定义一个前端。
- backend定义一组后端服务器。
]# cat > /apps/haproxy/haproxy.cfg << EOF global ###后台运行 #以守护进程的方式运行harpoxy daemon #将所有守护进程的pid写入文件 pidfile /apps/haproxy/haproxy.pid ###安全加固:隔离和删除特权 #增加了安全级别,以防未知的漏洞被利用。指定的目录为 空目录 且任何用户都没有 写权限 chroot /apps/haproxy/empty #运行haproxy的用户 user haproxy #运行haproxy的用户组 group haproxy #通过服务管理器将日志发送到127.0.0.1进行日志记录[error warring debug info] log 127.0.0.1 local3 info #每个进程的最大并发连接数(注意,在某些平台上,“select”轮询器不能可靠地使用超过1024个文件描述符) maxconn 4096 #重新加载后,旧进程的存在时间不能超过这个时间 hard-stop-after 5m #默认情况下,所有文件名都相对于包含该配置文件的目录 default-path config #如果在加载配置文件时有任何报错,就拒绝启动(保持配置清洁) zero-warning #定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时 node node_name1 #当前实例的描述信息 description 'global_hh1' defaults #设置haproxy的代理模式(7层代理http,4层代理tcp) mode http #日志遵循global的配置 log global #启用HTTPS请求、会话状态和计时器的日志记录 option httpslog #启用空连接日志记录 option dontlognull #如果后端服务器需要获得客户端的真实IP,需要配置此参数,将可以从Http Header中获得客户端IP(插入X-Forwarded-For头) option forwardfor #每次请求完毕后主动关闭http通道,HA-proxy不支持keep-alive模式 option httpclose #在服务端,每次请求完毕后主动关闭http通道,HA-proxy不支持keep-alive模式 option http-server-close #在连接失败的情况下启用会话重新分配(当后端服务器挂了之后,将请求强制分配到其他健康的后端服务器) option redispatch #健康状态检测,3次连接失败就认为该后端服务器不可用 retries 3 #一次健康状态检测的超时时间 timeout check 2000 #等待完成HTTP请求的最大时间 timeout http-request 10s #在队列中等待连接槽空闲的最大时间 timeout queue 15s #haprox将用户请求转发到后端服务器后,等待后端服务器响应的超时时间 timeout connect 10s #haproxy作为客户端,和后端服务器之间的空闲超时时间 timeout client 1m #haproxy作为服务器,和用户之间的空闲连接超时时间 timeout server 1m #等待新的HTTP请求出现的最大时间(默认持久连接超时时间) timeout http-keep-alive 2m #设置隧道客户端和服务器端的最大不活动时间。(for websocket) timeout tunnel 4h #每个进程的最大并发连接数,优先级比global中的高 maxconn 2048 listen stats bind :18080 #开启haproxy的状态页面 stats enable #通过这个url访问haproxy的状态页面 stats uri /haproxystatus #访问haproxy的状态页面的用户名和密码,可以设置多个用户名 stats auth admin1:admin1 stats auth admin2:admin2 #启用管理后端服务器(在状态页面上启动/禁用后端服务器) stats admin if TRUE #设置haproxy的状态页面的提示信息 stats realm Haproxy\ status #设置监控页面刷新时间:5s stats refresh 10s #隐藏监控页面的HAproxy版本信息 stats hide-version #default段中开启了日志,no log关闭日志 #no log frontend frontend_hh1 #当前实例的描述信息 description "frontend frontend_hh1" #设置监听端口,即haproxy提供的web服务端口 bind :80 #默认的后端服务器是server_hh1 default_backend server_hh1 backend server_hh1 #在后端中使用的负载平衡算法。 balance roundrobin ###添加一个后端服务器。 #check开启健康状态检查,inter检查的时间间隔,rise几次成功的检查就认为后端服务器可用,fall几次失败的检测就认为后端服务器不可用。 server httpA 192.168.1.101:80 check inter 1500 rise 3 fall 2 weight 1 #添加一个后端服务器。 server httpB 192.168.1.102:80 check inter 1500 rise 3 fall 2 weight 1 EOF
- 配置chroot
]# mkdir /apps/haproxy/empty/ ]# chmod 000 /apps/haproxy/empty/
- 创建启动用户haproxy
]# useradd -r haproxy ]# usermod -G haproxy haproxy
- 开启haproxy日志
]# vim /etc/rsyslog.conf $ModLoad imudp #去掉注释 $UDPServerRun 514 #去掉注释 local3.* /apps/haproxy/logs/haproxy.log #添加 ]# systemctl restart rsyslog ]# chown haproxy.haproxy -R /apps/haproxy/
1.4、启动HAProxy
1、检查配置文件
]# /apps/haproxy/sbin/haproxy -c -f /apps/haproxy/haproxy.cfg
2、启动HAProxy
systemctl enable haproxy.service systemctl start haproxy.service systemctl stop haproxy.service systemctl restart haproxy.service
3、测试HAProxy
- 在其他机器访问HAProxy
]# curl http://10.1.1.12:80 <h1>192.168.1.101, test1</h1> ]# curl http://10.1.1.12:80 <h1>192.168.1.102, test2</h1>
- 登录HAProxy的状态页面(http://10.1.1.12:18080/haproxystatus)
1
# #