当前位置: 首页 > news >正文

深入浅出 -- 系统架构之Keepalived搭建双机热备

Keepalived+重启脚本+双机热备搭建

①首先创建一个对应的目录并下载keepalived安装包(提取码:s6aq)到Linux中并解压:

[root@localhost]# mkdir /soft/keepalived && cd /soft/keepalived
[root@localhost]# wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz
[root@localhost]# tar -zxvf keepalived-2.2.4.tar.gz

②进入解压后的keepalived目录并构建安装环境,然后编译并安装:

[root@localhost]# cd keepalived-2.2.4
[root@localhost]# ./configure --prefix=/soft/keepalived/
[root@localhost]# make && make install

③进入安装目录的/soft/keepalived/etc/keepalived/并编辑配置文件:

[root@localhost]# cd /soft/keepalived/etc/keepalived/
[root@localhost]# vi keepalived.conf

④编辑主机的keepalived.conf核心配置文件,如下:

global_defs {# 自带的邮件提醒服务,建议用独立的监控或第三方SMTP,也可选择配置邮件发送。notification_email {root@localhost}notification_email_from root@localhostsmtp_server localhostsmtp_connect_timeout 30# 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)router_id 192.168.12.129 
}# 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart {# 之前编写的nginx重启脚本的所在位置script "/soft/scripts/keepalived/check_nginx_pid_restart.sh" # 每间隔3秒执行一次interval 3# 如果脚本中的条件成立,重启一次则权重-20weight -20
}# 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
vrrp_instance VI_1 {# 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)state MASTER# 绑定虚拟IP的网络接口,根据自己的机器的网卡配置interface ens33 # 虚拟路由的ID号,主从两个节点设置必须一样virtual_router_id 121# 填写本机IPmcast_src_ip 192.168.12.129# 节点权重优先级,主节点要比从节点优先级高priority 100# 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题nopreempt# 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)advert_int 1authentication {auth_type PASSauth_pass 1111}# 将track_script块加入instance配置块track_script {# 执行Nginx监控的脚本check_nginx_pid_restart}virtual_ipaddress {# 虚拟IP(VIP),也可扩展,可配置多个。192.168.12.111}
}

⑤克隆一台之前的虚拟机作为从(备)机,编辑从机的keepalived.conf文件,如下:

global_defs {# 自带的邮件提醒服务,建议用独立的监控或第三方SMTP,也可选择配置邮件发送。notification_email {root@localhost}notification_email_from root@localhostsmtp_server localhostsmtp_connect_timeout 30# 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)router_id 192.168.12.130 
}# 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart {# 之前编写的nginx重启脚本的所在位置script "/soft/scripts/keepalived/check_nginx_pid_restart.sh" # 每间隔3秒执行一次interval 3# 如果脚本中的条件成立,重启一次则权重-20weight -20
}# 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
vrrp_instance VI_1 {# 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)state BACKUP# 绑定虚拟IP的网络接口,根据自己的机器的网卡配置interface ens33 # 虚拟路由的ID号,主从两个节点设置必须一样virtual_router_id 121# 填写本机IPmcast_src_ip 192.168.12.130# 节点权重优先级,主节点要比从节点优先级高priority 90# 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题nopreempt# 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)advert_int 1authentication {auth_type PASSauth_pass 1111}# 将track_script块加入instance配置块track_script {# 执行Nginx监控的脚本check_nginx_pid_restart}virtual_ipaddress {# 虚拟IP(VIP),也可扩展,可配置多个。192.168.12.111}
}

⑥新建scripts目录并编写Nginx的重启脚本,check_nginx_pid_restart.sh

[root@localhost]# mkdir /soft/scripts /soft/scripts/keepalived
[root@localhost]# touch /soft/scripts/keepalived/check_nginx_pid_restart.sh
[root@localhost]# vi /soft/scripts/keepalived/check_nginx_pid_restart.sh#!/bin/sh
# 通过ps指令查询后台的nginx进程数,并将其保存在变量nginx_number中
nginx_number=`ps -C nginx --no-header | wc -l`
# 判断后台是否还有Nginx进程在运行
if [ $nginx_number -eq 0 ];then# 如果后台查询不到`Nginx`进程存在,则执行重启指令/soft/nginx/sbin/nginx -c /soft/nginx/conf/nginx.conf# 重启后等待1s后,再次查询后台进程数sleep 1# 如果重启后依旧无法查询到nginx进程if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then# 将keepalived主机下线,将虚拟IP漂移给从机,从机上线接管Nginx服务systemctl stop keepalived.servicefi
fi

