热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Ubuntu下keepalived和nginx实现高可用性负载均衡

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Ubuntu下keepalived和nginx实现高可用性负载均衡相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Ubuntu下keepalived和nginx实现高可用性负载均衡相关的知识,希望对你有一定的参考价值。






概述

1. 前导知识

Ubuntu安装keepalived
Ubuntu安装nginx并配置负载均衡


2. 本文项目目标

在Ubuntu下使用keepalived和nginx搭建高可用性负载均衡。keepalived虚拟IP为192.168.229.130,两台服务器的IP地址分别为192.168.229.128,192.168.229.129。两台服务器中81端口模拟网站,80端口为负载均衡端口。负载均衡的配置详情请参见《Ubuntu安装nginx并配置负载均衡》
在这里插入图片描述


3. 系统环境

Ubuntu 20.04.2 LTS 桌面版(192.168.229.128)
Ubuntu 20.04.2 LTS 服务器版(192.168.229.129)


配置nginx负载均衡

《Ubuntu安装nginx并配置负载均衡》中,配置完成了一台服务器(192.168.229.128)的负载均衡,参照文章继续配置192.168.229.129服务器的负载均衡:

sudo vim /etc/nginx/conf.d/ningx.conf

在这里插入图片描述
保存后,重启 nginx。
测试192.168.229.129服务器的负载均衡:
在这里插入图片描述
至此,192.168.229.128,192.168.229.129两台服务器的负载均衡全部配置完成。


安装配置keepalived

1. 安装

参照Ubuntu安装keepalived

sudo apt-get install keepalived

2. 设置随系统自启动


  • 编辑 /etc/rc.local文件

sudo vim /etc/rc.local

在文件中增加一行service keepalived start &:

#!/bin/sh -e
# 上面一行不要删除
# 服务类要以 & 结尾一行,表示不要等待运行结束
service keepalived start &

#文末必须以exit 0结束
exit 0

3. keepalived的配置

编辑配置文件:

sudo vim /etc/keepalived/keepalived.conf

3.1 keepalived配置说明

! Configuration File for keepalived
global_defs {
#检测到realserver或者负载均衡出现故障后, 通知的邮箱地址
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
#发送通知的邮箱的地址
notification_email_from Alexandre.Cassen@firewall.loc
#利用的stmp服务器地址
smtp_server 192.168.200.1
smtp_connect_timeout 30
#自定义主机名,建议使用IP地址
router_id 192.168.229.128
vrrp_skip_check_adv_addr
vrrp_iptables
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_chk.sh" #具体脚本路径
interval 2 #脚本循环运行间隔,s
}
#一个虚拟路由器组的物理实例, 同一组KA里的实例不能重名
vrrp_instance VI_1{
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
state MASTER
#非抢占模式;如果开启非抢占模式,上面的state需要都配置城BACKUP,利用优先级确定谁是MASTER
#nopreempt
#绑定为当前虚拟路由器使用的物理接口,需要据实查询填写
interface ens33
#当前虚拟路由器惟一标识,也叫做分组名称,该组内的设备需要相同,范围是0-255
virtual_router_id 100
#当前物理节点在此虚拟路由器中的优先级,值越大优先级越大;范围1-254
priority 101
#vrrp通告的时间间隔,默认1s, 谁的优先级高, vip跑在哪个节点上, 就由哪个节点发送通告, backup节点接收通告。组内要一致
advert_int 1
#设置验证信息,组内一致
authentication {
#有PASS 和 AH 两种,常用 PASS
auth_type PASS
#仅前8位字符有效, 每一组负载均衡器使用相同的密码即可
auth_pass 1111
}
#虚拟IP, 要和服务器在同一个网段, 能和服务器网关进行通信的, 而且是没有被占用的
#可以设置多个IP
virtual_ipaddress {
192.168.229.130
}
#使用在这个域中使用预先定义的脚本,上面定义的
track_script {
chk_nginx
}
#当前节点成为主节点时触发的脚本
#notify_master |
#当前节点称为备用节点时触发的脚本
#notify_backup |
#当前节点转为“失败”状态时触发的脚本
# 一般不会使用, 一般一个节点不是master就是backup状态,
#很少出现fault, 除非是ip地址冲突或者资源不足, 导致角色切换失败会出现fault状态
#notify_fault |
#通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
#notify |
}

