keepalived实现nginx负载均衡高可用

keepalived实现nginx负载均衡高可用

目录

keepalived实现nginx负载均衡高可用

什么是keepalived

keepalived如何实现故障切换

keepalived重要功能

keepalived实现nginx负载均衡高可用部署

keepalived安装

在主备机上分别安装nginx

keepalived配置

让keepalived监控nginx负载均衡机

配置keepalived加入监控脚本的配置

什么是keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。

keepalived如何实现故障切换

keepalived 服务工作时,主master节点会不断地向备用节点发送心跳信息,告诉backup节点自己还活着。当主节点发生故障时,就无法发送心跳了,于是会调用自身的接管程序,接管主节点的ip资源和服务。

keepalived重要功能

keepalived 有三个重要的功能,分别是:

管理LVS负载均衡软件 
实现LVS集群节点的健康检查 
作为系统网络服务的高可用性(failover)

keepalived实现nginx负载均衡高可用部署

keepalived安装

 
配置主keepalived

//修改主机名

[root@zzh ~]# hostnamectl set-hostname master

[root@zzh ~]# bash

[root@master ~]#

//关闭防火墙和selinux,确保selinux状态为disabled

[root@master ~]# systemctl disable --now firewalld

Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@master ~]# setenforce 0

[root@master ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config

[root@master ~]# getenforce

Permissive

[root@master ~]# reboot

[root@master ~]# getenforce

Disabled


//配置yum源

[root@master ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

[root@master ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

[root@master ~]# yum -y install epel-release vim wget gcc gcc-c++


//安装keepalived

[root@master ~]# yum -y install keepalived

在备服务器上安装keepalived

//修改主机名

[root@localhost ~]# hostnamectl set-hostname slave

[root@localhost ~]# bash

//关闭防火墙和selinux,确保selinux状态为disabled

[root@slave ~]# systemctl disable --now firewalld

Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@slave ~]# setenforce 0

[root@slave ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config

[root@slave ~]# reboot

[root@slave ~]# getenforce

Disabled


//配置yum源

[root@slave ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

[root@slave ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

[root@slave ~]# yum -y install epel-release vim wget gcc gcc-c++


//安装keepalived

[root@slave ~]# yum -y install keepalived

在主备机上分别安装nginx

 
[root@master ~]# yum -y install nginx

[root@master ~]# cd /usr/share/nginx/html/

[root@master html]# ls

404.html 50x.html index.html nginx-logo.png poweredby.png

[root@master html]# echo 'master' > index.html

[root@master html]# systemctl enable --now nginx

Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

[root@master html]# ss -antl

State Recv-Q Send-Q Local Address:Port Peer Address:Port Process

LISTEN 0 128 0.0.0.0:80 0.0.0.0:*

LISTEN 0 128 0.0.0.0:22 0.0.0.0:*

LISTEN 0 128 [::]:80 [::]:*

LISTEN 0 128 [::]:22 [::]:*

[root@master html]# curl 192.168.78.20

master


[root@slave ~]# yum -y install nginx

[root@slave ~]# cd /usr/share/nginx/html/

[root@slave html]# ls

404.html 50x.html index.html nginx-logo.png poweredby.png

[root@slave html]# echo 'slave' > index.html

[root@slave html]# systemctl start nginx

keepalived配置

[root@master ~]# cd /etc/keepalived/

[root@master keepalived]# mv keepalived.conf{,-bak}

[root@master keepalived]# ls

keepalived.conf-bak

[root@master keepalived]# vim keepalived.conf

! Configuration File for keepalived


global_defs {

router_id lb01

}


vrrp_instance VI_1 {

state MASTER

interface ens33

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 123456

}

virtual_ipaddress {

192.168.78.250

}

}


virtual_server 192.168.78.250 80 {

delay_loop 6

lb_algo rr

lb_kind DR

persistence_timeout 50

protocol TCP


real_server 192.168.78.20 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}


real_server 192.168.78.25 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}


[root@master ~]# systemctl enable --now keepalived

Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service.

配置备keepalived

[root@slave ~]# cd /etc/keepalived/

[root@slave keepalived]# mv keepalived.conf{,-bak}

[root@slave keepalived]# ls

keepalived.conf-bak

[root@slave keepalived]# vim keepalived.conf

! Configuration File for keepalived


global_defs {

router_id lb02 //修改路由id

}


vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id 51

priority 90 //修改优先级

advert_int 1

authentication {

auth_type PASS

auth_pass 123456

}

virtual_ipaddress {

192.168.78.250

}

}


virtual_server 192.168.78.250 80 {

delay_loop 6

lb_algo rr

lb_kind DR

persistence_timeout 50

protocol TCP


real_server 192.168.78.20 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}


real_server 192.168.78.25 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}


[root@slave ~]# systemctl enable --now keepalived

Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service.

让keepalived监控nginx负载均衡机

 
[root@master ~]# mkdir /scripts

[root@master ~]# cd /scripts/

[root@master scripts]# vim check_n.sh

#!/bin/bash

nginx_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bnginx\b'|wc -l)

if [ $nginx_status -lt 1 ];then

systemctl stop keepalived

fi


[root@master scripts]# chmod +x check_n.sh

[root@master scripts]# ll

total 4

-rwxr-xr-x 1 root root 142 Oct 8 20:00 check_n.sh


[root@master scripts]# vim notify.sh

#!/bin/bash

VIP=$2

case "$1" in

master)