⑦编写的脚本文件需要更改编码格式,并赋予执行权限,否则可能执行失败:

[root@localhost]# vi /soft/scripts/keepalived/check_nginx_pid_restart.sh:set fileformat=unix # 在vi命令里面执行,修改编码格式
:set ff # 查看修改后的编码格式[root@localhost]# chmod +x /soft/scripts/keepalived/check_nginx_pid_restart.sh

⑧由于安装keepalived时,是自定义的安装位置,因此需要拷贝一些文件到系统目录中:

[root@localhost]# mkdir /etc/keepalived/
[root@localhost]# cp /soft/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@localhost]# cp /soft/keepalived/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/init.d/
[root@localhost]# cp /soft/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

⑨将keepalived加入系统服务并设置开启自启动,然后测试启动是否正常:

[root@localhost]# chkconfig keepalived on
[root@localhost]# systemctl daemon-reload
[root@localhost]# systemctl enable keepalived.service
[root@localhost]# systemctl start keepalived.service其他命令:
systemctl disable keepalived.service # 禁止开机自动启动
systemctl restart keepalived.service # 重启keepalived
systemctl stop keepalived.service # 停止keepalived
tail -f /var/log/messages # 查看keepalived运行时日志

⑩最后测试一下VIP是否生效,通过查看本机是否成功挂载虚拟IP

[root@localhost]# ip addr

从上图中可以明显看见虚拟IP已经成功挂载,但另外一台机器192.168.12.130并不会挂载这个虚拟IP,只有当主机下线后,作为从机的192.168.12.130才会上线,接替VIP。最后测试一下外网是否可以正常与VIP通信,即在Windows中直接ping VIP

外部通过VIP通信时,也可以正常Ping通,代表虚拟IP配置成功。

 经过上述步骤后,keepalivedVIP机制已经搭建成功,在上个阶段中主要做了几件事:

  • 一、为部署Nginx的机器挂载了VIP
  • 二、通过keepalived搭建了主从双机热备。
  • 三、通过keepalived实现了Nginx宕机重启。
http://www.lryc.cn/news/333255.html

相关文章:

  • 如何做好产业园运营?树莓集团:响应政府号召,规划,注重大局观
  • NIO与BIO
  • YOLOv5实战记录05 Pyside6可视化界面
  • HTML5.Canvas简介
  • excel统计分析——多项式回归
  • SQLyog连接数据库8.0版本解析错误问题解决方案
  • 【数据库】SQL简介
  • AWS入门实践-利用S3构建一个静态网站
  • 使用Linux strace追踪系统调用: 一个详细指南
  • python 笔记
  • 软考 系统架构设计师系列知识点之数据库基本概念(4)
  • Vue - 3( 15000 字 Vue 入门级教程)
  • 上位机图像处理和嵌入式模块部署(qmacvisual图像清晰度)
  • 数据结构和算法:分治
  • 增强Java技能:使用OkHttp下载www.dianping.com信息
  • 用友 NC saveXmlToFIleServlet 任意文件上传漏洞复现
  • JS第九天
  • CSS设置字体样式
  • [Java线程池]ExecutorService|CompletionService的区别与选择
  • MySQL-SQL编写练习:基本的SELECT语句
  • C++经典面试题目(十九)
  • acwing算法提高之图论--SPFA找负环
  • I2C驱动实验:测试I2C驱动是否与设备匹配
  • 5560.树的直径
  • Decoupled Multimodal Distilling for Emotion Recognition 论文阅读
  • 【css】使用display:inline-block后,元素间存在4px的间隔
  • 代码执行漏洞
  • SQLServer2022安装
  • vue2 配置@指向src
  • 用友U9 存在PatchFile.asmx接口任意文件上传漏洞