Nginx高可用集群

目录

  • 一.简介
  • 二.案例
    • 1.实现思路
    • 2.配置文件修改
    • 3.实现效果
    • 故障转移机制

一.简介

以提高应用系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性,达到高可用的容错效果。例如“故障切换”、“双机热备”、“多机热备”等都属于高可用集群技术。HA的工作方式包括双工主从两种模式,双工即所有节点同时上线,而主从只有主节点在线提供服务,当主节点出现问题后备接替出故障的主节点为用户提供服务

集群实现的方式:
在企业中一般通过软件、硬件两种方式来实现集群

企业中常用的开源集群软件有:Nginx、LVS、Haproxy、Keepalived、Heartbeat等

企业中常用的商业集群硬件有:F5、Netscaler、Radware、A10等

二.案例

1.实现思路

在这里插入图片描述

2.配置文件修改

主机上配置

#修改Nginx1的配置文件
vi /usr/local/nginx/conf/nginx.conf
upstream myserver {server 10.10.100.222:8080;server 10.10.100.222:8081;
}server {listen       80;server_name  10.10.100.222;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://myserver;}
#启动主节点上的tomcat/usr/local/tomcat1/bin/startup.sh/usr/local/tomcat2/bin/startup.sh
#Nginx1上安装keepalivedyum install -y keepalived#配置keepalived的配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc#邮件服务器通知地址(暂不配置,默认即可)smtp_server 192.168.200.1#邮件服务器超时时间(暂不配置,默认即可)smtp_connect_timeout 30#当前虚拟机的IP地址router_id 10.10.100.222
}vrrp_script Monitor_Nginx {script "/etc/keepalived/nginx_check.sh"    #检测脚本执行的路径interval 2                                 #检测脚本执行的间隔weight 2                                   #检测脚本执行的权重
}vrrp_instance VI_1 {state MASTER         #标识这个机器是MASTER还是BACKUPinterface ens192       #当前机器的网卡名称  virtual_router_id 51 #虚拟路由的编号,主备必须一致priority 100         #主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1         #(VRRP Multicast广播周期秒数)authentication {auth_type PASS   #(VRRP认证方式)auth_pass 1111   #(密码)}track_script {Monitor_Nginx #(调用Nginx进程检测脚本)}virtual_ipaddress {10.10.100.198  #虚拟IP地址}
}
#编写脚本
#!/bin/bashnginxpid=`ps -C nginx --no-header |wc -l`if [ $nginxpid -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 1nginxpid=`ps -C nginx --no-header |wc -l`if [ $nginxpid -eq 0 ];thensystemctl stop keepalivedfifi

脚本功能说明:统计nginx进程数量,如果进程数量的值等于0,说明nginx挂了,那么执行/usr/local/nginx/sbin/nginx去启动分发器,等待1秒后再次检查进程数量,如果进程数量的值还是等于0,则执行systemctl stop keepalived停止keepalived服务。这样就停止发组播,释放VIP,而备用服务器就开始接手工作了。

备机上配置

#安装nginx
#修改配置文件
vi /usr/local/nginx/conf/nginx.conf
upstream myserver {server 10.10.100.222:8080;server 10.10.100.222:8081;
}server {listen       80;server_name  10.10.100.222;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://myserver;}#启动nginx服务
/usr/local/nginx/sbin/nginx

一定要注意router_id、state、interface的值

#安装keepalived
yum install -y keepalived#修改keepalived的配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc#邮件服务器通知地址(暂不配置,默认即可)smtp_server 192.168.200.1#邮件服务器超时时间(暂不配置,默认即可)smtp_connect_timeout 30#当前虚拟机的IP地址router_id 10.10.100.221
}vrrp_script Monitor_Nginx {script "/etc/keepalived/nginx_check.sh"    #检测脚本执行的路径interval 2                                 #检测脚本执行的间隔weight 2                                   #检测脚本执行的权重
}vrrp_instance VI_1 {state BACKUP         #标识这个机器是MASTER还是BACKUPinterface ens192       #当前机器的网卡名称  virtual_router_id 51 #虚拟路由的编号,主备必须一致priority 90         #主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1         #(VRRP Multicast广播周期秒数)authentication {auth_type PASS   #(VRRP认证方式)auth_pass 1111   #(密码)}track_script {Monitor_Nginx #(调用Nginx进程检测脚本)}virtual_ipaddress {10.10.100.198  #虚拟IP地址}
}#编辑脚本
#!/bin/bashnginxpid=`ps -C nginx --no-header |wc -l`if [ $nginxpid -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 1nginxpid=`ps -C nginx --no-header |wc -l`if [ $nginxpid -eq 0 ];thensystemctl stop keepalivedfifi#启动keepalived服务

