HAProxy的安装、配置和使用

HAProxy的安装、配置和使用

安装

官网下载源文件,我下载的是haproxy-1.8.9.tar.gz
切换用管理员身份安装:su
安装命令

tar -zxvf haproxy-1.8.9.tar.gz
cd haproxy-1.8.9/
make TARGET=linux2628 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

安装成功,查看HAProxy的版本信息:

[root@localhost haproxy-1.8.9]# /usr/local/haproxy/sbin/haproxy -v
HA-Proxy version 1.8.9-83616ec 2018/05/18
Copyright 2000-2018 Willy Tarreau <willy@haproxy.org>

配置

配置用户

[root@localhost haproxy-1.8.9]# groupadd haproxy
[root@localhost haproxy-1.8.9]# useradd -g haproxy haproxy -s /sbin/nologin

配置文件

默认安装目录下没有配置文件,只有docsbinshare三个目录,可手工创建目录及配置文件。

haproxy的配置文件主要是以下5部分:
1. global全局配置
2. defaults默认配置
3. 监控页面配置
4. frontend配置
5. backend配置

创建配置文件:

[root@localhost haproxy-1.8.9]# mkdir -p /usr/local/haproxy/etc
[root@localhost haproxy-1.8.9]# cd /usr/local/haproxy/etc/
[root@localhost etc]# touch haproxy.cfg

编写配置文件haproxy.cfg(转发TCP)

#全局配置, 用于设定义全局参数, 属于进程级的配置, 通常与操作系统配置有关.
global
    #定义全局日志, 配置在本地, 通过local0 输出, 默认是info级别,可配置两条
    log 127.0.0.1 local0 debug
    #定义日志级别【error warning info debug】
    #log 127.0.0.1 local1 info

    #运行路径
    chroot /usr/local/haproxy
    #PID 文件存放路径
    pidfile /var/run/haproxy.pid

    #设置每haproxy进程的最大并发连接数, 其等同于命令行选项“-n”; “ulimit -n”自动计算的结果参照此参数设定.
    maxconn 4096

    #运行haproxy 用户, 或者使用关键字uid
    user haproxy

    #运行haproxy 用户组, 或者使用关键字gid
    group haproxy

    #后台运行haproxy
    daemon

    #设置启动的haproxy进程数量, 只能用于守护进程模式的haproxy;
    #默认只启动一个进程, 鉴于调试困难等多方面的原因, 一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式.
    nbproc 1

    #设置每进程所能够打开的最大文件描述符数目, 默认情况其会自动进行计算, 因此不推荐修改此选项.
    #ulimit-n 819200

    #调试级别, 一般只在开启单进程时调试, 且生产环境禁用.
    #debug

    #haproxy启动后不会显示任何相关信息, 这与在命令行启动haproxy时加上参数“-q”相同
    #quiet

    #定义统计信息保存位置
    stats socket /usr/local/haproxy/stats

#默认配置 
defaults
    #默认的模式【tcp:4层; http:7层; health:只返回OK】
    mode tcp

    #继承全局的日志定义输出
    log global

    #日志类别 【httplog、tcplog】
    option tcplog

    #3次连接失败就认为是服务器不可用,也可以通过后面设置
    retries 3
    #当与后端服务器的会话失败(服务器故障或其他原因)时, 把会话重新分发到其他健康的服务器上; 当故障服务器恢复时, 会话又被定向到已恢复的服务器上;
    option redispatch

    #当haproxy负载很高时, 自动结束掉当前队列处理比较久的链接.
    option abortonclose

    #默认的最大连接数
    maxconn 32000

    #haproxy与后端服务器连接超时时间.
    timeout connect 5s
    #客户端与haproxy连接后, 数据传输完毕, 不再有数据传输, 即非活动连接的超时时间.
    timeout client 1m
    #haproxy与后端服务器非活动连接的超时时间.
    timeout server 1m

    #设置默认的负载均衡方式
    #balance source
    #balnace leastconn

listen communication_control
    #配置监控运行模式
    mode tcp

    option tcplog

    #配置访问端口
    bind 0.0.0.0:3211

    #负载均衡算法
    balance roundrobin

    #后端服务器定义, maxconn 1024表示该服务器的最大连接数, weight代表权重(默认1,最大为265,0则表示不参与负载均衡),
    #check inter 1500是检测心跳频率, rise 2是2次正确认为服务器可用, fall 3是3次失败认为服务器不可用.
    server sh-nh-b2-2-q12-cpp-3-3-unicom 140.206.200.243:3211 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-3-telecom 114.80.138.115:3211 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-4-unicom 140.206.200.244:3211 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-4-telecom 114.80.138.116:3211 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3

listen communication_control_web
    #配置监控运行模式
    mode tcp

    option tcplog

    #配置访问端口
    bind 0.0.0.0:3212

    #负载均衡算法
    balance roundrobin

    #后端服务器定义, maxconn 1024表示该服务器的最大连接数, weight代表权重(默认1,最大为265,0则表示不参与负载均衡),
    #check inter 1500是检测心跳频率, rise 2是2次正确认为服务器可用, fall 3是3次失败认为服务器不可用.
    server sh-nh-b2-2-q12-cpp-3-3-unicom 140.206.200.243:3212 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-3-telecom 114.80.138.115:3212 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-4-unicom 140.206.200.244:3212 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-4-telecom 114.80.138.116:3212 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3

