这里写目录标题

  • 一、准备阶段:
  • 二、安装阶段:
    • 1.安装pcre及其依赖
    • 2.安装ngnix
    • 3.安装keepalived
  • 三、配置阶段:
  • 四、启动阶段:
    • 1.集群测试
    • 2. 宕机测试

一、准备阶段:

准备:两台虚拟机 CentOS Linux release 7.5.1804 (Core)、pcre-8.45.tar.bz2nginx-1.21.3.tar.gz
ip地址分别为:192.168.10.102192.168.10.103
关于网关和子网掩码:请看下图,可以知道两台虚拟机所在的子网为192.168.10.xxx,所以下面设置的虚拟ip就是要满足这个要求
虚拟机ip可通过ifconfig查找获取

查看两台虚拟机防火墙,保证处于关闭状态:

[root@hadoop102 nginx-1.21.3]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)
[root@hadoop103 local]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)

2.1 进入 nginx 官网,下载
下载ngnixpcre
ngnix:http://nginx.org
pcre:命令拉取
进入/opt/software/拉取pcre

cd /opt/software/
wget http://downloads.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
#查看当前目录内容
ls -l

二、安装阶段:

1.安装pcre及其依赖

解压文件

tar xvf pcre-8.45.tar.gz

进入解压后的目录

cd pcre-8.45
[root@hadoop102 pcre-8.45]# pwd
/opt/software/pcre-8.45

在当前目录下,先安装相关依赖
安装 opensszlib

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

然后

./configure

./configure 完成后,回到 pcre 目录下执行 make
再执行 make install

make && make install

验证安装

[root@hadoop102 pcre-8.45]# pcre-config --version
8.45

/usr/local/bin目录下会生成pcre-configpcregreppcretest三个文件

2.安装ngnix

类似pcre安装,不用再次安装依赖包了,步骤如下
1、 解压缩 nginx-xx.tar.gz 包。
2、 进入解压缩目录, 执行./configure。
3、 make && make install
验证安装

进入nginx目录下的sbin目录,启动nginx

./nginx

在本机浏览器中输入192.168.10.102访问缺省时端口是80,来启动nginx,出现以下结果说明nginx启动正常

退回nginx主目录,ls查看内容

两台虚拟机同样安装上面步骤安装,不要使用xcall分发,会导致用不了

3.安装keepalived

不要通过yum安装!不要通过yum安装!不要通过yum安装!
重要事情说三遍,亲测,版本太低,导致与nginx无法兼容,报错,一直无法解决

三、配置阶段:

配置高可用文件
(1)修改/etc/keepalived/keepalived.conf 配置文件
进入/opt/software目录下拉取2.0.9版本的keepalived,下载很快,用的华为云的镜像,而且很好用

wget https://mirrors.huaweicloud.com/keepalived/keepalived-2.0.9.tar.gz

解压并安装

 tar xf keepalived-2.0.9.tar.gzcd keepalived-2.0.9/./configuremake && make insatll

执行文件keepalived.service安装位置默认安装在/usr/local/sbin
配置文件keepalived.conf安装位置默认安装在/usr/local/etc/keepalived/keepalived.conf
不想用了的话,也很好卸载,卸载时把这两个位置卸载即可
/usr/local/etc{sysconfig, keepalived}/usr/local/sbin/keepalived.service
或通过whereis keepalived来查找路径
配置keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ # 配置在优先级最高处
cp /usr/local/sbin/keepalived /etc/init.d/ #设置为全局

启动keepalived

systemctl daemon-reload
systemctl start keepalived

查看服务是否启动成功

配置/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.locsmtp_server 192.168.10.102smtp_connect_timeout 30router_id LVS_DEVEL #也可以写ip地址,这里是host的映射名,需要到host中配#置,不过随便写一个唯一也没事,最多就是警报的时候找不到ip,通知不到而已,host#文件位置在/etc/hosts
}vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2 #(检测脚本执行的间隔)weight 20
}vrrp_instance VI_1 {state MASTER # 备份服务器上将 MASTER 改为 BACKUPinterface ens33 //网卡virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1authentication {auth_type PASSauth_pass 1111}track_script{ # 这里调用检测脚本执行,一秒检测一次chk_http_port}virtual_ipaddress {192.168.10.50 // VRRP H 虚拟地址}
}