3.实现效果

222,221,198机器都能访问到内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看网络,100.198虚拟ip在主服务器上
在这里插入图片描述
在这里插入图片描述

当主机出现故障,主机上的的keepalived的服务不在了,备机开始工作
查看网络
在这里插入图片描述
在这里插入图片描述

故障转移机制

keepalived高可用服务之间故障切换转移,是通过VRRP的来实现的,在keepalived服务正常工作时,住Master节点会不断的向备节点发送(组播的方式)心跳包,用于告诉备Backup节点自己还属于存活状态,当Master节点发送故障时,就无法发送心跳包消息,备节点也就因此无法继续检测到来之Master的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点心跳恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ceph集群的扩容缩容

文章目录 集群扩容添加osd使用ceph-deploy工具手动添加 添加节点新节点前期准备新节点安装ceph,出现版本冲突 ceph-deploy增加节点 集群缩容删除osd删除节点 添加monitor节点删除monitor节点使用ceph-deploy卸载集群 实验所用虚拟机均为Centos 7.6系统,8…

windows系统丢失mfc120u.dll的解决方法

1.mfc120u.dll是什么 mfc120u.dll是Windows操作系统中的一个动态链接库(Dynamic Link Library,简称DLL)文件。它包含了一些用于运行C程序的函数和其他资源。这个特定的DLL文件是Microsoft Foundation Classes(MFC)库的…

【数据结构OJ题】相交链表

原题链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 看到这道题,很容易想到的方法就是暴力求解,就是将一个链表的每个结点的地址…

曲线救国 | 双非渣硕的秋招路

作者 | 带带大兄弟 面试锦囊之面经分享系列,持续更新中 欢迎后台回复"面试"加入讨论组交流噢 一篇旧文,可以参考~ 写在前面 双非渣硕,0实习,3篇水文,三个给老板当打工仔的nlp横向项目,八月份开…

文本三剑客之sed编辑器

sed 一、sed简介1.1 什么是sed?1.2 sed原理1.3 sed核心功能 二、sed命令格式详解2.1 命令格式2.2 常用选项2.3 sed脚本语法2.3.1 基本语法结构2.3.2 地址部分-----指定匹配范围2.3.3 命令部分-----要执行的命令 三、sed查找替换3.1 基本语法3.2 分组后向引用3.3 变量…

【面试八股文】每日一题:谈谈你对线程的理解

每日一题-Java核心-谈谈你对线程的理解【面试八股文】 Java线程是Java程序中的执行单元。一个Java程序可以同时运行多个线程,每个线程可以独立执行不同的任务。线程的执行是并发的,即多个线程可以同时执行。 1. 线程的特点 Java中的线程有如下的特点 轻…

[LeetCode - Python]844. 比较;含退格的字符串(Easy);415. 字符串相加(Easy)

1.题目 844. 比较含退格的字符串(Easy) 1.代码: class Solution:def backspaceCompare(self, s: str, t: str) -> bool:# 暴力法s list(s)t list(t)M 0N 0for i in range(len(s)):i -M if s[i] # :if i > 0 :s.pop(i)s.pop(i-…

