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

news2024/9/27 9:57:07

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.conf

server {
        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 keepalived

global_defs {
   notification_email {
   343590279@qq.com
   }
   smtp_server 192.168.29.1
   smtp_connect_timeout 30
   router_id LVS_lb1
}

vrrp_script check_nginx {
   script "/shell/check-nginx.sh"
   interval 2
   weight -20
   timeout 10 
   user root root
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.29.100/24 dev ens33 label ens33:1
    }
    track_script {
      check_nginx
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
    auth_type PASS
    auth_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 ];then
        systemctl stop keepalived.service
fi

lb2:

! Configuration File for keepalived

global_defs {
   notification_email {
   		343590279@qq.com
   }
   smtp_server 192.168.29.1
   smtp_connect_timeout 30
   router_id LVS_lb2
}

vrrp_script check_nginx {
   script "/shell/check-nginx.sh"
   interval 2
   weight -20
   timeout 10 
   user root root
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.29.100/24 dev ens33 label ens33:1
    }
    track_script {
      check_nginx
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
    auth_type PASS
    auth_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 ];then
        systemctl 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 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:34:e8:e9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.29.145/24 brd 192.168.29.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.29.100/24 scope global secondary ens33:1
       valid_lft forever preferred_lft forever
    inet6 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 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:da:e1:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.29.220/24 brd 192.168.29.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.29.200/24 scope global secondary ens33:2
       valid_lft forever preferred_lft forever
    inet6 fe80::b09a:b99e:bc92:62ee/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::9073:a63f:e689:8462/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 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 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:da:e1:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.29.220/24 brd 192.168.29.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.29.100/24 scope global secondary ens33:1
       valid_lft forever preferred_lft forever
    inet 192.168.29.200/24 scope global secondary ens33:2
       valid_lft forever preferred_lft forever
    inet6 fe80::b09a:b99e:bc92:62ee/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::9073:a63f:e689:8462/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 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.coloradmin.cn/o/2169625.html

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

相关文章

计算机毕业设计 基于Hadoop的智慧校园数据共享平台的设计与实现 Python 数据分析 可视化大屏 附源码 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

深度拆解:如何在Facebook上做跨境电商?

国内社交媒体正在逐渐兴盛&#xff0c;海外也不例外。在数字营销的新时代&#xff0c;Facebook已成为跨境电商不可或缺的平台之一。通过Facebook的巨大流量&#xff0c;卖家可以更好的触及潜在消费者&#xff0c;以实现销售增长。本文就深度拆解一下&#xff0c;卖家如何利用Fb…

STM32基础学习笔记-DHT11单总线协议面试基础题7

第七章、DHT11: 单总线协!议 常见问题 1、DHT11是什么 &#xff1f;有什么特性 &#xff1f; 2、单总线协议是什么 &#xff1f;原理 &#xff1f;DHT11的单总线协议的组成 &#xff1f; ## 1、DHT11定义 单总线协议是一种用于在多个设备之间进行通信的协议&#xff0c;所有…

从 Shapley 到 SHAP — 数学理解

如何计算 SHAP 特征贡献的概述 假设你(玩家 1)和朋友(玩家 2)参加了一场 Kaggle 比赛,你最终赢得了 10,000 元的一等奖。现在,你想公平地分配这笔钱。你的朋友建议你平分。但是,你的超参数调整技能更出色。你相信你应该得到更大的份额,因为你为团队做出了更多贡献。考虑…

LeetCode每日一练 —— 88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 思路&#xff1a;用 下标充当指针&#xff0c;…

排序--希尔排序

希尔排序介绍 希尔排序核心思想就是:1,分组;2,直接插入排序:越有序越快 希尔排序就是多次利用直接插入排序的一个排序算法. 希尔排序的算法思想:间隔式分组,利用直接插入排序让组内有序,然后缩小分组再次排序,直到组数为1希尔排序的理论基础就是直接插入排序越有序越快; 希尔排…

《向量数据库指南》——Zilliz迁移服务:一键解锁跨平台数据迁移新纪元

在数据驱动的时代背景下&#xff0c;非结构化数据的处理与迁移已成为企业数字化转型中不可或缺的一环。随着向量数据库技术的飞速发展&#xff0c;尤其是像Milvus这样的高性能向量数据库系统的广泛应用&#xff0c;如何高效、安全、准确地实现数据在不同系统间的迁移&#xff0…

软考高级:系统设计 - MDA 模型 AI 解读

生活化例子 想象一下&#xff0c;你要建造一栋房子。建房子需要三个阶段&#xff1a; CIM (概念阶段)&#xff1a;这是你想象中的房子。你大概知道房子需要几间卧室、厨房、卫生间&#xff0c;但是还没有详细的设计图。就像在脑海中有个大概的想法&#xff1a;我要建个温馨的…

Spring Boot应用:电子商务平台开发

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…

2024年9月26日--- Spring-AOP

SpringAOP 在学习编程过程中&#xff0c;我们对于公共方法的处理应该是这样的一个过程&#xff0c;初期阶段如下 f1(){Date now new Date();System.out.println("功能执行之前的各种前置工作"now)//...功能代码//...功能代码System.out.println("功能执行之前…

局域网广域网,IP地址和端口号,TCP/IP 4层协议,协议的封装和分用

前言 在古老的年代&#xff0c;如果我们要实现两台机器进行数据传输&#xff0c; A员工就得去B员工的办公电脑传数据&#xff08;B休息&#xff0c;等A传完&#xff09;&#xff0c;这样就很浪费时间 所以能不能不去B的工位的同时&#xff0c;还能传数据。这时候网络通信就出来…

springboot异常(三):异常处理原理

&#x1f345;一、BasicErrorController ☘️1.1 描述 BasicErrorController是Springboot中默认的异常处理方法&#xff0c;无需额外的操作&#xff0c;当程序发生了异常之后&#xff0c;Springboot自动捕获异常&#xff0c;重新请求到BasicErrorController中&#xff0c;在B…

JS设计模式之桥接模式:搭建跨越维度的通路

引言 在软件开发中&#xff0c;我们经常遇到需要对不同的抽象类进行不同的实现的情况&#xff0c;而传统的对象嵌套并不是一个优雅且可扩展的解决方案&#xff0c;因此这正是桥接模式的用武之地。桥接模式通过将抽象与实现分离&#xff0c;使得它们可以独立变化&#xff0c;从…

前缀和(5)_和为k的子数组

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 前缀和(5)_和为k的子数组 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 题目…

列表控件QListWidget

显示模式 有两种显示模式&#xff0c;列表模式和图标模式 // 获取和设置显示模式 QListView::ViewMode viewMode() const void setViewMode(QListView::ViewMode mode) QListView::ViewMode有两个取值 QListView::ListMode 列表模式 QListView::IconMode 图标模式 交替背…

《银河战星:僵局》风灵月影修改器使用指南,轻松驾驭宇宙战场

在策略射击游戏《银河战星&#xff1a;僵局》中&#xff0c;合理利用风灵月影修改器能极大提升你的游戏体验。 以下是简明操作步骤&#xff0c;助你迅速上手&#xff0c;遨游星际&#xff1a; 1.下载安装&#xff1a; 首先&#xff0c;确保从正规渠道获取风灵月影修改器&…

冒泡排序-C语言

1.问题&#xff1a; 从小到大对10个数进行排序&#xff0c;要求使用冒泡排序实现。 2.解答&#xff1a; 排序规律有两种&#xff1a;一种是“升序”&#xff0c;从小到大&#xff1b;另一种是“降序”&#xff0c;从大到小。 3.代码&#xff1a; #include<stdio.h>//头…

保护您的网络:入侵检测系统 IDS 终极指南

IDS 和 IPS&#xff1a;了解异同-CSDN博客 IDS(入​​侵检测系统) 和 IPS(入​​侵防御系统) 之间的区别-CSDN博客 即便是今天&#xff0c;互联网仍与黑客肆意横行的网络无异。 但不必害怕&#xff01;我们有解决您问题的完美解决方案&#xff1a;入侵检测系统 I DS。 IDS就…

本地打开打包后的dist文件报错的解决方法

出现问题 本地直接打开dist文件夹会报错&#xff0c;报错信息类似于&#xff1a; Access to script at file:///D:/assets/index.9cb0ffcc.js from origin null has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: chrome, ch…

TypeScript基础语法与面对对象

TypeScript 基础语法 TypeScript 与面向对象 面向对象是一种对现实世界理解和抽象的方法。TypeScript 是一种面向对象的编程语言。面向对象主要有两个概念&#xff1a;对象和类 对象&#xff1a;对象是类的一个实例&#xff08;对象不是找个女朋友&#xff09;&#xff0c;有…