从机只改两处:

state MASTER # 备份服务器上将 MASTER 改为 BACKUP
priority 100 # 备用机改为90就好,备机取不同的优先级,主机值较大,备份机值较小

这里主机写权值为100,而备用机写90是有根据的,是靠调用检测脚本来的,里边有权重20,只要检测不到,说明宕机了,那那权重就不给这台机器了,总体权限priority+weight就会降低为priority,而备用机没有宕机依旧是priority+weight,就在这里发生了主备切换了
(2)在/usr/local/src 添加检测脚本nginx_check.sh,并添加执行权限

#!/bin/bash
# 获取nginx进程数,并赋值给A,没有进程则为0
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then# 开启nginx服务/usr/local/nginx/sbin/nginxsleep 2# nginx没有启动成功if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then# 杀死keepalived进程killall keepalivedfi
fi

通过以下命令添加执行权限

chmod +x nginx_check.sh

如果是复制我的脚本,复制后先./nginx_check.sh看能否运行

[root@hadoop102 src]# ./nginx_check.sh
-bash: ./xxxxx.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录

如果出现以上错误,说明很有可能是由以下原因引起的:
1.在Windows系统上编写的Shell脚本,然后上传到Linux服务器执行
2.Windows系统中的换行符是"\n\r",Linux系统中的换行符是"\n",因此需要将\r替换为空白。

解决方案:
Linux sed命令可自动编辑一个或多个文件,执行以下命令即可。

sed -i 's/\r$//' xxxxx.sh

四、启动阶段:

启动前可以先开启服务器系统日志,方便查错

tail -f /var/log/messages

开启后,将该会话作为日志跟踪,再开启另外两个会话给两台虚拟机

1.集群测试

集群启动必须按照以下顺序启动,否则无法唤醒从机
1.启动两台虚拟机的ngnix

./nginx

2.启动主节点的keepalived
3.启动从节点的keepalived

测试:
浏览器输入虚拟ip地址:192.168.10.50

192.168.10.102:查看虚拟ip192.168.10.50保持开放着
192.168.10.103:还没有唤醒192.168.10.50这个虚拟ip

2. 宕机测试

先关闭主节点keepalived,再关闭nginx,没有为什么,先关闭nginx后,keepalived的脚本检测不到nginx进程后会试图去启动服务,需要先关闭keepalived服务
192.168.10.102:虚拟ip已经没有了,看看是否转移到了192.168.10.103节点去了
192.168.10.103:发现多了一个虚拟ip
再次访问页面:

访问成功,192.168.10.102宕机后,192.168.10.103接替了这个虚拟ip

这时还没完,先把nginx服务开启,再开启keepalived后,发现102节点多了虚拟ip,103的虚拟消失了,再次访问页面,成功,说明102优先级是高于103

为了解决集群,足足切换了好几个版本的keepalived,所以,想配置集群而且刚好看到本文的,推荐连同ngnixpcre的版本保持一致

特别鸣谢:https://www.cnbugs.com/post-2857.html
解决文件执行问题:https://blog.csdn.net/l1028386804/article/details/110246256
以及B主尚硅谷:https://www.bilibili.com/video/BV1zJ411w7SV?p=15
Keepalived权值问题详见:https://blog.csdn.net/HzSunshine/article/details/62041036

