前言
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
安装
正常安装
默认情况下haproxy不会对系统和CPU做优化,因此如果有必要还是可以用uname先查看一下
$ uname -r
下面是HAProxy 1.8支持的 OS。
To build haproxy, you have to choose your target OS amongst the following ones and assign it to the TARGET variable : - linux22 for Linux 2.2 - linux24 for Linux 2.4 and above (default) - linux24e for Linux 2.4 with support for a working epoll (> 0.21) - linux26 for Linux 2.6 and above - linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy) - solaris for Solaris 8 or 10 (others untested) - freebsd for FreeBSD 5 to 10 (others untested) - netbsd for NetBSD - osx for Mac OS/X - openbsd for OpenBSD 5.7 and above - aix51 for AIX 5.1 - aix52 for AIX 5.2 - cygwin for Cygwin - haiku for Haiku - generic for any other OS or version. - custom to manually adjust every setting
安装
$ yum install -y gcc pcre-devel openssl openssl-devel make psmisc systemd-devel $ cd /usr/local/src $ wget https://www.haproxy.org/download/1.8/src/haproxy-1.8.21.tar.gz $ tar xf haproxy-1.8.21.tar.gz && cd /usr/local/src/haproxy-1.8.21 $ make TARGET=linux2628 USE_OPENSSL=1 ADDLIB=-ldl USE_ZLIB=1 USE_PCRE=1 USE_SYSTEMD=1 $ make install PREFIX=/usr/local/haproxy-1.8.21 $ ln -s /usr/local/haproxy-1.8.21 /usr/local/haproxy
自定义Openssl(可选)
系统版本自带的openssl通常比较旧(可能会有一下安全漏洞是没有解决的),可以考虑自己编一个。
要针对haproxy静态链接OpenSSL,请使用no-shared
关键字构建OpenSSL并将其安装到本地目录,这样您的系统就不会受到影响:
安装openssl
# 下载openssl(注意:目前haproxy1.8是不支持openssl-1.1.x的) $ cd /usr/local/src $ wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz $ tar xf openssl-1.0.2t.tar.gz && cd /usr/local/src/openssl-1.0.2t $ export STATICLIBSSL=/usr/local/src/staticlibssl/openssl-1.0.2t $ ./config --prefix=$STATICLIBSSL no-shared $ make && make install_sw
安装
$ yum install -y gcc pcre-devel make psmisc systemd-devel $ cd /usr/local/src $ wget https://www.haproxy.org/download/1.8/src/haproxy-1.8.21.tar.gz $ tar xf haproxy-1.8.21.tar.gz && cd /usr/local/src/haproxy-1.8.21 $ make TARGET=linux2628 \ USE_OPENSSL=1 \ SSL_INC=$STATICLIBSSL/include \ SSL_LIB=$STATICLIBSSL/lib \ ADDLIB=-ldl \ USE_ZLIB=1 \ USE_PCRE=1 \ USE_SYSTEMD=1 $ make install PREFIX=/usr/local/haproxy-1.8.21 $ ln -s /usr/local/haproxy-1.8.21 /usr/local/haproxy
初始化
查看版本号和编译参数
$ /usr/local/haproxy/sbin/haproxy -vv
初始化环境
$ sudo mkdir -p /usr/local/haproxy/etc/ $ sudo mkdir -p /var/lib/haproxy $ sudo useradd -s /sbin/nologin haproxy $ chown haproxy:haproxy -R /usr/local/haproxy
拷贝启动脚本(该脚本需要额外修改一下))
$ cp /usr/local/src/haproxy-1.8.21/contrib/systemd/haproxy.service.in /usr/lib/systemd/system/haproxy.service
配置文件
常用的配置文件
$ vim /usr/local/haproxy/etc/haproxy.cfg # 用于设置全局配置参数 global log 127.0.0.1 local3 warning # 每个进程可用的最大连接数 maxconn 50000 # 设置进程数量 nbproc 4 user haproxy group haproxy daemon chroot /usr/local/haproxy/ pidfile /var/run/haproxy.pid ssl-default-bind-options no-sslv3 no-tls-tickets force-tlsv12 ssl-default-bind-ciphers EECDH+AESGCM:EDH+AESGCM tune.ssl.default-dh-param 2048 # 默认参数的配置部分。 defaults log global mode tcp # 是否允许重新分配在session 失败后 option redispatch # # 如果服务器上的应用程序想记录发起请求的客户端的IP地址,需要在HAProxy上配置此选项,这样HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段 # # 仅仅适用于http模式 # option forwardfor # # 表示开始打开记录http请求的日志功能 # # 仅仅适用于http模式 # option httplog # 保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。 option dontlognull # 丢弃由于客户端等待时间过长而关闭连接但仍在haproxy等待队列中的请求 # 当haproxy负载很高时,自动结束掉当前队列处理比较久的链接。 option abortonclose # HAProxy会针对客户端的第一条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略此cookie值会影响处理结果。如果避免这种情况配置此选项,防止产生多余的cookie信息。 option httpclose # # 支持会话长连接 # # 仅仅适用于http模式 # option http-keep-alive # option http-server-close # # 允许连续的流量统计更新 # option contstats # # 记录健康检查日志 # option log-health-checks # HAProxy把请求轮流的转发到每一个服务器上,依据每台服务器的权重,此权重会动态调整。最常见的默认配置 # 其他的还有: roundrobin, source, leastconn balance roundrobin # 重试的次数 retries 3 timeout connect 3500 timeout queue 11000 timeout tarpit 12000 timeout client 30000 timeout http-request 40000 timeout http-keep-alive 5000 timeout server 40000 timeout check 7000 ## 参考模板 ## ------------------------------------------------------ # # listen部分此部分是frontend和backend部分的结合体。配置此部分不需要在配置 # # 统计页面配置 # listen admin_stats # bind 0.0.0.0:1080 # mode http # log 127.0.0.1 local3 err #[err warning info debug] # stats refresh 30s # stats uri /admin?stats # stats realm gao7\ Haproxy # stats auth admin:admin # stats hide-version # #stats admin if TRUE # # 用于设置接收用户请求的前端虚拟节点。frontend可以根据ACL规则直接指定要使用的后端backend。 # frontend test-proxy # bind 192.168.200.10:8080 # mode http # log global # option httplog # option dontlognull # option nolinger # option http_proxy # maxconn 8000 # timeout client 30s # # layer3: Valid users # acl allow_host src 192.168.200.150/32 # http-request deny if !allow_host # # layer7: prevent private network relaying # acl forbidden_dst url_ip 192.168.0.0/24 # acl forbidden_dst url_ip 172.16.0.0/12 # acl forbidden_dst url_ip 10.0.0.0/8 # http-request deny if forbidden_dst # default_backend test-proxy-srv # # 用于设置集群后端服务集群的配置,也就是添加一组真实服务器,以处理前端用户的请求。 # backend test-proxy-srv # mode http # timeout connect 5s # timeout server 5s # retries 2 # option nolinger # option http_proxy # # layer7: Only GET method is valid # acl valid_method method GET # http-request deny if !valid_method # # layer7: protect bad reply # http-response deny if { res.hdr(content-type) audio/mp3 # backend dynamic # mode http # balance roundrobin # retries 2 # option redispatch # timeout connect 5s # timeout server 30s # timeout queue 30s # option httpchk HEAD /login.php # cookie DYNSRV insert indirect nocache # fullconn 4000 # the servers will be used at full load above this number of connections # server dynsrv1 192.168.1.1:80 minconn 50 maxconn 500 cookie s1 check inter 1000 # server dynsrv2 192.168.1.2:80 minconn 50 maxconn 500 cookie s2 check inter 1000 # server dynsrv3 192.168.1.3:80 minconn 50 maxconn 500 cookie s3 check inter 1000 ## ------------------------online------------------------------ #####==================== tandy mysql ===================== # tandy cp1 mysql 3308 listen tandy_cp1_mysql_read_3308 0.0.0.0:3308 mode tcp balance roundrobin clitimeout 2h srvtimeout 2h server mysqlserv_148181_3308 10.19.1.1:3306 check inter 3000 rise 5 fall 6 weight 10 server mysqlserv_057154_3308 10.19.1.2:3306 check inter 3000 rise 5 fall 6 weight 5 backup
启动
$ sudo systemctl daemon-reload $ sudo systemctl status haproxy $ sudo systemctl start haproxy $ sudo systemctl enable haproxy
参考文档
tutorials/haproxy-load-balancer-centos/" style="background: transparent; border-bottom: 1px solid rgb(153, 153, 153); outline: 0px; text-decoration-line: none; overflow-wrap: break-word; cursor: pointer;">How to install HAProxy load balancer on CentOS
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/9088.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~