HA haproxy 2.0 安装-2
- 判断linxu 内核
- 通过readme文件 使用make编译haproxy
- 安装/usr/local/权限需要修改
- 修改系统日志
- 通过makefile文件
- haproxy.init 自带启动脚本
- 编译安装Haproxy(下面是操作是时用的命令)
- 创建 haproxy.cfg
- 通过命令方式启动haproxy
- 创建haproxy 启动脚本(即前面修改的启动脚本图片的最终内容)
- 服务脚本 启动脚本排错
- 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.
- /etc/rc.d/init.d/haproxy: 第 26 行:[: =: 期待一元表达式
- 修改完/etc/rc.d/init.d/haproxy 记得 执行systemctl daemon-reload 否则可能不生效。
- service haproxy stop 不生效
- Starting SYSV: HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high availabili
- 服务 启动脚本 2
前言:最近项目组需要搭建一个高可用系统,用到的是keepalived+haproxy的架构技术,作为小白的我也是搜了很多资料,最终测试环境部署成功。虽然实现了应有的功能,但是对于haproxy的更多功能也是一直半解,通过该文章做一个系统的复习。
判断linxu 内核
uname -r
3.10.0-327.el7.x86_64
通过readme文件 使用make编译haproxy
编译haproxy 参数 需要查看 解压后haproxy中的readme文件
编译安装
查看编译完成后是否报错
安装haproxy 查看/usr/local/haproxy 目录是否生成
haproxy.cfg
安装/usr/local/权限需要修改
因为haproxy.cfg配置中uid gid 是99
使用 id 99 查看用户组id 99 的用户组权限
递归修改haproxy的权限
chown nobody /usr/local/haproxy/ -R
修改系统日志
添加日志以及路径
重启系统日志
通过makefile文件
PREFIX :指定安装路径
指定 内核版本 TARGET=linux2628
haproxy.init 自带启动脚本
需要将启动脚本复制到指定目录
注意:linux基础差的可能看不懂haproxy.init 脚本 如果安装目录和配置文件目录和脚本中的不一样,就可能出现意想不到的错误。
本人修改hoproxy.init 修改点如下
编译安装Haproxy(下面是操作是时用的命令)
cd /usr/local/software
yum -y install gcc openssl-devel pcre-devel systemd-devel
# 后面网址可以在浏览器中打开查看是否存在当前版本 (本人尝试好几个地址 下面地址可用)
wget http://download.openpkg.org/components/cache/haproxy/haproxy-2.4.2.tar.gz
# 因为本人使用不是root用 故前面加sudo
sudo tar xvf haproxy-2.4.2.tar.gz -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 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2026.
Known bugs: http://www.haproxy.org/bugs/bugs-2.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
# 创建 haproxy.cfg (本人没有安装httpd 仅仅测试haproxy 目录是自己的目录)
cd /usr/local/haproxy/etc/
vim haproxy
global
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.pid
defaults
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.html
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats 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 #默认的负载均衡的方式,最小连接
defaults
option http-keep-alive
option forwardfor
maxconn 256
#设置http(七层模式),也可设置为tcp(四层模式),另外还有一个Health健康监测模式。对mysql进行负载均衡的话,这里记得修改为tcp
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen stats
mode http
bind 0.0.0.0:9999
stats refresh 30s #自动刷新时间
stats uri /stats #项目名为status,ip+端口+项目名即可访问
stats auth admin:admin #配置管理用户账号密码
stats admin if TRUE
stats hide-version
listen web_port
bind 10.0.0.7:80
mode http
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
backend servers
server server1 172.16.1.230:80 check inter 2000 rise 3 fall 3 weight 1 maxconn 32
通过命令方式启动haproxy
使用指定配置文件运行haproxy。建议都haproxy和hadproxy.cfg都使用绝对路径
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
上面错误是因为没有启动web服务器,注释了监听端口后依然报错,因为haproxy检测不到listener
创建haproxy 启动脚本(即前面修改的启动脚本图片的最终内容)
注意事项见上面图片
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
else
exit 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 ]; then
BASENAME=`find $0 -name $BASENAME -printf %l`
BASENAME=`basename $BASENAME`
fi
BIN=/usr/sbin/$BASENAME
CFG=/usr/local/$BASENAME/etc/$BASENAME.cfg
[ -f $CFG ] || exit 1
PIDFILE=/usr/local/$BASENAME/run/$BASENAME.pid
LOCKFILE=/usr/local/$BASENAME/run/$BASENAME
RETVAL=0
start() {
quiet_check
if [ $? -ne 0 ]; then
echo "Errors found in configuration file, check it with '$BASENAME check'."
return 1
fi
echo -n "Starting $BASENAME: "
daemon $BIN -D -f $CFG -p $PIDFILE
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $LOCKFILE
return $RETVAL
}
stop() {
echo -n "Shutting down $BASENAME: "
killproc $BASENAME -USR1
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
[ $RETVAL -eq 0 ] && rm -f $PIDFILE
return $RETVAL
}
restart() {
quiet_check
if [ $? -ne 0 ]; then
echo "Errors found in configuration file, check it with '$BASENAME check'."
return 1
fi
stop
start
}
reload() {
if ! [ -s $PIDFILE ]; then
return 0
fi
quiet_check
if [ $? -ne 0 ]; then
echo "Errors found in configuration file, check it with '$BASENAME check'."
return 1
fi
$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" in
start)
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
esac
exit $?
服务脚本 启动脚本排错
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.
[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: 第 26 行:[: =: 期待一元表达式
修改完/etc/rc.d/init.d/haproxy 记得 执行systemctl daemon-reload 否则可能不生效。
service haproxy stop 不生效
查看/etc/rc.d/init.d/haproxy 使用 killproc 命令 查看是否 killproc 环境
stop() {
echo -n "Shutting down $BASENAME: "
killproc $BASENAME -USR1
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
[ $RETVAL -eq 0 ] && rm -f $PIDFILE
return $RETVAL
}
Starting SYSV: HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high availabili
参考图片 也是在网上查的资料 尝试过 对我的错误没有见效,也许对你的错误有用。
服务 启动脚本 2
==与上面创建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
小结:看遍教程千千万,不如实操来一遍,本人在实操过程中,没有按照教程的中路径,中间出现很多错误,鉴于对运维知识不是很熟悉,踩了很多的坑。如果此文能帮助到你,麻烦点个赞。谢谢。