虚拟机中使用Nginx + Keepalived 实现高可用 Web 负载均衡笔记

news2024/11/24 6:46:36

环境介绍

物理操作系统:Windows10
虚拟机软件:VMWare Workstation 16 Pro
虚拟操作系统统:CentOS7
Nginx:1.24.0
Keepalived:2.2.8

资源规划

在VMWare Worksattion中安装了2台CentOS7的虚拟机,桥接方式下IP地址分别为:192.168.0.35、192.168.0.36

VIPIP主机名Nginx端口默认主从
192.168.0.100192.168.0.35wongoing0188MASTER
192.168.0.100192.168.0.36wongoing0288BACKUP

1、Nginx安装

在2台虚拟机中安装Nginx,过程如下:

1.1、安装编译 Nginx 所需的依赖包

# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel ca-certificates

安装过程中有提示的时直接输入y继续就可以了。

1.2、下载Nginx

# cd /usr/local/src/
# wget http://nginx.org/download/nginx-1.24.0.tar.gz

1.3、编译安装 Nginx

# cd /usr/local/src/
# tar -zxvf nginx-1.24.0.tar.gz
# cd nginx-1.24.0
# ./configure --prefix=/usr/local/nginx
# make && make install

1.4 配置 Nginx

# vi /usr/local/nginx/conf/nginx.conf

1、把第一行的#user nobody;前面的的#去掉,把nobody改为root
2、把侦听的端口号由默认80改为88
修改后内容如下:

user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
	worker_connections 1024;
}
http {
	include mime.types;
	default_type application/octet-stream;
	#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
	# '$status $body_bytes_sent "$http_referer" '
	# '"$http_user_agent" "$http_x_forwarded_for"';
	#access_log logs/access.log main;
	sendfile on;
	#tcp_nopush on;
	#keepalive_timeout 0;
	keepalive_timeout 65;
	#gzip on;
	server {
		listen 88;
		server_name localhost;
		#charset koi8-r;
		#access_log logs/host.access.log main;
		location / {
			root html;
			index index.html index.htm;
		}
		#error_page 404 /404.html;
		# redirect server error pages to the static page /50x.html
		error_page 500 502 503 504 /50x.html;
		location = /50x.html {
			root html;
		}
	}
}

1.5 修改 Nginx 欢迎首页内容(用于后面测试, 用于区分两个节点的 Nginx)

# vi /usr/local/nginx/html/index.html

修改的内容为在标题内容中增加当前节点的IP地址
192.168.0.35这台服务器的nginx欢迎页内容如下:

<h1>Welcome to nginx! 192.168.0.35</h1>

192.168.0.36这台服务器的nginx欢迎页内容如下:

<h1>Welcome to nginx! 192.168.0.36</h1>

1.6 系统防火墙打开对应的端口 88

命令如下:

# firewall-cmd --zone=public --add-port=88/tcp --permanent				#permanent永久生效,没有此参数防火墙重启便失效

相关命令
1、查看防火墙状态

systemctl status firewalld //或者 firewall-cmd --state

2、启动防火墙

# systemctl start firewalld.service

3、重启防火墙

firewall-cmd --reload  或者  service firewalld restart

4、防火墙开放3306端口

 firewall-cmd --zone=public --add-port=3306/tcp --permanent  //--permanent永久生效,没有此参数防火墙重启便失效

5、防火墙关闭3306端口

 firewall-cmd --zone=public --remove-port=3306/tcp --permanent

6、禁用防火墙

 systemctl stop firewalld

7、设置开机启动防火墙

systemctl enable firewalld

8、停止并禁用开机启动防火墙

systemctl disable firewalld

9、查看端口列表

firewall-cmd --permanent --list-port

1.7 测试 Nginx 是否安装成功

# /usr/local/nginx/sbin/nginx -t

出现以下结果表示成功

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

1.8 启动 Nginx

# /usr/local/nginx/sbin/nginx

重启 Nginx

# /usr/local/nginx/sbin/nginx -s reload

1.9 设置 Nginx 开机启动

1、在系统服务目录下创建nginx.service文件