3.2 去除注释的精简版配置


  • 服务器192.168.229.128使用的配置文件:

global_defs {
router_id 192.168.229.128
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_chk.sh"
interval 2
}
vrrp_instance VI_1{
state MASTER
interface ens33
virtual_router_id 100
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.229.130
}
track_script {
chk_nginx
}
}

  • 服务器192.168.229.129使用的配置文件:

global_defs {
router_id 192.168.229.129
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_chk.sh"
interval 2
}
vrrp_instance VI_1{
state BACKUP
interface ens33
virtual_router_id 100
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.229.130
}
track_script {
chk_nginx
}
}

  • 其中,interface参数的值ens33要通过ifconfig指令查询,找到要进行虚拟化的物理网卡的名称。

ifconfig

在这里插入图片描述


3.3 nginx_chk脚本


  • 脚本文件
    脚本文件/etc/keepalived/nginx_chk.sh用于检查nginx相关服务器是否启动,如果没有启动则重启。如果重启不成功,则杀死keepalived服务,切换到备用服务

#!/bin/bash
#上面这句注释不可删除
#检查是否有nginx相关的进程
A=`ps -C nginx --no-header |wc -l`
#如果没有
if [ $A -eq 0 ];then
# 重启nginx,延迟2秒
service nginx restart
sleep 2
# 重新检查是否有nginx相关的进程
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
# 仍然没有nginx相关的进程,杀死当前keepalived,切换到备用机
killall keepalived
fi
fi

  • 为脚本文件添加执行权限

sudo chmod +x /etc/keepalived/nginx_chk.sh

  • 测试脚本,如果有错误会输出错误信息,没有错误什么也不输出

cd /etc/keepalived
./nginx_chk.sh

在这里插入图片描述


  • 两台服务器都要添加这个脚本和权限。

4. 重启keepalived

sudo service keepalived restart

5. 检查keepalived重启是否成功

systemctl status keepalived.service

  • 不成功的例子
    如果不成功,根据提示信息检查哪里有错误
    在这里插入图片描述
  • 成功的例子
    在这里插入图片描述

测试

1. 检查虚拟IP是否设置成功,以及能否切换

ip a

192.168.229.128的虚拟IP已经设置进来了:
在这里插入图片描述
192.168.229.129(BACKUP)上没有虚拟IP:
在这里插入图片描述
停掉Master的keepalived再检查

sudo service keepalived stop
ip a

Master的虚拟IP没有了:
在这里插入图片描述
backup上有了虚拟IP:
在这里插入图片描述


2. 检查页面能否访问


  • 先将上面停掉的master上的keepalived启动起来

sudo service keepalived start

  • 通过虚拟IP 192.168.229.130访问页面:

在这里插入图片描述


  • 停掉master上的keepalived,再次通过虚拟IP访问页面,仍然能正常

3. 检查停掉nginx后是否能自动重启


  • 在任意master或者backup上停止掉nginx:

sudo service nginx stop

  • 再次通过虚拟IP访问页面,应仍能访问到不断切换的两个页面

结论

高可用性负载均衡配置成功


参考文献

Keepalived安装和基础功能实现
centos7安装keepalived记录最新版踩坑
Nginx+keepalived双机热备(主从模式)
Ubuntu下运行.sh文件






推荐阅读
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • Linux系统高级网络配置:链路聚合
    链路聚合网卡的链路聚合就是将多块网卡连接起来,当一块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • 人脸检测 pyqt+opencv+dlib
    一、实验目标绘制PyQT界面,调用摄像头显示人脸信息。在界面中,用户通过点击不同的按键可以实现多种功能:打开和关闭摄像头, ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 在Java中,我会做这样的事情:classPerson{privateRecordrecord;publicStringname(){record().get(name);}p ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 树状笔记软件for linux,Ubuntu 14.04安装开源树状笔记管理软件 WikidPad 2.2
    WikidPad是一款开源免费的wiki风格的树状笔记管理软件,类似于Notepad。基于Python,支持Windows、Mac、Linux等平台。W ... [详细]
author-avatar
艾琳冰_699
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有