LION AI 大模型落地,首搭星纪元 ES

自新能源汽车蓬勃发展以来,随着潮流不断进步和变革的“四大件”有着明显变化。其中有:平台、智能驾驶、配置、以及车机。方方面面都有着不同程度的革新。 而车机方面,从以前老旧的媒体机、 CD 机发展至如今具有拓展性、开放性、智能化的车机…

Docker部署php运行环境(php-fpm+nginx)

前言 如果使用docker去部署一套php的运行环境,我们需要构建出nginx、php-fpm两个容器,nginx通过fast_cgi协议去转发php-fpm中的端口,从而实现web server的搭建,接下来以php的laravel框架为演示例子。 部署php-fpm 第一步 编写ph…

一、数学建模之线性规划篇

1.定义 2.例题 3.使用软件及解题 一、定义 1.线性规划(Linear Programming,简称LP)是一种数学优化技术,线性规划作为运筹学的一个重要分支,专门研究在给定一组线性约束条件下,如何找到一个最优的决策&…

Prometheus 监控系统---你值得拥有

目录 一:Prometheus 1、Prometheus 概述 2、应用场景 3、Prometheus 的特点 4、Prometheus 的生态组件 (1)Prometheus server:服务核心组件 (2)Client Library: 客户端库 (3&#xff0…

前端开发怎么解决前端安全性的问题? - 易智编译EaseEditing

前端安全性是保护前端应用程序免受恶意攻击和数据泄露的重要方面。以下是一些解决前端安全性问题的关键方法: 输入验证与过滤: 对所有用户输入进行验证和过滤,防止恶意用户通过注入攻击等手段破坏应用程序或获取敏感信息。 跨站点脚本&#…

安卓移动应用开发实训室建设方案

一 、系统概述 安卓移动应用开发作为新一代信息技术的重点和促进信息消费的核心产业,已成为我国转变信息服务业的发展新热点:成为信息通信领域发展最快、市场潜力最大的业务领域。互联网尤其是移动互联网,以其巨大的信息交换能力和快速渗透能…

k8s 自身原理之高可用

说到高可用,咱们在使用主机环境的时候(非 k8s),咱做高可用有使用过这样的方式: 服务器做主备部署,当主节点和备节点同时存活的时候,只有主节点对外提供服务,备节点就等着主节点挂了…

logstash配置文件

input { kafka { topics > “xxxx” bootstrap_servers > “ip:port” auto_offset_reset > “xxxx” group_id > “xxxx” consumer_threads > 3 codec > “json” } } filter { grok { match > { “message” > ‘%{IP:client_ip} - - [%{HTTPDATE:…

PostgreSQL父子建表查询所有的子数据-利用自定义函数查询

pgsql 函数查询代码 select find_space_tree_list_by_nodeid(1,1) 查询结果示意图 获取子集函数代码 CREATE OR REPLACE FUNCTION "public"."find_space_tree_list_by_nodeid"("nodeid" varchar, "viewid" varchar)RETURNS "…

电脑远程接入软件可以进行文件传输吗?快解析内网穿透

电脑远程接入软件的出现,让我们可以在两台电脑之间进行交互和操作。但是,很多人对于这些软件能否进行文件传输还存在一些疑问。下面的文章将解答这个问题。 1.电脑远程接入软件可以进行文件传输。传统上,我们可能会通过传输线或者移动存储设…

【图论】Floyd算法

一.简介 Floyd算法,也称为Floyd-Warshall算法,是一种用于解决所有节点对最短路径问题的动态规划算法。它可以在有向图或带权图中找到任意两个节点之间的最短路径。 Floyd算法的基本思想是通过中间节点逐步优化路径长度。它使用一个二维数组来存储任意两…

mongodb 数据库管理(数据库、集合、文档)

目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1)update() 方法 2)replace() 方法 一、数据库操作 1、创建数据库 创建数据库…