# vi /lib/systemd/system/nginx.service

内容如下:

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbing/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

参数解释:
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
2、设置开机自启动

systemctl enable nginx.service

3、重新载入systemd,扫描新的或有变动的单元

systemctl daemon-reload

4、查看服务状态

systemctl status nginx.service

如下图:
在这里插入图片描述

1.10 分别访问2个节点的Nginx

在浏览器上分别访问2个节点的Nginx如下图:
在这里插入图片描述

在这里插入图片描述

2、Keepalived安装

2.1 下载Keepalived

Keepalived的官网地址为:https://www.keepalived.org/

可以看到最新的稳定版本如下图:
在这里插入图片描述
如下可以在服务器上直接下载最新版本

# cd /usr/local/src/
# wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gz

2.2 解压与安装Keepalived

tar -xzvf keepalived-2.2.8.tar.gz
cd keepalived-2.2.8/
./configure --prefix=/usr/local/keepalived -sysconf=/etc
make && make install

安装完成后有3部分内容
1、/usr/local/keepalived目录内容
在这里插入图片描述
2、/etc/keepalived目录内容
在这里插入图片描述
3、/etc/sysconfig目录下有keepalived
在这里插入图片描述

2.3 修改keepalived配置

1、把2个节点服务器上的/etc/keepalived/keepalived.conf.sample复制(或者直接重命名)一份命名为keepalived.conf

cd /etc/keepalived
cp keepalived.conf.sample keepalived.conf

如下图:
在这里插入图片描述
2、编辑/etc/keepalived/keepalived.conf
(1)MASTER节点(192.168.0.35)的内容如下(可以把原来的内容全部删除):

! Configuration File for keepalived

global_defs {
   ## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
   router_id wongoing01    ## 标识本节点的字条串,通常为 hostname
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"     ## 检测 nginx 状态的脚本路径
    interval 2     ## 检测时间间隔
    weight -20   ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state MASTER      ## 主节点为 MASTER, 对应的备份节点为 BACKUP
    interface ens33     ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 虚拟机里面一般是ens33,物理主机通常是eth0
    virtual_router_id 51    ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
    priority 100            ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
    nopreempt            ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1          ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
    ## 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111      ## 真实生产,按需求对应该过来
    }
    ## 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx        ## 执行 Nginx 监控的服务
    }
    ## 虚拟 IP 池, 两个节点设置必须一样
    virtual_ipaddress {
        192.168.0.100      ## 虚拟 ip,可以定义多个
    }
}

(2)BACKUP节点(192.168.0.36)的内容如下(可以把原来的内容全部删除):

! Configuration File for keepalived

global_defs {
   router_id wongoing02
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111!i!
    }
    track_script {
        chk_nginx
    }
    virtual_ipaddress {
        192.168.0.100
    }
}

2.4 编写 Nginx 状态检测脚本

编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)脚本要求:如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程, keepalied将虚拟 ip 绑定到 BACKUP 机器上。

# vi /etc/keepalived/nginx_check.sh

内容如下:

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
	killall keepalived
fi
fi

保存后,给脚本赋执行权限:

# chmod +x /etc/keepalived/nginx_check.sh

##2.5 启动 Keepalived

# systemctl start keepalived.service

查看keepalived服务状态

# systemctl status keepalived.service

如下图:
在这里插入图片描述

2.6 设置Keepalived开启自启动

systemctl enable keepalived.service

2.7 Keepalived+Nginx 的高可用测试

同时启动192.168.0.35和192.168.36上的Nginx和Keepalived,我们通过VIP(192.168.0.100)来访问Nginx如下:
在这里插入图片描述
我们关闭192.168.0.35上的Keepalived和Nginx

systemctl stop keepalived.service
systemctl stop nginx.service

此时,再通过VIP(192.168.0.100)来访问Nginx,如下
在这里插入图片描述
我们再开启192.168.0.35上的Keepalived和Nginx
在192.168.0.100执行如下命令:

systemctl start nginx.service
systemctl start keepalived.service

或者只执行

systemctl start keepalived.service

