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)

相关推荐
Y1rong38 分钟前
linux之文件IO
linux
Trouvaille ~1 小时前
【Linux】UDP Socket编程实战(一):Echo Server从零到一
linux·运维·服务器·网络·c++·websocket·udp
嵌入小生0071 小时前
Shell | 命令、编程及Linux操作系统的基本概念
linux·运维·服务器
咖丨喱1 小时前
IP校验和算法解析与实现
网络·tcp/ip·算法
那就回到过去2 小时前
交换机特性
网络·hcip·ensp·交换机
-Try hard-2 小时前
Linuv软件编程 | Shell命令
linux·运维·服务器
释怀不想释怀2 小时前
Linux快捷键,软件安装启动
linux·运维·服务器
lpruoyu2 小时前
【Docker进阶-05】Docker网络
网络·docker·容器
Hello World . .2 小时前
Linux:软件编程
linux·运维·服务器·vim
小李独爱秋3 小时前
计算机网络经典问题透视:蜂窝网络切换如何“扼杀”你的TCP连接?
网络·网络协议·tcp/ip·计算机网络·php·信息与通信