前言:最近项目组需要搭建一个高可用系统,用到的是keepalived+haproxy的架构技术,作为小白的我也是搜了很多资料,最终测试环境部署成功。虽然实现了应有的功能,但是对于haproxy的更多功能也是一直半解,通过该文章做一个系统的复习。
uname -r
3.10.0-327.el7.x86_64
编译haproxy 参数 需要查看 解压后haproxy中的readme文件
编译安装
查看编译完成后是否报错
安装haproxy 查看/usr/local/haproxy 目录是否生成
haproxy.cfg
因为haproxy.cfg配置中uid gid 是99
使用 id 99 查看用户组id 99 的用户组权限
递归修改haproxy的权限
chown nobody /usr/local/haproxy/ -R
添加日志以及路径
重启系统日志
PREFIX :指定安装路径
指定 内核版本 TARGET=linux2628
需要将启动脚本复制到指定目录
注意:linux基础差的可能看不懂haproxy.init 脚本 如果安装目录和配置文件目录和脚本中的不一样,就可能出现意想不到的错误。
本人修改hoproxy.init 修改点如下
cd /usr/local/software
yum -y install gcc openssl-devel pcre-devel systemd-devel
# 后面网址可以在浏览器中打开查看是否存在当前版本 (本人尝试好几个地址 下面地址可用)
wget .4.
# 因为本人使用不是root用 故前面加sudo
sudo tar xvf haproxy-2.4. -C /usr/local/
cd /usr/local/haproxy-2.4.2#参考INSTALL文件进行编译安装 权限不够 加 sudo
sudo make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/lua-5.3.5/src/ LUA_LIB=/usr/local/lua-5.3.5/src/ PREFIX=/usr/local/haproxy# ...... make 参数解析 start ...... # (注意 LUA_INC 后面的路径)
ARCH=x86_64 #CPU架构
TARGET=linux-glibc #通用linux内核 也可以通过readme 查看对应内核版本参数
USE_PCRE=1 #PCRE支持正则表达式,用于用户请求的uri
USE_OPENSSL=1 #https,证书
USE_ZLIB=1 #开启压缩
USE_SYSTEMD=1 #使用systemd启动haproxy主进程
USE_CPU_AFFINITY=1 #CPU亲和性,让haproxy指定的进程工作在指定的CPU核心上
USE_LUA=1 LUA_INC=/usr/local/lua-5.3.5/src LUA_LIB=/usr/local/lua-5.3.5/src #开启lua,及lua和lua库所在路径
PREFIX=/usr/local/haproxy #指定安装路径
# ...... make 参数解析 end ...... ##生成的模块、文件和二进制程序拷贝到指定路径
make install PREFIX=/usr/local/haproxy
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/# 检查 haproxy 版本
[userwin@MiWiFi-R3L-srv sbin]$ haproxy -v
HAProxy version 2.4.2-553dee3 2021/07/07 - /
Status: long-term supported branch - will stop receiving fixes around Q2 2026.
Known bugs: .4.2.html
Running on: Linux 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64
# 创建 haproxy.cfg (本人没有安装httpd 仅仅测试haproxy 目录是自己的目录)
cd /usr/local/haproxy/etc/
vim haproxyglobal
log 127.0.0.1 local0
maxconn 4096
#chroot /usr/local/haproxy
uid 99
gid 99
daemon
nbproc 1
#pidfile /usr/local/haproxy/run/haproxy.piddefaults
log global
log 127.0.0.1 local3
mode http
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
balance roundrobin
#stats uri /stats
timeout connect 5000
timeout client 50000
timeout server 50000
#option httpchk GET /index.htmllisten statsmode httpbind 0.0.0.0:9999stats enablelog globalstats uri /ha-stats#frontend http
#bind 0.0.0.0:80
#default_backend http_back #backend http_back
#server s1 192.168.3.17:80 weight 3 check
#server s1 192.168.3.18:80 weight 3 check
#server s1 192.168.3.19:80 weight 3 check
# 创建 haproxy.cfg
mkdir /etc/haproxy
cd /etc/haproxy
vim haproxy.cfg global #全局设置daemon #以后台进程运行maxconn 256 #每个进程的最大连接数nbproc 1 #进程数,该值可以设置小于或等于cpu核心数balance roundrobin #默认的负载均衡的方式,轮询方式 #balance source #默认的负载均衡的方式,类似nginx的ip_hash #balance leastconn #默认的负载均衡的方式,最小连接 defaultsoption http-keep-aliveoption forwardformaxconn 256#设置http(七层模式),也可设置为tcp(四层模式),另外还有一个Health健康监测模式。对mysql进行负载均衡的话,这里记得修改为tcpmode http timeout connect 5000mstimeout client 50000mstimeout server 50000mslisten statsmode httpbind 0.0.0.0:9999stats refresh 30s #自动刷新时间stats uri /stats #项目名为status,ip+端口+项目名即可访问stats auth admin:admin #配置管理用户账号密码stats admin if TRUEstats hide-versionlisten web_portbind 10.0.0.7:80mode httpserver web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
backend serversserver server1 172.16.1.230:80 check inter 2000 rise 3 fall 3 weight 1 maxconn 32
使用指定配置文件运行haproxy。建议都haproxy和hadproxy.cfg都使用绝对路径
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
上面错误是因为没有启动web服务器,注释了监听端口后依然报错,因为haproxy检测不到listener
注意事项见上面图片
cd /etc/init.d
vim haproxy#!/bin/sh
#
# chkconfig: - 85 15
# description: HAProxy is a TCP/HTTP reverse proxy which is particularly suited
# for high availability environments.
# processname: haproxy
# config: /usr/local/haproxy/etc/haproxy.cfg
# pidfile: /usr/local/haproxy/etc/run/haproxy.pid# Script Author: Simon Matter <simon.matter@invoca.ch>
# Version: 2004060600# Source function library.
if [ -f /etc/init.d/functions ]; then. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then. /etc/rc.d/init.d/functions
elseexit 0
fi# Source networking configuration.
. /etc/sysconfig/network# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0# This is our service name
BASENAME=`basename $0`
if [ -L $0 ]; thenBASENAME=`find $0 -name $BASENAME -printf %l`BASENAME=`basename $BASENAME`
fiBIN=/usr/sbin/$BASENAMECFG=/usr/local/$BASENAME/etc/$BASENAME.cfg
[ -f $CFG ] || exit 1PIDFILE=/usr/local/$BASENAME/run/$BASENAME.pid
LOCKFILE=/usr/local/$BASENAME/run/$BASENAMERETVAL=0start() {quiet_checkif [ $? -ne 0 ]; thenecho "Errors found in configuration file, check it with '$BASENAME check'."return 1fiecho -n "Starting $BASENAME: "daemon $BIN -D -f $CFG -p $PIDFILERETVAL=$?echo[ $RETVAL -eq 0 ] && touch $LOCKFILEreturn $RETVAL
}stop() {echo -n "Shutting down $BASENAME: "killproc $BASENAME -USR1RETVAL=$?echo[ $RETVAL -eq 0 ] && rm -f $LOCKFILE[ $RETVAL -eq 0 ] && rm -f $PIDFILEreturn $RETVAL
}restart() {quiet_checkif [ $? -ne 0 ]; thenecho "Errors found in configuration file, check it with '$BASENAME check'."return 1fistopstart
}reload() {if ! [ -s $PIDFILE ]; thenreturn 0fiquiet_checkif [ $? -ne 0 ]; thenecho "Errors found in configuration file, check it with '$BASENAME check'."return 1fi$BIN -D -f $CFG -p $PIDFILE -sf $(cat $PIDFILE)
}check() {$BIN -c -q -V -f $CFG
}quiet_check() {$BIN -c -q -f $CFG
}rhstatus() {status $BASENAME
}condrestart() {[ -e $LOCKFILE ] && restart || :
}# See how we were called.
case "$1" instart)start;;stop)stop;;restart)restart;;reload)reload;;condrestart)condrestart;;status)rhstatus;;check)check;;*)echo $"Usage: $BASENAME {start|stop|restart|reload|condrestart|status|check}"exit 1
esacexit $?
[root@MiWiFi-R3L-srv ~]# /etc/init.d/haproxy start
Starting haproxy (via systemctl): Job for haproxy.service failed because the control process exited with error code. See "systemctl status haproxy.service" and "journalctl -xe" for details.[失败]
# 需要执行 systemctl status haproxy.service 或者 journalctl -xe 来查看具体的报错
systemctl status haproxy.service
journalctl -xe
查看/etc/rc.d/init.d/haproxy 使用 killproc 命令 查看是否 killproc 环境
stop() {echo -n "Shutting down $BASENAME: "killproc $BASENAME -USR1RETVAL=$?echo[ $RETVAL -eq 0 ] && rm -f $LOCKFILE[ $RETVAL -eq 0 ] && rm -f $PIDFILEreturn $RETVAL
}
参考图片 也是在网上查的资料 尝试过 对我的错误没有见效,也许对你的错误有用。
==与上面创建haproxy脚本使用功能一个就行了,但是要注意里面的路径要正确=
cd /usr/lib/systemd/system
vim haproxy.service[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /usr/local/haproxy/etc/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID[Install]
WantedBy=multi-user.target#默认缺少配置文件,无法启动
systemctl daemon-reload
systemctl start haproxy
小结:看遍教程千千万,不如实操来一遍,本人在实操过程中,没有按照教程的中路径,中间出现很多错误,鉴于对运维知识不是很熟悉,踩了很多的坑。如果此文能帮助到你,麻烦点个赞。谢谢。
本文发布于:2024-02-01 10:06:34,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170675319635876.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |