当前位置:   article > 正文

02 HA haproxy 2.0安装-2 编译安装haproxy haproxy启动服务脚本 haproxy.cfg_job for haproxy.service failed because the control

job for haproxy.service failed because the control process exited with error

前言:最近项目组需要搭建一个高可用系统,用到的是keepalived+haproxy的架构技术,作为小白的我也是搜了很多资料,最终测试环境部署成功。虽然实现了应有的功能,但是对于haproxy的更多功能也是一直半解,通过该文章做一个系统的复习。

判断linxu 内核

uname -r
3.10.0-327.el7.x86_64
  • 1
  • 2

在这里插入图片描述

通过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
  • 1

在这里插入图片描述
在这里插入图片描述

修改系统日志

在这里插入图片描述
添加日志以及路径
在这里插入图片描述
重启系统日志
在这里插入图片描述

通过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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

创建 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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
# 创建 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

通过命令方式启动haproxy

使用指定配置文件运行haproxy。建议都haproxy和hadproxy.cfg都使用绝对路径

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
  • 1

在这里插入图片描述
上面错误是因为没有启动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 $?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141

服务脚本 启动脚本排错

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

/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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

小结:看遍教程千千万,不如实操来一遍,本人在实操过程中,没有按照教程的中路径,中间出现很多错误,鉴于对运维知识不是很熟悉,踩了很多的坑。如果此文能帮助到你,麻烦点个赞。谢谢。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/987858
推荐阅读
相关标签
  

闽ICP备14008679号