listen communication_push
    #配置监控运行模式
    mode tcp

    option tcplog

    #配置访问端口
    bind 0.0.0.0:3221

    #负载均衡算法
    balance roundrobin

    #后端服务器定义, maxconn 1024表示该服务器的最大连接数, weight代表权重(默认1,最大为265,0则表示不参与负载均衡),
    #check inter 1500是检测心跳频率, rise 2是2次正确认为服务器可用, fall 3是3次失败认为服务器不可用.
    server sh-nh-b2-2-q12-cpp-3-3-unicom 140.206.200.243:3221 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-3-telecom 114.80.138.115:3221 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-4-unicom 140.206.200.244:3221 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-4-telecom 114.80.138.116:3221 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3

listen communication_push_web
    #配置监控运行模式
    mode tcp

    option tcplog

    #配置访问端口
    bind 0.0.0.0:3222

    #负载均衡算法
    balance roundrobin

    #后端服务器定义, maxconn 1024表示该服务器的最大连接数, weight代表权重(默认1,最大为265,0则表示不参与负载均衡),
    #check inter 1500是检测心跳频率, rise 2是2次正确认为服务器可用, fall 3是3次失败认为服务器不可用.
    server sh-nh-b2-2-q12-cpp-3-3-unicom 140.206.200.243:3222 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-3-telecom 114.80.138.115:3222 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-4-unicom 140.206.200.244:3222 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3
    server sh-nh-b2-2-q12-cpp-3-4-telecom 114.80.138.116:3222 weight 30 maxconn 10000 check inter 1500 rise 2 fall 3

#统计页面配置
listen admin_stats
    bind 0.0.0.0:8099 #监听端口
    mode http         #http的7层模式
    option httplog    #采用http日志格式
    #log 127.0.0.1 local0 err
    maxconn 10
    stats refresh 30s #统计页面自动刷新时间
    stats uri /stats  #</span><span style="color:#ff0000;"><strong>统计页面url:port/stats</strong></        span><pre name="code" class="cpp" style="color: rgb(80, 80, 80); font-size: 14px; line-height: 28px;"><span style="font-family: 宋体, 'Arial Narrow', arial, serif;">stats realm XingCloud\ Haproxy #统计页面密码框上提示文本</span>

error文件

配置文件中统计监控页面部分定义了error文件,将安装包中的文件复制到安装目录使用。(aproxy-1.8.9/examples/errorfiles/是源文件解压的地方)

cp -r haproxy-1.8.9/examples/errorfiles/ /usr/local/haproxy/

日志文件

创建文件
[root@localhost haproxy]# mkdir -p /usr/local/haproxy/log
[root@localhost haproxy]# touch /usr/local/haproxy/log/haproxy.log
[root@localhost haproxy]# ln -s /usr/local/haproxy/log/haproxy.log /var/log
[root@localhost haproxy]# chown haproxy:haproxy /var/log/haproxy.log
rsyslog主配置文件

修改”SYSLOGD_OPTIONS”参数,-c 2 使用兼容模式,默认是 -c 5;-r 开启远程日志;-m 0 标记时间戳,单位是分钟,0表示禁用该功能。

[root@localhost haproxy]# vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 2 -r -m 0"

systemctl restart rsyslog
haproxy.conf文件
[root@localhost haproxy]# cd /etc/rsyslog.d/
[root@localhost rsyslog.d]# touch haproxy.conf
[root@localhost rsyslog.d]# chown haproxy:haproxy haproxy.conf
[root@localhost rsyslog.d]# vim haproxy.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# haproxy.log
# 
local0.* /usr/local/haproxy/log/haproxy.log
#local1.* /usr/local/haproxy/log/haproxy.log
local2.* /usr/local/haproxy/log/haproxy.log
&~

[minbo@localhost haproxy-1.8.9]$ systemctl restart rsyslog.service
[minbo@localhost haproxy-1.8.9]$ setenforce 0

haproxy默认没有日志,依靠rsyslog收集日志;
文件最末尾的“&~”,如果没有此配置,日志除写入指定文件外,会同步写入messages文件;
关闭selinux,本文因没有关闭selinux导致排查问题用了半天时间。

配置文件权限及软连接
[root@localhost rsyslog.d]# chown -R haproxy:haproxy /usr/local/haproxy/
[root@localhost rsyslog.d]# mkdir -p /etc/haproxy
[root@localhost rsyslog.d]# ln -s /usr/local/haproxy/etc/haproxy.cfg /etc/haproxy/
[root@localhost rsyslog.d]# chown -R haproxy:haproxy /etc/haproxy

配置开机启动

[root@localhost haproxy]# cp haproxy-1.8.9/examples/haproxy.init /etc/rc.d/init.d/haproxy
[root@localhost haproxy]# chown haproxy:haproxy /etc/rc.d/init.d/haproxy
[root@localhost haproxy]# chmod +x /etc/rc.d/init.d/haproxy

haproxy-1.8.9/examples/haproxy.init是源文件解压文件

配置全局启动文件

[root@localhost haproxy]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
[root@localhost haproxy]# chown haproxy:haproxy /usr/sbin/haproxy

采用软链接的方式

配置防火墙(暂未设置)

[root@elk-node2 ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1081 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m tcp --dport 514 -j ACCEPT
[root@elk-node2 ~]# service iptables restart

开放如上端口,均在配置文件中有定义,日志端口在rsyslog.d/haproxy.conf文件中定义。

启动并验证

启动服务

[minbo@localhost ~]$ service haproxy start

验证端口

netstat -ntlp

可以查看监听的端口是不是正确

在统计页面查看统计情况

0.0.0.0:8099/stats

该地址对应haproxy.cfg文件中listen admin_stats中的bind

查看日志

tail -f /var/log/haproxy.log

参考

http://blog.chinaunix.net/uid-26168435-id-5761429.html

猜你喜欢

转载自blog.csdn.net/lmb1612977696/article/details/81168533