目 录CONTENT

文章目录

HAProxy+Keepalived负载均衡高可用

ZERO
2022-11-14 / 0 评论 / 0 点赞 / 60 阅读 / 0 字

一、编译安装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
0

评论区