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

2024-04-07 06:04

本文主要是介绍深入浅出 -- 系统架构之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宕机重启。

这篇关于深入浅出 -- 系统架构之Keepalived搭建双机热备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881816

相关文章

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用