因为我们写了脚本 nginx_check.sh,这个脚本会为我们自动自动Nginx。
此时,我们再通过VIP(192.168.50.130)来访问Nginx,如下
在这里插入图片描述至此,Keepalived + Nginx 实现高可用 Web 负载均衡搭建完毕!

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

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

相关文章

ROS:常用可视化工具的使用

目录 一、日志输出工具——rqt_console二、绘制数据曲线——rqt_plot三、图像渲染工具——rqt_image_view四、图形界面总接口——rqt五、Rviz六、Gazebo 一、日志输出工具——rqt_console 启动海龟键盘控制节点&#xff0c;打开日志输出工具 roscorerosrun turtlesim turtles…

项目资源利用率是什么?如何提高?

任何项目经理的主要职责之一是跟踪项目资源&#xff0c;以便在需要时随时可用。为此&#xff0c;他们必须衡量资源利用率。通过计算资源利用率&#xff0c;项目经理和企业主可以更好地了解如何安排劳动力或设备等资源&#xff0c;以尽量降低成本&#xff0c;提高生产力&#xf…

Android关于图片资源管理的思考

作者&#xff1a;流浪汉kylin 一. 前言 当我们的项目比较大时&#xff0c;迭代的时间比较长的时候&#xff0c;我们往往都会对代码进行重构&#xff0c;会对代码进行一次系统的整合和规范的讨论&#xff0c;为了之后的开发能够避免写重复的代码&#xff0c;方便代码的维护和扩…

面向对象——权限修饰符、匿名内部类

package关键字 为什么要有包&#xff1f; 将字节码&#xff08;.class&#xff09;进行分类存放 包其实就是文件夹 包的定义及注意事项 定义包的格式 package 包名 多级包用.分割&#xff0c;如package com.heima里面的.就是分隔符 定义包的注意事项 package语句必须是程序的第…

扩容系统盘【centos-root】

问题描述&#xff1a; 磁盘空间有42G&#xff0c;但是系统盘只有6G。 问题抛出&#xff1a;&#xff08;P2原本只有7G&#xff0c;其中有30G错误分配到nvmeOn1p2了&#xff09;p2的30G空间怎么合理分配给系统盘? &#xff08;执行&#xff1a; sudo growpart /dev/nvme0n1 …

[学习笔记] [机器学习] 7. 集成学习(Bagging、随机森林、Boosting、GBDT)

视频链接数据集下载地址&#xff1a;无需下载 1. 集成学习算法简介 学习目标&#xff1a; 了解什么是集成学习知道机器学习中的两个核心任务了解集成学习中的 Boosting 和 Bagging 1.1 什么是集成学习 集成学习通过建立几个模型来解决单一预测问题。它的工作原理是生成多个分…

【P53】JMeter 断言结果(Assertion Results)

文章目录 一、断言结果&#xff08;Assertion Results&#xff09;参数说明二、准备工作三、测试计划设计 一、断言结果&#xff08;Assertion Results&#xff09;参数说明 可以查看断言的成功和失败数 使用场景&#xff1a;一般在调试测试计划期间用来查看断言的成功和失败…

水库大坝的安全监测内容包括哪些?

在水库大坝的实时监测中&#xff0c;主要任务是通过无线传感网络监测各个监测点的水位、水压、渗流、流量、扬压力等数据&#xff0c;并在计算机上用数据模式或图形模式进行实时反映&#xff0c;以掌握整个水库大坝的各项变化情况。大坝安全监测系统能实现全天候远程自动监测&a…

本地项目托管到 Gitee

本地项目托管到 Gitee 1、创建远程仓库2、Git Bash Here第一步&#xff1a;初始化本地仓库 git init第二步&#xff1a;建立链接git remote add origin xxx第三步&#xff1a;将远程仓库中的文件推送至本地仓库中git pull --rebase origin master第四步&#xff1a;将本地项目放…

Paddle与AFFormer环境配置

本次重新记录一下paddle的安装过程&#xff0c;主要是因为在进行服务器环境初始化时没有进行正确的环境安装。 基础环境 云硬盘部署 conda安装 Anaconda安装 首先是下载相关包命令&#xff1a; sudo wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.…