nginx_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bnginx\b'|wc -l)

if [ $nginx_status -lt 1 ];then

systemctl start nginx

fi

;;

backup)

nginx_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bnginx\b'|wc -l)

if [ $nginx_status -gt 0 ];then

systemctl stop nginx

fi

;;

*)

echo "Usage:$0 master|backup VIP"

;;

esac


[root@master scripts]# chmod +x notify.sh

[root@master scripts]# ll

total 8

-rwxr-xr-x 1 root root 142 Oct 8 20:00 check_n.sh

-rwxr-xr-x 1 root root 432 Oct 8 20:06 notify.sh

在slave上编写脚本

[root@slave ~]# mkdir /scripts

[root@slave ~]# cd /scripts/

[root@slave scripts]# vim notify.sh

#!/bin/bash

VIP=$2

case "$1" in

master)

nginx_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bnginx\b'|wc -l)

if [ $nginx_status -lt 1 ];then

systemctl start nginx

fi

;;

backup)

nginx_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bnginx\b'|wc -l)

if [ $nginx_status -gt 0 ];then

systemctl stop nginx

fi

;;

*)

echo "Usage:$0 master|backup VIP"

;;

esac


[root@slave scripts]# chmod +x notify.sh

[root@slave scripts]# ll

total 8

-rwxr-xr-x 1 root root 142 Oct 8 20:10 check_n.sh

-rwxr-xr-x 1 root root 432 Oct 8 20:08 notify.sh

配置keepalived加入监控脚本的配置

 
[root@master ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived


global_defs {

router_id lb01

}


vrrp_script nginx_check {

script "/scripts/check_n.sh"

interval 1

weight -20

}


vrrp_instance VI_1 {

state MASTER

interface ens33

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 123456

}

virtual_ipaddress {

192.168.78.250

}

track_script {

nginx_check

}

notify_master "/scripts/notify.sh master 192.168.78.250"

notify_backup "/scripts/notify.sh backup 192.168.78.250"

}


virtual_server 192.168.78.250 80 {

delay_loop 6

lb_algo rr

lb_kind DR

persistence_timeout 50

protocol TCP


real_server 192.168.78.20 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}


real_server 192.168.78.25 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}


[root@master ~]# systemctl restart keepalived

配置备keepalived

[root@slave ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived


global_defs {

router_id lb02

}


vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id 51

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 123456

}

virtual_ipaddress {

192.168.78.250

}

notify_master "/scripts/notify.sh master 192.168.78.250"

notify_backup "/scripts/notify.sh backup 192.168.78.250"

}


virtual_server 192.168.78.250 80 {

delay_loop 6

lb_algo rr

lb_kind DR

persistence_timeout 50

protocol TCP


real_server 192.168.78.20 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}


real_server 192.168.78.25 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}


[root@slave ~]# systemctl restart keepalived

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值