- 准备过程
准备几台机器,如下:
keepalived-master 192.168.63.208
keepalived-back 192.168.63.209
haproxy1 192.168.63.208
haproxy2 192.168.63.209
nginx 192.168.63.208
nginx 192.168.63.209
漂移虚拟ip 192.168.63.211(配置文件里配置,不可有其他设备占用这个ip)
实际运用当中 keepalived和haproxy通常成对出现 nginx和他们不在一台机器上
192.168.63.208+192.168.63.209安装nginx
vi nginx.sh
.............................................
#!/bin/bash
yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
mkdir -p /data/download/nginx
cd /data/download/nginx
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzvf nginx-1.24.0.tar.gz
cd nginx-1.24.0;./configure
make
make install
...................................

chmod u+x nginx.sh
./nginx.sh

cd /usr/local/nginx
ls -la

vi /lib/systemd/system/nginx.service
.....................................................
Unit
Description=nginx
After=network.target
Service
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
Install
WantedBy=multi-user.target
..................................................

systemctl daemon-reload
systemctl start nginx
systemctl enable nginx
ps -ef|grep nginx
浏览器访问验证 cur 192.168.63.209与192.168.63.208

192.168.63.208与192.168.63.209安装Haproxy
vi Haproxy.sh
................................
#!/bin/bash
mkdir -p /data/download/haproxy
cd /data/download/haproxy
wget -c https://www.haproxy.org/download/2.1/src/haproxy-2.1.12.tar.gz
tar xzf haproxy-2.1.12.tar.gz
cd haproxy-2.1.12
make TARGET=linux310 PREFIX=/usr/local/haproxy/
make install PREFIX=/usr/local/haproxy
.........................................................................
chmod u+x Haproxy.sh
./Haproxy.sh



useradd -s /sbin/nologin haproxy -M
mkdir -p /etc/haproxy
touch /etc/haproxy/haproxy.cfg
cd /etc/haproxy/

vi haproxy.cfg
...........................................
global
log /dev/log local0 info
log /dev/log local0 notice
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
nbproc 1
daemon
defaults
log global
timeout connect 5000
timeout client 10m
timeout server 10m
listen admin_stats
bind 0.0.0.0:8099
mode http
log 127.0.0.1 local0 err
stats refresh 30s
stats uri /status
stats realm welcome login\ Haproxy
stats auth admin:123456
stats hide-version
stats admin if TRUE
listen nginx
bind 0.0.0.0:8100
mode tcp
option tcplog
balance roundrobin
server nginx1 192.168.63.208:80 check inter 2000 fall 2 rise 2 weight 1
server nginx2 192.168.63.209:80 check inter 2000 fall 2 rise 2 weight 1
................................

touch /lib/systemd/system/haproxy.service
vi /lib/systemd/system/haproxy.service
.....................................................
Unit
Description=HAProxy Load Balancer
After=network.target
Service
ExecStart=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
ExecReload=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -sf $(pidof haproxy)
ExecStop=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -st $(pidof haproxy)
Type=forking
KillMode=mixed
Restart=always
RestartSec=2s
Install
WantedBy=multi-user.target
..............................................

systemctl daemon-reload
systemctl enable haproxy.service
systemctl start haproxy.service
vi /etc/rsyslog.d/haproxy.conf
在最下面添加
.........................................................
if (programname == 'haproxy' and syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if (programname == 'haproxy' and syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
.............................................................

systemctl restart haproxy.service
ps -ef|grep haproxy

192.168.63.208与192.168.63.209安装Keepalived服务
...............................
#!/bin/bash
mkdir /data/download/keepalived
cd /data/download/keepalived;
yum -y install gcc openssl-devel libnfnetlink-devel libnl libnl-devel popt-devel gcc make
wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gz --no-check-certificate
tar xzf keepalived-2.2.8.tar.gz
cd keepalived-2.2.8 &&
./configure --prefix=/usr/local/keepalived --sysconf=/etc
make &&make install
...................................

chmod u+x keepalived.sh
./keepalived.sh
192.168.63.208配置
vi /etc/keepalived/keepalived.conf
.......................................................................
! Configuration File for keepalived
vrrp_script chk_haproxy {
script "/data/sh/check_haproxy.sh"
每 2 秒执行一次脚本
interval 2
脚本权重
weight 2
}
VIP1
vrrp_instance VI_1 {
状态设置为 "MASTER",表示该实例是主节点。
state MASTER
与系统网卡相关联
interface ens33
通过指定不同的virtual_router_id 可以创建多个独立的vrrp实例,之间互不干扰
virtual_router_id 151
priority 100
检查间隔
advert_int 5
非抢占
nopreempt
主备之间密码要一致
authentication {
auth_type PASS
auth_pass 2222
}
虚拟ip,必须要和keepalived在同一个子网里
virtual_ipaddress {
192.168.63.199
}
track_script {
chk_haproxy
}
}
! Configuration File for keepalived
vrrp_script chk_haproxy {
script "/data/sh/check_haproxy.sh"
每 2 秒执行一次脚本
interval 2
脚本权重
weight 2
}
VIP1
vrrp_instance VI_1 {
状态设置为 "MASTER",表示该实例是主节点。
state MASTER
与系统网卡相关联
interface ens33
通过指定不同的virtual_router_id 可以创建多个独立的vrrp实例,之间互不干扰
virtual_router_id 151
priority 100
检查间隔
advert_int 5
非抢占
nopreempt
主备之间密码要一致
authentication {
auth_type PASS
auth_pass 2222
}
虚拟ip,必须要和keepalived在同一个子网里
virtual_ipaddress {
192.168.63.199
}
track_script {
chk_haproxy
}
}
................................................

192.168.63.209配置
vi /etc/keepalived/keepalived.conf
............................
! Configuration File for keepalived
vrrp_script chk_haproxy {
script "/data/sh/check_haproxy.sh"
#每两秒执行一次脚本
interval 2
#脚本权重
weight 2
}
VIP1
vrrp_instance VI_1 {
#状态设置为"MASTER",表示为主节点,当前"BACKUP"备份节点
state BACKUP
#与系统网卡相关联
interface ens33
#通过指定不同的virtual_router_id可以创建多个VRRP实例,之间互不干扰
virtual_router_id 151
priority 90
#检查间隔
advert_int 5
#非抢占
nopreempt
#主备之间密码要一致
authentication {
auth_type PASS
auth_pass 2222
}
#虚拟ip,必须要和keepalived同一个子网里
virtual_ipaddress {
192.168.63.199
}
track_script {
chk_haproxy
}
}
..................................

mkdir /data/sh
创建haproxy检查脚本
mkdir -p /data/sh
cd /data/sh
vi check_haproxy.sh
..................................................
#!/bin/bash
#auto check haprox process
#2021-1-12 jfedu.net
#使用killall命令发送信号0给haproxy进程。这个信号不会杀死进程,但可以用于检查进程是否存在。
killall -0 haproxy
#检查上一条命令的退出状态。`$?`是一个特殊变量,表示上一个命令的退出状态码。如果上一个命令的退出状态码不等于0(即haproxy进程不存在),则执行下
面的代码块。
if
\[ $? -ne 0 \]\];then systemctl stop keepalived fi .........................................  chmod u+x check_haproxy.sh systemctl enable keepalived systemctl start keepalived 手动kill 145 haproxy进程 kill 145 浏览器访问[http://192.168.63.209:8099/status](http://192.168.63.209:8099/status "http://192.168.63.209:8099/status") 验证Haproxy+Keepalived 账号密码:admin /123456 