7.面向对象编程(基础部分)|Java学习笔记

文章目录 类与对象类与对象的关系类和对象的区别和联系对象在内存中的存在形式类和对象的内存分配机制 成员方法方法的调用机制原理 成员方法传参机制基本数据类型的传参机制引用数据类型的传参机制成员方法返回类型是引用类型应用实例 方法递归调用递归重要规则汉诺塔和八皇后…

有哪些内外网都能传输文件的工具-镭速

随着互联网的快速普及&#xff0c;不同地区的人们之间进行了更为频繁的交流与合作。对于企业和组织而言&#xff0c;文件的共享和传输也变得越来越重要&#xff0c;特别是在不同的地理位置之间。此时&#xff0c;一个既可在内网使用&#xff0c;又能在外网实现高速传输的工具就…

企业直播MR虚拟直播实例(混合现实直播)

MR虚拟直播带来的内容、体验和互动的升级&#xff0c;对多个行业、场景具有重大意义&#xff0c;尤其是在汽车、科技、带货、活动等对视觉呈现要求更高的行业和场景中&#xff0c;将会重塑用户的观看体验&#xff0c;​高效赋能企业业务增长​。随着用户对直播体验的需求、企业…

Learning C++ No.29 【右值引用实战】

引言&#xff1a; 北京时间&#xff1a;2023/6/7/9:39&#xff0c;上午有课&#xff0c;且今天是周三&#xff0c;承接之前博客&#xff0c;今天我又去帮我舍友签到早八&#xff0c;但愿这次不会被发现吧&#xff01;嘻嘻嘻&#xff01;并且刚刚发文有关对C11相关知识&#xf…

Day_47选择排序

目录 一. 选择排序的实现 1. 简单选择排序 2. 性能分析 二. 代码实现 1. 核心代码 三. 代码展示 四. 数据测试 五. 总结 一. 选择排序的实现 1. 简单选择排序 选择排序的基本思想是&#xff1a;每一趟&#xff08;如第i趟&#xff09;在后面n-i1&#xff08;i1,2,3...n-1&a…

Java 面试题:Spring,Spring MVC,Spring Boot 之间什么关系?

来&#xff0c;先和我看张图&#xff1a; Spring全家桶了为了解决不同场景的问题&#xff0c;逐渐演化出多套生态环框&#xff0c;如&#xff1a;Spring、SpringMVC、SpringBoot、SpringCloud。 Spring MVC和Spring Boot都属于Spring&#xff0c;Spring MVC是基于Spring的一个…

【每日算法】【168. Excel表列名称】

☀️博客主页&#xff1a;CSDN博客主页 &#x1f4a8;本文由 我是小狼君 原创&#xff0c;首发于 CSDN&#x1f4a2; &#x1f525;学习专栏推荐&#xff1a;面试汇总 ❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏 ⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&…

Vue-ECharts使用说明

Vue-ECharts使用说明 vue-echarts 是在Apache Echarts官网的echarts使用方法上二次封装的组件&#xff0c;方便我们创建echarts图应用到我们的项目中。 参考&#xff1a; vue-echarts 官网&#xff1a;https://github.com/ecomfe/vue-echarts Apache Echarts 官网&#xff1a;h…

推荐一款比Flink CDC更好用的免费CDC工具

很多中大型企业都希望选择一款足够轻量好用的CDC工具&#xff0c;而且最好是小白用户都能使用的CDC工具&#xff0c;今天就推荐一款小白都能安装并立即使用的CDC工具给大家。 CDC&#xff08;Change Data Capture&#xff09;是一种用于捕获和传递数据库实时变更的技术。它允许…

怎样通过大数据获客?

零售商知道他们需要大数据&#xff0c;并且正在向前冲锋以进入游戏。但许多零售商继续面临挑战。应该收集什么类型的数据&#xff1f;应如何使用数据来生成见解&#xff1f;如何衡量投资回报率&#xff1f; 101data最近对美国各种规模的零售商进行了调查。当被问及哪些流程将受…