- HAProxy管理指南(management.txt):version 2.5
1、启动HAProxy
- HAProxy是一个多线程的、事件驱动的、非阻塞守护进程。大多数时候它作为一个单独的进程运行,所以系统上“ps aux”的输出将只有一个“haproxy”进程。
- HAProxy是无状态的,即在它被杀死后不需要清理,所以kill掉它即可。
haproxy [<options>]*
- [<options>]*是任意数量的参数。参数以'-'开头。命令行中的某些参数与配置文件的“global”部分的参数具有相同作用,命令行中的参数优先于配置文件中的,因此可以使用命令行快速修改某些设置,而不影响配置文件。
- -- <cfgfile>*:当依赖shell按数字排列顺序加载多个配置文件时,它非常有用。每个文件的第一个关键字必须是"global"、"defaults"、"peers"、"listen"、"frontend"、"backend"等中的一个。
- -f:如果是文件,加载配置文件cfgfile。如果是目录,按词法顺序(使用LC_COLLATE=C)加载cfgdir目录中的所有以“.cfg”结尾的文件(非隐藏文件)。可以重复使用-f加载多个配置文件,每个文件的第一个关键字必须是"global"、"defaults"、"peers"、"listen"、"frontend"、"backend"等中的一个。
- -p
- -D:以守护进程的方式运行。相当于配置中的“global”部分中的“daemon”关键字。建议在任何初始化脚本中都强制使用它,这样错误的配置不会阻止系统启动。
- -m <limit>:限所有进程可以使用的内存总量。这可能会导致一些连接拒绝或一些速度下降,具体取决于正常操作所需的内存数量。这主要用于强制进程在受限的资源使用场景中工作。需要注意的是,内存不是在进程之间共享的,因此在多进程场景中,这个值首先除以进程的个数global.nbproc。
- -n <limit>:将每个进程的连接限制限制为<limit>。相当于全局section的关键字"maxconn"。
- -W:master-worker模式。等价于配置文件中的“global”部分中的“master-worker”关键字。这个模式会启动一个“master”来监控“workers”。master-worker模式与前台或守护模式兼容。建议在多进程和systemd场景下使用。
- -Ws:master-worker模式,支持'notify'类型的系统服务。此参数仅当HAProxy构建时启用'USE_SYSTEMD'构建参数时可用。
- -S <bind>[,bind_options...]:在master-worker模式下,绑定一个master CLI,允许访问每一个进程,运行或离开的进程。出于安全考虑,建议将主CLI绑定到本地UNIX套接字。相当于配置文件中的关键字“bind”,只是用逗号分隔,而不是空格。
- -c:只执行配置文件检查。如果一切正常,退出状态为零,如果遇到错误,退出状态为非零。如果有警告,将报告其存在。
- -cc:计算配置的条件块中使用的条件。如果条件为真,退出状态为零,如果条件为假,退出状态为1,如果遇到错误,退出状态为2。
- -d:启用调试模式。强制进程在前台运行,并显示输入和输出的事件。它绝对不能在初始化脚本中使用。
- -dD:启用诊断模式。此模式将输出关于可疑配置语句的额外警告。这将永远不会阻止启动,即使在“零警告”模式,也不会改变退出状态代码。
- -dG:禁止使用getaddrinfo()将主机名解析为地址。当怀疑getaddrinfo()没有按预期工作时,可以使用它。之所以提供这个参数,是因为在不同的系统上存在许多假的getaddrinfo()实现,并导致难以故障排除的异常。
- -dL:在加载配置文件结束时,输出加载的动态共享库列表。因为它不会停止程序的启动,所以建议只将它与"-c"和"-q"组合使用,只有加载的对象列表将被显示(或在出错时什么也不显示)
- -dM[<byte>]:强制内存中毒,这意味着每个使用malloc()或pool_alloc()分配的内存区域将被填充<byte>,在传递给调用者之前。未指定<byte>时,默认为0x50('P')。虽然这会稍微减慢操作速度,但有助于可靠地触发因缺少初始化而导致的问题导致随机崩溃的代码。注意-dM0的效果是将任何malloc()转换为calloc()。在任何情况下,如果出现错误或使用此参数时消失,这意味着haproxy中存在错误,因此请报告。
- -dS:禁用splice()系统调用。相当于“global”部分的“nosplice”关键字。当怀疑splice()不正常导致性能问题,或要使用strace查看转发的数据时(使用splice()时不会出现),要使用此参数。
- -dV:在服务器端禁用SSL验证。相当于在“global”部分设置“ssl-server-verifynone”。当试图在生产环境中重现生产问题时,这很有用。永远不要在初始化脚本中使用它,因为它会降低对服务器的SSL安全性。
- -dW:如果设置了该参数,在加载配置文件时发出任何警告,haproxy都将拒绝启动。这有助于检测细微的错误,并保持配置的整洁和跨版本的可移植性。当配置由人工管理时,建议在服务脚本中设置此参数,但建议不要将其与生成的配置一起使用,这往往会发出更多警告。它可能与“-c”组合在一起,导致检查配置中的警告失败。相当于在“global”部分设置"zero-warning"。
- -db:禁用后台模式和多进程模式。进程在前台运行。它主要用于开发或小型测试期间,因为Ctrl-C足以停止进程。永远不要在初始化脚本中使用它。
- -de:禁用“epoll”轮询器。相当于“global”部分的关键字“noepoll”。当怀疑bug与该轮询器相关时,它非常有用。在支持epoll的系统上,通常会使用“poll”轮询器。
- -dk:禁用“kqueue”轮询器。相当于"global"节的关键字"nokqueue"。当怀疑bug与该轮询器相关时,它非常有用。在支持kqueue的系统上,通常会使用“poll”轮询器。
- -dp:禁用“poll”轮询器。相当于“global”部分的关键字“nopoll”。当怀疑bug与该轮询器相关时,它非常有用。在支持轮询的系统上,通常会使用“select”轮询器,它不能被禁用,并且被限制为1024个文件描述符。
- -dr:忽略服务器地址解析失败。在生产环境下验证配置时,很常见的情况是不能访问相同的解析器,并且服务器地址解析失败,这使得测试配置变得困难。
- -N <limit>:将每个代理的默认最大连接数设置为<limit>,而不是内置的默认值(通常是2000)。仅对调试有用。
- -q:设置"quiet"模式。这将在配置解析和启动期间禁用一些消息。它可以与“-c”组合使用,以检查配置文件是否有效。
- -sf <pid>*:在启动完成后向旧进程发送“完成”信号(SIGUSR1),要求它们完成正在做的事情并离开。<pid>*是要发出信号的pid列表(每个参数一个)。列表以任何以“-”开头的参数结束。如果pid列表为空,则没有问题,因为可以根据“pidof”或“pgrep”等命令的结果动态构建它。
- -st <pid>*:在启动完成后,向旧进程发送“终止”信号(SIGTERM),以立即终止它们,而不完成它们正在做的事情。<pid>*是要发出信号的pid列表(每个参数一个)。列表以任何以“-”开头的参数结束。如果pid列表为空,则没有问题,因为可以根据“pidof”或“pgrep”等命令的结果动态构建它。
- -C <dir>:在加载配置文件之前更改目录<dir>。在使用相对路径时很有用。
- -L <name>:修改本地对端名称,默认为本地主机名。这只用于对等复制。可以在配置文件中使用变量$HAPROXY_LOCALPEER来引用本地对端名称。
- -x <unix_socket>:连接到指定的套接字,并尝试从旧进程中检索侦听的套接字,并使用它们,而不是尝试绑定新的套接字。这有助于避免在Linux上重新加载配置时丢失任何新连接。必须在配置文件中使用expose-fd listeners”。
- -v:输出版本号和构建日期。
- -vv:显示版本、构建参数、库版本和可用的轮询器。当提交bug报告时,系统地请求这个输出。
- -V:启用详细模式
示例:
//-f要加载配置文件,-D以守护进程的方式运行,-p将pid存放到文件中,-sf启动完成后让旧进程完成工作并离开
haproxy -f /etc/haproxy.cfg \
-D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
//当配置被拆分成几个特定文件时(例如:tcp vs http)。建议使用-f
haproxy -f /etc/haproxy/global.cfg -f /etc/haproxy/stats.cfg \
-f /etc/haproxy/default-tcp.cfg -f /etc/haproxy/tcp.cfg \
-f /etc/haproxy/default-http.cfg -f /etc/haproxy/http.cfg \
-D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
//当需要加载未知数量的文件使用-D
haproxy -f /etc/haproxy/global.cfg -f /etc/haproxy/stats.cfg \
-f /etc/haproxy/default-tcp.cfg -f /etc/haproxy/tcp.cfg \
-f /etc/haproxy/default-http.cfg -f /etc/haproxy/http.cfg \
-D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid) \
-f /etc/haproxy/default-customers.cfg -- /etc/haproxy/customers/*
1
# #