一、编译安装HAProxy
1.1、下载源代码
# HAProxy源码
wget http://www.haproxy.org/download/2.6/src/haproxy-2.6.5.tar.gz
# Lua源码
wget http://www.lua.org/ftp/lua-5.4.4.tar.gz
1.2、解压安装
# Lua安装
tar zxf lua-5.4.4.tar.gz -C /usr/local/
cd /usr/local/lua-5.4.4/
make all test
ln -s /usr/local/lua-5.4.4/src/lua /usr/bin/lua
# HAProxy安装
yum install openssl-devel pcre-devel systemd-devel -y
tar xf haproxy-2.6.6.tar.gz
cd haproxy-2.6.6
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 UES_ZLIB=1 USE_SYSTEMD=1 PREFIX=/usr/local/haproxy USE_LUA=1 LUA_INC=/usr/local/lua-5.4.4/src/ LUA_LIB=/usr/local/lua-5.4.4/src/
make install PREFIX=/usr/local/haproxy
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
#验证安装成功
haproxy -v
# 创建HAProxy的service文件
cat > /usr/lib/systemd/system/haproxy.service <<EOF
[Unit]
Description=HAProxy Load Balencer
After=syslog.target network.terget
[Service]
ExecStartPre=/usr/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /usr/local/haproxy/conf/haproxy.cfg -p /usr/local/haproxy/haproxy.pid
ExecReload=/bin/kill -UER2 $MAINPID
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
EOF
1.3、设置开机启动
systemctl enable haproxy
1.4、创建haproxy账号
useradd -r -s /sbin/nologin haproxy
1.5、创建配置文件
# 创建配置文件:
#1、创建配置文件夹和添加配置文件
mkdir /usr/local/haproxy/conf
vim /usr/local/haproxy/conf/haproxy.cfg
#2、配置文件内容如下:
global
log 127.0.0.1 local3 info #在本机记录日志
maxconn 100000 #每个进程可用的最大连接数
chroot /usr/local/haproxy #haproxy 安装目录
stats socket /usr/local/haproxy/haproxy.sock mode 600 level admin
user haproxy #运行haproxy的用户,可以使用用户uid)
group haproxy #运行haproxy的用户组,可以使用用户组id)
daemon #以后台守护进程运行
pidfile /usr/local/haproxy/haproxy.pid
defaults
log global
mode http #运行模式 tcp、 http、 health
retries 3 #三次连接失败,则判断服务不可用
option redispatch #服务不可用后重定向到其他健康服务器
option httplog #表示开始打开记录http请求的日志功能。
option http-keep-alive
option forwardfor
timeout connect 5000 #连接超时
timeout client 50000 #客户端超时
timeout server 50000 #服务器端超时
frontend http_front
bind *:80 #监听 80 端口
#mode http #运行模式 tcp、 http、 health
#log global
default_backend http_back
backend http_back
#mode http
balance roundrobin #设置负载均衡模式,source 保存 session 值,roundrobin 轮询模式
#option httpchk GET /index.html
#option forwardfor header X-Forwarded-For
server 172.16.10.101 172.16.10.101:8080 check inter 2000 rise 2 fall 3
server 172.16.10.102 172.16.10.102:8080 check inter 2000 rise 2 fall 3
listen stats
#mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status #统计页面 URL 路径
stats refresh 30s #统计页面自动刷新时间
stats realm haproxy-status #统计页面输入密码框提示信息
stats auth admin:Mr13579_ #统计页面用户名和密码
stats hide-version #隐藏统计页面上 HAProxy 版本信息
stats admin if TRUE #管理功能,需要开启stats auth成功登陆后可通过webui管理节点
#3、编辑系统日志配置
vim /etc/rsyslog.conf
#4、以下两行去掉注释
$ModLoad imudp
$UDPServerRun 514
#5、添加local3
local3.* /usr/local/haproxy/logs/haproxy.log
#6、创建/usr/local/haproxy/logs目录
mkdir /usr/local/haproxy/logs
#7、重启rsyslog
systemctl restart rsyslog
1.6、启动HAProxy
systemctl start haproxy
二、Ubuntu安装HAProxy
apt-get install --no-install-recommends software-properties-common
add-apt-repository ppa:vbernat/haproxy-2.6
apt-get install haproxy=2.6.\*
三、Keepalived安装
keepalived安装
yum install -y keepalived
配置文件
! Configuration File for keepalived
global_defs {
router_id haproxy-master # 路由ID,标识本节点的字符串,可设置成当前主机名
}
vrrp_script chk_haproxy {
script "/etc/keepalived/scripts/haproxy_check.sh" # 心跳检测脚本,检测haproxy是否启动
interval 2 # 检测脚本执行的问题,单位是秒
timeout 2
fail 3
}
vrrp_instance haproxy {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens18 # 节点固有IP(非VIP)的网卡,用来发VRRP包
virtual_router_id 51 # 虚拟路由编号,主从要一致
priority 100 # 优先级,数值越大,获取处理请求的优先级越高,主从之间最好差50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.10.200 # 定义虚拟IP(VIP)
}
track_script {
chk_haproxy # 配置上面自定义的vrrp脚本调用名
}
notify_master "/etc/keepalived/scripts/haproxy_master.sh" #记录切换为主节点的信息
}
设置haproxy_check.sh脚本
cat > haproxy_check.sh <<EOF
#!/bin/bash
LOGFILE="/var/log/keepalived-haproxy-state.log"
date >> $LOGFILE
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ];then
echo "fail: check_haproxy status" >> $LOGFILE
echo "Try to start haproxy service" >> $LOGFILE
systemctl start haproxy #重启haproxy服务
sleep 2
if [ $A -eq 0 ];then #如果启动失败,就进行VIP 转移
echo "Can not start haproxy service, so will stop keepalived service" >> $LOGFILE
systemctl stop keepalived
fi
else
echo "success: check_haproxy status" >> $LOGFILE
fi
EOF
设置haproxy_master.sh脚本,并设置两个脚本的文件权限为777
#!/bin/bash
LOGFILE="/var/log/keepalived-haproxy-state.log"
echo "Being Master ..." >> $LOGFILE
评论区