社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

Keepalived+Nginx高可用案例(抢占式与非抢占式)

马哥Linux运维 • 5 月前 • 80 次点击  



背景:服务器版本Centos7.9

(1)下载安装Keepalived源码包

Keepalived官网源码包下载地址 

https://www.keepalived.org/download.html

在服务器上解压


tar -xf keepalived-2.2.8.tar.gz

安装相关前置依赖


yum -y install gcc gcc-c++

使用configure工具进行安装


./configure --sysconfdir=/etc --prefix=/usr/local/keepalived --sbindir=/usr/sbin --bindir=/usr/bin



--sysconfdir=DIR #指定配置文件位置

--prefix=DIR #指定安装路径

--sbindir=DIR 指定命令位置,后面不需再配置环境变量

使用make make install进行安装


make && make install

(2)配置Keepalived在业务中的参数

本次操作为Keepalived单VIP抢占式配置,即两个虚拟机只有一台绑定VIP对外提供服务,且在一台主机失能时VIP将漂移到备机上接收流量,当主机恢复时VIP将再次切换

主机配置

global_defs {

router_id logincas1 ### router_id为全局定义当前节点的id,一般为唯一

enable_script_security

script_user root ##定义执行脚本的角色

vrrp_version 2

}

## 定义脚本

vrrp_script chk_nginx {

script "/usr/local/nginx-check.sh" ##脚本路径

interval 2 ##检测间隔

timeout 4 ##失败间隔,失败两次通信则失败

rise 4 ##成功四次则成功

fall 2 ##失败两次则切换

weight -50 ##脚本检测失败则扣减权重

}

vrrp_instance VI_1 { ##模块配置

version 2

state MASTER ##抢占式的情况下主机需设置为MASTER,备机为BACKUP

interface eth0 ##指定VIP流量的网卡

virtual_router_id 51 ##虚拟路由ID

priority 100 ##优先级,备机应比主机低一些

advert_int 1 ##VRRP心跳包发送间隔

authentication { ##权限认证

auth_type PASS ##类型:密码

auth_pass 2222

}

virtual_ipaddress {

172.29.184.220/24 ##VIP配置

}

track_script { ##脚本定义

chk_nginx

}



}

接下来需要补充完善 nginx-check.sh


思路是通过去检测是否有Nginx进程,检测到没有nginx进程时先执行Nginx的重启操作,一秒之后再次检测,如果Nginx进程还是不存在则关闭Keepalived,使VIP漂移到另一个节点



#!/bin/bash

if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then

systemctl restart nginx

sleep 1

if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then

systemctl stop keepalived

fi

fi

遇到的一些问题


当在脚本里使用ps aux | grep nginx | grep -v grep | wc -l去检测Nginx进程时发现脚本一直未生效,合理怀疑是Keepalived运行用户在执行这条命令时存在权限问题(脚本不能配置权限为777,Keepalived会警告并失效)

本次使用的高可用架构为单VIP架构,后续也可以尝试双VIP架构,即互为主备机,配置两个VIP模块,可以选择使用一个VIP接收流量,也可以使用两个VIP来监听流量,看业务的需求。

在单VIP高可用架构中,如果想要主机恢复后VIP不漂移到主机上,可以将主机的state也设置为BACKUP,但优先级需要比备机高一些,以确保初始状态VIP是绑定在主机上的


链接:hhttps://www.cnblogs.com/iamxiaofu/p/17848680.html

(版权归原作者所有,侵删)


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/164759
 
80 次点击