利用两台虚拟机搭建Nginx高可用集群、宕机测试、宕机恢复
这里写目录标题
- 一、准备阶段:
- 二、安装阶段:
- 1.安装pcre及其依赖
- 2.安装ngnix
- 3.安装keepalived
- 三、配置阶段:
- 四、启动阶段:
- 1.集群测试
- 2. 宕机测试
一、准备阶段:
准备:两台虚拟机 CentOS Linux release 7.5.1804
(Core)、pcre-8.45.tar.bz2
、nginx-1.21.3.tar.gz
ip地址分别为:192.168.10.102
和192.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 官网,下载
下载ngnix
和pcre
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
在当前目录下,先安装相关依赖
安装 openss
、zlib
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-config
、pcregrep
、pcretest
三个文件
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
,所以,想配置集群而且刚好看到本文的,推荐连同ngnix
和pcre
的版本保持一致
特别鸣谢: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高可用集群、宕机测试、宕机恢复相关推荐
- 搭建Nginx高可用集群(keepalived+双机热备)
一.Nginx高可用 首先了解一下什么是高可用,高可用是分布式系统架构中必须考虑的因素. 我们都知道,使用nginx的反向代理和负载均衡可以解决tomcat等web容器的单点故障以及高并发等问题. 反 ...
- Nginx配置——搭建 Nginx 高可用集群(双机热备)
Nginx配置--搭建 Nginx 高可用集群(双机热备) https://blog.csdn.net/zxd1435513775/article/details/102508573?utm_medi ...
- 汇总-13台虚拟机搭建一个高可用负载均衡集群架构
要求 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,具体需求如下. 设计你认为合理的架构,用visio把架构图画出来 搭建lnmp.tomcat+jdk环境 三个站点分别为:dis ...
- docker搭建redis高可用集群
目标:docker搭建redis高可用集群 1.架构:六个redis容器,三主三从,主从复制,主机宕机从机自动替代 2.网络架构设计:设计一个专属redis的docker网络 docker netwo ...
- Windows环境下安装HBase(Hadoop3.1.3、HBase2.2.5)与Linux环境下搭建HBase高可用集群
Windows环境下安装HBase 下载HBase 官网: https://hbase.apache.org/downloads.html 不同版本集合:https://archive.apache. ...
- 容器编排——Kubeadm在线或离线搭建kubernetes高可用集群
目录 1.架构简介: 2.集群架构图: 3.集群服务器: 4.修改主机名称: 5.修改hosts配置文件: 6.关闭selinux: 7.关闭防火墙: 8.关闭swap: 9.设置iptables网桥 ...
- 零基础带你一步步搭建Nacos高可用集群(史上最详细,赛过教科书!)为此我准备了三台云服务器+云数据库
容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给!{容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给!}容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给! 如果你不懂jd ...
- 搭建Eureka高可用集群
做的快哭了已经 文章目录 Eureka可用高集群的搭建 一.Eureka的工作原理 二.Eureka中服务提供者与服务消费者的关系 三.搭建Eureka-Server和Eureka-Client 四. ...
- 二进制方式搭建Kubernetes高可用集群(超丰富的组件概念理论总结)
二进制方式部署Kubernetes高可用集群 文章目录 二进制方式部署Kubernetes高可用集群 1.环境准备 1.1.Kubernetes高可用集群部署方式 1.2.Kubernetes集群弃用 ...
最新文章
- oracle 用户 表空间绑定,ORACLE表空间绑定用户操作流程
- 浅谈数组常见遍历方法
- java swing 导出文件_java swing (一) 导出excel文件并打开
- 10进制转换成其他进制-短除法
- LVS入门篇(五)之LVS+Keepalived实战
- Python产生随机数(转)
- java多线程的同步控制_Java多线程并发控制工具信号量Semaphore,实现原理及案例...
- Python3.6全栈开发实例[022]
- 锻造完美U盘小偷:活用消息机制
- java并发编程(12)-- 线程池 实际⽣产使⽤哪⼀个线程池 怎么设置
- python函数缺省参数实例_Python中函数及默认参数的定义与调用操作实例分析
- ios 热更新可行性分析
- Minidump方式保留程序崩溃现场
- linux运行raxml,在线和本地两种方法构建 RAxML 进化树方法和解读
- cad2019菜单栏怎么调出来_AutoCAD2019工具栏怎么调出来 工具栏没了找不到解决方法...
- 利用计算机指令清理垃圾,Win7电脑清理垃圾的运行命令代码是什么?
- 陶哲轩1(数学牛孩的成长研究
- Redis基础命令(Hash类型)对field进行的操作
- 基于FPGA的数字识别实现
- Shell脚本学习-阶段二十七-命令解释二
热门文章
- 醉逍遥显示无法更新服务器,醉逍遥
- 树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门
- Mybatis事务(一)事务管理方式
- 斗破苍穹-雅菲。位列高贵,华丽绝伦,红颜娇美,风姿绰约
- BookshelfB
- kicad 自动生成封装库_【工具】KiCad版本嘉立创SMT贴片库及问题说明
- java根据生日精确计算年龄_java根据出生日期计算年龄(精确到天)
- 1.7 pyenv和venv的使用
- 蓝牙协议HFP(Hands-Free Profile)电话免提协议 Connection management 连接管理HFP SLC 的建立跟释放
- 北科大计算机实践报告,计算机应用实践报告_北科大.doc