利用两台虚拟机搭建Nginx高可用集群、宕机测试、宕机恢复相关推荐

  1. 搭建Nginx高可用集群(keepalived+双机热备)

    一.Nginx高可用 首先了解一下什么是高可用,高可用是分布式系统架构中必须考虑的因素. 我们都知道,使用nginx的反向代理和负载均衡可以解决tomcat等web容器的单点故障以及高并发等问题. 反 ...

  2. Nginx配置——搭建 Nginx 高可用集群(双机热备)

    Nginx配置--搭建 Nginx 高可用集群(双机热备) https://blog.csdn.net/zxd1435513775/article/details/102508573?utm_medi ...

  3. 汇总-13台虚拟机搭建一个高可用负载均衡集群架构

    要求 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,具体需求如下. 设计你认为合理的架构,用visio把架构图画出来 搭建lnmp.tomcat+jdk环境 三个站点分别为:dis ...

  4. docker搭建redis高可用集群

    目标:docker搭建redis高可用集群 1.架构:六个redis容器,三主三从,主从复制,主机宕机从机自动替代 2.网络架构设计:设计一个专属redis的docker网络 docker netwo ...

  5. Windows环境下安装HBase(Hadoop3.1.3、HBase2.2.5)与Linux环境下搭建HBase高可用集群

    Windows环境下安装HBase 下载HBase 官网: https://hbase.apache.org/downloads.html 不同版本集合:https://archive.apache. ...

  6. 容器编排——Kubeadm在线或离线搭建kubernetes高可用集群

    目录 1.架构简介: 2.集群架构图: 3.集群服务器: 4.修改主机名称: 5.修改hosts配置文件: 6.关闭selinux: 7.关闭防火墙: 8.关闭swap: 9.设置iptables网桥 ...

  7. 零基础带你一步步搭建Nacos高可用集群(史上最详细,赛过教科书!)为此我准备了三台云服务器+云数据库

    容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给!{容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给!}容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给! 如果你不懂jd ...

  8. 搭建Eureka高可用集群

    做的快哭了已经 文章目录 Eureka可用高集群的搭建 一.Eureka的工作原理 二.Eureka中服务提供者与服务消费者的关系 三.搭建Eureka-Server和Eureka-Client 四. ...

  9. 二进制方式搭建Kubernetes高可用集群(超丰富的组件概念理论总结)

    二进制方式部署Kubernetes高可用集群 文章目录 二进制方式部署Kubernetes高可用集群 1.环境准备 1.1.Kubernetes高可用集群部署方式 1.2.Kubernetes集群弃用 ...

最新文章

  1. oracle 用户 表空间绑定,ORACLE表空间绑定用户操作流程
  2. 浅谈数组常见遍历方法
  3. java swing 导出文件_java swing (一) 导出excel文件并打开
  4. 10进制转换成其他进制-短除法
  5. LVS入门篇(五)之LVS+Keepalived实战
  6. Python产生随机数(转)
  7. java多线程的同步控制_Java多线程并发控制工具信号量Semaphore,实现原理及案例...
  8. Python3.6全栈开发实例[022]
  9. 锻造完美U盘小偷:活用消息机制
  10. java并发编程(12)-- 线程池 实际⽣产使⽤哪⼀个线程池 怎么设置
  11. python函数缺省参数实例_Python中函数及默认参数的定义与调用操作实例分析
  12. ios 热更新可行性分析
  13. Minidump方式保留程序崩溃现场
  14. linux运行raxml,在线和本地两种方法构建 RAxML 进化树方法和解读
  15. cad2019菜单栏怎么调出来_AutoCAD2019工具栏怎么调出来 工具栏没了找不到解决方法...
  16. 利用计算机指令清理垃圾,Win7电脑清理垃圾的运行命令代码是什么?
  17. 陶哲轩1(数学牛孩的成长研究
  18. Redis基础命令(Hash类型)对field进行的操作
  19. 基于FPGA的数字识别实现
  20. Shell脚本学习-阶段二十七-命令解释二

热门文章

  1. 醉逍遥显示无法更新服务器,醉逍遥
  2. 树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门
  3. Mybatis事务(一)事务管理方式
  4. 斗破苍穹-雅菲。位列高贵,华丽绝伦,红颜娇美,风姿绰约
  5. BookshelfB
  6. kicad 自动生成封装库_【工具】KiCad版本嘉立创SMT贴片库及问题说明
  7. java根据生日精确计算年龄_java根据出生日期计算年龄(精确到天)
  8. 1.7 pyenv和venv的使用
  9. 蓝牙协议HFP(Hands-Free Profile)电话免提协议 Connection management 连接管理HFP SLC 的建立跟释放
  10. 北科大计算机实践报告,计算机应用实践报告_北科大.doc