Keepalived+Haproxy高可用集群实验

  1. 准备过程

准备几台机器,如下:

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服务

vi keepalived.sh

...............................

#!/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 ......................................... ![](https://i-blog.csdnimg.cn/direct/badc12e88e3c4417ae3c9e66f1b1fd09.png) 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 ![](https://i-blog.csdnimg.cn/direct/46c7cc00d73f46b6aec6e08eb51a7834.png)

相关推荐
(Charon)1 小时前
[网络编程] 基于 DPDK 的 UDP 报文收发实现
网络·网络协议·udp
..过云雨1 小时前
HTTP 协议深度解析:请求/响应、报头、正文的核心原理与实战
网络·网络协议·tcp/ip·计算机网络·http
林鸿风采2 小时前
在Alpine Linux上部署docker和Portainer管理工具
linux·运维·docker·portainer
float_六七2 小时前
设备分配核心数据结构全解析
linux·服务器·数据结构
wechat_Neal2 小时前
车载以太网技术全景-网络基础理论篇
网络
水境传感 张园园2 小时前
便携式光透过率检测仪:如何成为安全“守门人”?
网络
机器视觉知识推荐、就业指导2 小时前
Qt 小技巧:如何用 Q_PROPERTY 管理属性
服务器·数据库·qt
星辰&与海3 小时前
操作系统引导过程
服务器
比奇堡派星星3 小时前
Linux OOM Killer
linux·开发语言·arm开发·驱动开发