Linux:keepalived实现nginx高可用(三台nginx)

2023-10-14 20:08

本文主要是介绍Linux:keepalived实现nginx高可用(三台nginx),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

keepalived实现nginx高可用

之前发过一篇使用keepalived实现nginx负载均衡的高可用,当时使用的是两台nginx,这次使用三台nginx来做个实验。

环境
zabbix-server 192.168.186.10
zabbix-agent-1 192.168.186.11
zabbix-agent-2 192.168.186.12
VIP 192.168.186.100
(刚好在做zabbix,所以直接在zabbix的机器上安装几个nginx进行测试)
安装nginx(所有机器)

[root@zabbix-server ~]# systemctl -y install nginx
[root@zabbix-agent-1 ~]# systemctl -y install nginx
[root@zabbix-agent-2 ~]# systemctl -y install nginx

修改配置文件(所有nginx)(非必须)
【因为我的机器上的80端口已经被使用了,所以我改一下端口】

...
listen       8880 default_server;listen       [::]:8880 default_server;server_name  _;root         /usr/share/nginx/html;
...

修改nginx默认网页内容

[root@zabbix-server ~]# echo `hostname` > /usr/share/nginx/html/index.html
[root@zabbix-agent-1 ~]# echo `hostname` > /usr/share/nginx/html/index.html
[root@zabbix-agent-2 ~]# echo `hostname` > /usr/share/nginx/html/index.html

启动nginx服务并测试

[root@zabbix-server ~]# systemctl start nginx
[root@zabbix-agent-1 ~]# systemctl start nginx
[root@zabbix-agent-2 ~]# systemctl start nginx[root@zabbix-server ~]# curl 127.0.0.1:8880
zabbix-server
[root@zabbix-agent-1 ~]# curl 127.0.0.1:8880
zabbix-agent-1
[root@zabbix-agent-2 ~]# curl 127.0.0.1:8880
zabbix-agent-2

安装keepalived(所有机器)

[root@zabbix-server ~]# systemctl -y install keepalived
[root@zabbix-agent-1 ~]# systemctl -y install keepalived
[root@zabbix-agent-2 ~]# systemctl -y install keepalived

配置keepalived(所有机器都一样)

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr
#   vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
vrrp_script nginx {script "/keepalived/curl_nginx.sh"interval 3weight -30fall 2rise 1
}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.186.100}track_script {nginx}
}
#之前配置两台keepalived的时候,只需要在某一台配置检测脚本,现在配置三台,直接把所有配置文件都设置成一样的,这样可以实现三台ngnix之间的服务可以自由切换。

检测脚本(所有机器都要有)

[root@zabbix-server ~]# mkdir /keepalived/
[root@zabbix-server ~]# vim /keepalived/curl_nginx.sh
#!/bin/bash
curl 127.0.0.1:8880||systemctl stop keepalived
[root@zabbix-server ~]# chmod +x /keepalived/curl_nginx.sh -R
#脚本比较简陋,实际生产中不要使用这种脚本,测试可以使用

启动所有keepalived服务

[root@zabbix-server ~]# systemctl start keepalived.service
[root@zabbix-agent-1 ~]# systemctl start keepalived.service
[root@zabbix-agent-2 ~]# systemctl start keepalived.service

测试

[root@zabbix-server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:fe:92:0c brd ff:ff:ff:ff:ff:ffinet 192.168.186.10/24 brd 192.168.186.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.186.100/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fefe:920c/64 scope linkvalid_lft forever preferred_lft forever
#VIP现在在master上
[root@zabbix-server ~]# curl 192.168.186.100:8880
zabbix-server
#访问VIP,可以看出,确实是访问到了server的nginx上。
#关掉server上的nginx,再次访问。
[root@zabbix-server ~]# systemctl stop nginx
[root@zabbix-server ~]# curl 192.168.186.100:8880
curl: (7) Failed connect to 192.168.186.100:8880; Connection refused
[root@zabbix-server ~]# curl 192.168.186.100:8880
zabbix-agent-2
#可以看到,在VIP飘移的过程中,有一小段时间服务不可用
#后面VIP成功飘移到agent-2上
#反复对所有机器上的nginx进行启动关闭,可以看到服务一直都是可用的(除了切换VIP的时间)
#注意:重启nginx后,也要手动启动keepalived。

实验完毕!
实际上不会这么使用,上述场景只是做个实验。

这篇关于Linux:keepalived实现nginx高可用(三台nginx)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/212837

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount