Keepalived+Nginx 高可用集群(双主模式)

1.基础环境配置

[root@lb1 ~]# systemctl stop firewalld         										 # 关闭防火墙
[root@lb1 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux           # 关闭selinux,重启生效
[root@lb1 ~]# setenforce 0                									  # 关闭selinux,临时生效
[root@lb1 ~]# yum -y install ntpdate.x86_64											# 安装 ntp 命令
[root@lb1 ~]# ntpdate 0.centos.pool.ntp.org    										# 时间同步
[root@lb1 ~]# yum install nginx -y           									  # 安装nginx

2.web1,2服务器

[root@wb1 ~]# echo "web_1  221" > /usr/share/nginx/html/index.html
[root@wb2 ~]# echo "web_2  222" > /usr/share/nginx/html/index.html# 修改server_name
[root@lb1 ~]# vim /etc/nginx/nginx.confserver {listen       80;listen       [::]:80;server_name  www.example.com;root         /usr/share/nginx/html;#启动并配置开机自启
[root@wb1 ~]# systemctl enable nginx  --now
[root@wb2 ~]# systemctl enable nginx  --now

3.配置lb1,lb2
这里两台机器是一致的,以lb1 举例操作一样

# 配置负载均衡模块
[root@lb1 ~]# mkdir /etc/nginx/conf.d/lb1.conf
[root@lb1 ~]# vim /etc/nginx/conf.d/lb1.conf
upstream backend {server 192.168.29.221:80 weight=1 max_fails=3 fail_timeout=20s;server 192.168.29.222:80 weight=1 max_fails=3 fail_timeout=20s;}server {listen       80;server_name  www.example.com;location / {proxy_pass http://backend;proxy_set_header Host $host:$proxy_port;proxy_set_header X-Forwarded-For $remote_addr;}}
[root@lb1 ~]# systemctl enable nginx  --now#可在测试节点上curl 来验证负载均衡是否配置成功

4.配置高可用 Keepalived 服务器(lb1,lb2 )

# 安装
[root@lb1 ~]# yum install keepalived -y[root@lb1 ~]# vim /etc/keepalived/keepalived.conf

lb1:

! Configuration File for keepalivedglobal_defs {notification_email {343590279@qq.com}smtp_server 192.168.29.1smtp_connect_timeout 30router_id LVS_lb1
}vrrp_script check_nginx {script "/shell/check-nginx.sh"interval 2weight -20timeout 10 user root root
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.29.100/24 dev ens33 label ens33:1}track_script {check_nginx}
}
vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 2222}virtual_ipaddress {192.168.29.200/24 dev ens33 label ens33:2}track_script {check_nginx}
}[root@lb1 ~]# mkdir /shell
[root@lb1 ~]# touch /shell/check-nginx.sh
#!/bin/bash
run=`curl -I -m 10 -o /dev/null -s -w %{http_code} localhost`
if [ $run -ne 200 ];thensystemctl stop keepalived.service
fi

lb2:

! Configuration File for keepalivedglobal_defs {notification_email {343590279@qq.com}smtp_server 192.168.29.1smtp_connect_timeout 30router_id LVS_lb2
}vrrp_script check_nginx {script "/shell/check-nginx.sh"interval 2weight -20timeout 10 user root root
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.29.100/24 dev ens33 label ens33:1}track_script {check_nginx}
}vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 52priority 150advert_int 1authentication {auth_type PASSauth_pass 2222}virtual_ipaddress {192.168.29.200/24 dev ens33 label ens33:2}track_script {check_nginx}
}[root@lb2 ~]# mkdir /shell
[root@lb2 ~]# touch /shell/check-nginx.sh
#!/bin/bash
run=`curl -I -m 10 -o /dev/null -s -w %{http_code} localhost`
if [ $run -ne 200 ];thensystemctl stop keepalived.service
fi

5.配置dns域名解析 机器上都配置一下

[root@lb1 conf.d]# vim /etc/hosts
192.168.29.100 www.example.com
192.168.29.200 www.example.com

6.验证

可以看到lb1 现在是192.168.29.100

[root@lb1 conf.d]# 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 host valid_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:34:e8:e9 brd ff:ff:ff:ff:ff:ffinet 192.168.29.145/24 brd 192.168.29.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.29.100/24 scope global secondary ens33:1valid_lft forever preferred_lft foreverinet6 fe80::af4d:69e:aacf:f4e1/64 scope link noprefixroute valid_lft forever preferred_lft forever

lb2 现在是192.168.29.200:

[root@lb2 ~]# 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 host valid_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:da:e1:59 brd ff:ff:ff:ff:ff:ffinet 192.168.29.220/24 brd 192.168.29.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.29.200/24 scope global secondary ens33:2valid_lft forever preferred_lft foreverinet6 fe80::b09a:b99e:bc92:62ee/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::9073:a63f:e689:8462/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::7514:5e70:5d24:c66e/64 scope link noprefixroute valid_lft forever preferred_lft forever

如果此时在lb1 或者lb2 上 stop Keepalived 会看到100 或者200 飘到另一台机器上:

[root@lb2 ~]# 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 host valid_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:da:e1:59 brd ff:ff:ff:ff:ff:ffinet 192.168.29.220/24 brd 192.168.29.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.29.100/24 scope global secondary ens33:1valid_lft forever preferred_lft foreverinet 192.168.29.200/24 scope global secondary ens33:2valid_lft forever preferred_lft foreverinet6 fe80::b09a:b99e:bc92:62ee/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::9073:a63f:e689:8462/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::7514:5e70:5d24:c66e/64 scope link noprefixroute valid_lft forever preferred_lft forever

测试机器上测试:

[root@server ~]# curl 192.168.29.145
web1 221
[root@server ~]# curl 192.168.29.145
web1 221
[root@server ~]# curl 192.168.29.145
web2 222 
[root@server ~]# curl 192.168.29.145
web2 222 
[root@server ~]# curl 192.168.29.145
web1 221
[root@server ~]# curl 192.168.29.145
web1 221[root@server ~]# curl www.example.com 
web2 222 
[root@server ~]# curl www.example.com 
web2 222 
[root@server ~]# curl www.example.com 
web1 221
[root@server ~]# curl www.example.com 
web2 222 
[root@server ~]# curl www.example.com 
web1 221
[root@server ~]# curl www.example.com 
web1 221
[root@server ~]# curl www.example.com 
web2 222 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547574.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

从Elasticsearch到RedisSearch:探索更快的搜索引擎解决方案

文章目录 RedisSearch 的关键功能与 ElasticSearch 对比性能对比产品对比 如何使用 Docker 安装 RedisSearch1. 获取 RedisSearch Docker 镜像2. 启动 RedisSearch 容器3. 验证安装 RedisSearch 使用示例1. 连接到 RedisSearch2. 创建索引3. 添加文档4. 执行搜索搜索所有包含 &…

C++ | Leetcode C++题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; class Solution { public:int getSteps(int curr, long n) {int steps 0;long first curr;long last curr;while (first < n) {steps min(last, n) - first 1;first first * 10;last last * 10 9;}return steps;}int findKthNum…

Ubuntu20.04 安装汉语拼音后重启登入黑屏

在虚拟机上装了一个Ubuntu用来学C&#xff0c;默认没有安装中文输入。于是按照网上教程装了几个汉语包。切换输入法的时候突然死机&#xff0c;重启登入直接黑屏。百度后发现有不少老哥和我这个问题一模一样&#xff0c;按照他们的方法也终于整好了&#xff0c;虚惊一场。 解决…

Windows 10 系统安装 FFmpeg 查看、转换、编辑音频文件

1、FFmpeg官网&#xff1a;FFmpeg 点击下载 可以选择下载full版本 下载之后解压到指定目录&#xff0c;在系统环境变量 Path 里面新增环境变量 打开CMD终端运行 ffmpeg -version 查看是否安装成功。 2、基本命令 查看音频基本信息 ffprobe 1.mp3 ##输出 [mp3 000002ab334405…

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight&#xff08;V1.4.5&#xff09; 版本更新&#xff0c;新增 Ranger、Solr DataLight 迎来了重大的版本更新&#xff0c;现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化&#xff0c;新增了对 Ranger 和 Solr 服务组件的支持&#xff0c;同时对多项已…

傅里叶级数在机器人中的应用(动力学参数辨识)

B站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清华大学李永乐老师教你如何理解傅里叶变换&#xff0c;辨清美颜和变声原理&#xff0c;&#xff01;&#xff01;_哔哩哔哩_bilibiliB站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清…

macOS安装MySQL以后如何配置环境变量

当安装了MySQL,解决了远程链接的问题以后, 还没有完事大捷, 还需要配置环境变量. 因为我需要使用mysql命令, 以及备份相关的命令. 下面是mysql的默认配置截图: 接着我查看了/usr/local/mysql/bin这个目录. 果然很多命令都在这个里面. 所以我将这个目录加载到了path中. e…

XSS | 反射型 XSS 攻击

关注这个漏洞的其他相关笔记&#xff1a;XSS 漏洞 - 学习手册-CSDN博客 0x01&#xff1a;反射型 XSS — 理论篇 反射型 XSS 又称非持久型 XSS&#xff0c;这种攻击方式往往具有一次性。 常见的攻击方式&#xff1a; 攻击者通过电子邮件等方式将包含 XSS 代码的恶意链接发送给…

Linux标准IO(五)-I/O缓冲详解

1.简介 出于速度和效率的考虑&#xff0c;系统 I/O 调用&#xff08;即文件 I/O&#xff0c;open、read、write 等&#xff09;和标准 C 语言库 I/O 函数&#xff08;即标准 I/O 函数&#xff09;在操作磁盘文件时会对数据进行缓冲&#xff0c;本小节将讨论文件 I/O 和标准 I/…

蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)

目录 一、前言 二、代码 实现功能&#xff1a;​编辑 按如图配置 定义变量 编写执行代码 显示在LCD上 加入按键效果 三、效果展示 四、代码开源 一、前言 ARR 即自动重装载值&#xff08;Auto Reload Register&#xff09;。相当于一个水杯&#xff0c;水杯容量&am…

【EXCEL数据处理】000002 案列 条件格式之重复值。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。

【EXCEL数据处理】000002 案列 条件格式之重复值。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来&#xff0c;方便查看。 在日常的数据处理和分析工作中&#xff0c;Excel 是一款强大而广泛使用的工具。其中&#xff0c;条件格式中的重复值功能对于快…

Golang | Leetcode Golang题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; func findAnagrams(s, p string) (ans []int) {sLen, pLen : len(s), len(p)if sLen < pLen {return}count : [26]int{}for i, ch : range p {count[s[i]-a]count[ch-a]--}differ : 0for _, c : range count {if c ! 0 {differ}}if diff…

Java | Leetcode Java题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> findAnagrams(String s, String p) {int sLen s.length(), pLen p.length();if (sLen < pLen) {return new ArrayList<Integer>();}List<Integer> ans new ArrayList<Int…

滚珠丝杠在人形机器人及线控制动和转向中大放异彩

直线驱动器用于对旋转角度不大、高负载的场景,在人形机器人中多用于四肢。直线驱动器多采取“电机+丝杠”,将旋转运动转为关节末端的直线运动,能够起到较好的支撑和承重效果,能够较好的适配应用场景的负载需求。 特斯拉人形机器人Optimus 双足、双臂采用连杆结构,连杆末端…

25:stm32的低功耗模式

低功耗模式 1、PWR电源控制2、低功耗模式 1、PWR电源控制 PWR&#xff08;Power Control&#xff09;电源控制。PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能&#xff0c;这里我们只学习低功耗模式的功能&#xff0c;低功耗模式…

MySQL --用户管理

文章目录 1.用户1.1用户信息1.2创建用户1.3删除用户1.4修改用户密码 2.数据库的权限2.1给用户授权2.2回收权限 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 1.用户 1.1用户信息 MySQL中的用户&#xff0c;都存储在系…

性能调优知识点(mysql)一

Mysql 索引 索引介绍 1.索引是排好序的数据结构。他的目的是为了提升查询效率。 2.mysql存储引擎分为innodb和myisam。它是用来形容表的。 innodb支持事务、外键、行锁 myisam不支持事务、外键 3.myisam使用3个文件来存储每张表数据&#xff0c;每个文件名以表名开头&#x…

Python | Leetcode Python题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; class Solution:def getSteps(self, cur: int, n: int) -> int:steps, first, last 0, cur, curwhile first < n:steps min(last, n) - first 1first * 10last last * 10 9return stepsdef findKthNumber(self, n: int, k: int)…

GS-SLAM论文阅读笔记--MM3DGS SLAM

前言 多传感器融合GS-SLAM的另一个IROS2024,不过这篇没有用到激光雷达&#xff0c;而是相机和IMU结合而实现的。今天看一下这篇。 文章目录 前言1.背景介绍2.关键内容2.1 跟踪2.2 深度监督2.3 惯性融合2.4建图2.5 总体流程 3.文章贡献4.个人思考 1.背景介绍 虽然SLAM方法使用…

class 023 随机快速排序

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…