三、keepalived双机热备

news2025/1/16 5:10:52

一、双机热备概述

1、为什么需要双机热备:

双机热备主要为了解决服务器的单点故障问题。 在主机 MASTER 宕机之后可以马上切换到备选服务器 BACKUP。

服务器规划:

2、克隆产生web01服务器:

(1) 基于LNMP克隆生成Web01服务器:

(2) 更改服务器IP和UID后三位:

vim /etc/sysconfig/network-scripts/ifcfg-ens33

IPADDR=10.1.1.11

(3) 更改主机名:

hostnamectl set-hostname web01.itcast.cn

(4) 修改物理机host文件的映射关系:

3克隆产生MySQL01服务器:

基于CentOS7母机克隆产生MySQL服务器:

(1) 更改IP地址、UID和主机名:

IPADDR=10.1.1.12

hostnamectl set-hostname mysql01.itcast.cn

(2) 更改Web01与MySQL01中/etc/hosts文件:

10.1.1.11 web01 web01.itcast.cn

10.1.1.12 mysql01 mysql02.itcast.cn

关闭防火墙、selinux和NetworkManager。

二、MySQL数据库分离

1、在MySQL01中安装MySQL:

使用Shell脚本安装MySQL:

vim mysql.sh

#!/bin/bash

echo "==================================="
echo "Install MySQL5.6.35 GLIBC"
echo "==================================="

tar -zxf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
useradd -r -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql

cd /usr/local/mysql
yum remove mariadb-libs -y

#mysql 用户的身份创建初始化数据库
scripts/mysql_install_db --user=mysql

#/etc/init.d/ 是 Linux 系统中存放服务启动脚本的目录
cp support-files/mysql.server /etc/init.d/mysql
service mysql start

#修改环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

mysql 初始化:mysql_secure_installation

2、把Web01中的数据库迁移MySQL01:

原先ds_shop的数据存在Web01中,现在需要将这些数据迁移到mysql01上,实现web服务器与mysql服务器的分离。

(1) 对Web01中的数据库的ds_shop商城系统进行备份:

mysqldump -uroot --databases ds_shop > ds_shop.sql -p

(2) 使用文件传输命令rsync把ds_shop.sql推送到MySQL01:

rsync -av ds_shop.sql root@10.1.1.12:/root/

mysql01上可以查看到已传输过来的数据:

(3) 在MySQL01数据库中创建一个ds_shop数据库,导入 ds_shop.sql:

(4) 停止web01中的数据库:

systemctl stop mysql

(5) 在MySQL01的MySQL数据中创建一个远程连接账号:

grant all privileges on ds_shop.* to 'dsshop'@'10.1.1.%' identified by '123';

flush privileges;

(6) 更改web01服务器中的数据库配置文件:

vim /home/www/application/database.php

刷新页面:

三、HA高可用服务搭建

1、HA Cluster高可用集群:

HA是High Available缩写。

HA Cluster是指高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。

FailOver:故障自动切换,MASTER/BACKUP,MASTER宕机了,BACKUP 可以充当主机使用。

引入HA高可用主要是为了解决Web服务的单点故障。

2、keepalived 概述与原理:

(1) keepalived 软件概述:

Keepalived最初是专门为LVS(Linux Virtual Server)负载均衡软件设计的,它的主要作用是管理并监控LVS集群系统中各个服务节点的状态,并在节点出现故障时自动进行故障转移。

(2) keepalived 原理:

Keepalived软件主要是通过VRRP协议实现高可用功能的(故障切换方式)。

VRRP是Virtual Router RedundancyProtocol (虚拟路由器冗余协议) 的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

master上面有一个对外提供服务的vip,该路由器所在局域网内其他机器的默认路由为该vip。master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup作为master,保证路由器的高可用性。

(3) keepalived 组成:

Keepalived的功能体系结构大致分为两层:用户空间 (user space) 和内核空间 (kernel space)。

内核空间:

主要包括IPVS (IP虚拟服务器,用于实现网络服务的负载均衡) 和NETLINK (提供高级路由及其他相关的网络功能) 两个部分。

用户空间:

● WatchDog:负责监控checkers和VRRP进程的状况。

● VRRP Stack:负载均衡器之间的失败切换FailOver,如果只用一个负载均衡器,则VRRP不是必须的。

● Checkers:负责真实服务器的健康检查healthchecking,是 keepalived 最主要的功能。healthchecking是一定要有的。

● Netlink Reflector:用来设定vrrp的vip地址等。

● IPVS wrapper:用户发送设定的规则到内核ipvs代码。

3、安装 keepalived 软件:

(1) Web01关机,克隆生成Web02:
更改IP地址、UUID、主机名称、绑定IP地址与主机名称到/etc/hosts文件、关闭防火墙与SELinux、关闭NetworkManager。

(2) 在Web01与Web02安装Keepalived软件:

yum install keepalived -y

配置文件:/etc/keepalived/keepalived.conf

日志文件:/var/log/messages

4、设置Keepalived配置文件:

web01和web02同时操作:

vim /etc/keepalived/keepalived.conf

(1) 删除不必要的配置行:

切换光标到35行,在命令行模式下按dG,删除35行以后的所有内容。

35行后的内容是用于LVS配置负载均衡器,在此项目配置中暂时不需要。

(2) 了解并修改 vrrp_instace 配置命令:

#组建vrrp实例 实例组名 (web01与web02要保持一致)
vrrp instance VI_1 {
    state MASTER #角色 (Master/Backup)
    interface eth0 #网卡名
    virtual router id 51 #组编号 (web01与web02要保持一致)
    priority 100 #权重 权重越高的备用服务器在主服务器宕机后可先被选举成为新的Matser
    advert int 1 #VRRP节点每隔1秒就会发送一次通告消息,告知其他节点自己的状态

    authentication {
        auth type PASS #实例组中的节点加入组的授权类型 (密码)
        auth pass 1111 #组密码 (组集群节点中的密码要保持一致)
    }

#组集群提供服务的虚拟IP地址 (VIP),需要和集群节点的真实IP地址保持在同一网段

    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

修改后的 vrrp_instace 配置,左为web01,右为web02。

(3) 启动 keepalived 软件:

systemctl start keepalived

systemctl status keepalived

使用 ip a 命令,查看网卡上是否挂载VIP地址:

(4) 解析www.shop.com到VIP虚拟IP地址:

在配置文件中注释掉 vrrp_strict,保存后重启keepalived软件:

5、模拟故障,VIP漂移:

master故障原因:网络无法连接 ;keepalived 软件关闭 ;主机宕机

6、Keepalived监测Nginx服务:

当MASTER服务器的Nginx服务停止时,VIP不会发生漂移。

因为keepalived软件主要检测keepalived服务状态以及网络情况,只要这两者正常,VIP就不会发生漂移。

无法访问商城:

解决方法:编写脚本让keepalived监控nginx状态。

(1) 在web01和web02编写脚本检测nginx运行状态:

mkdir /scripts

vim /scripts/nginx.sh

#!/bin/bash

nginx_status=`ps -C nginx --no-header | wc -l`
if [ $nginx_status -eq 0 ]; then
    systemctl stop keepalived
fi

ps -C nginx 可以返回 nginx 的进程 id;

--no-header | wc -l 意思是在统计 nginx 进程 id 数时不计入 header;

如果统计结果为0,说明当前不存在nginx进程,服务器会关闭keepalived软件,触发vip漂移。

(2) 给nginx.sh文件添加可执行权限:

chmod +x /scripts/nginx.sh

测试nginx.sh脚本是否可用:

先关闭nginx服务,再执行脚本,查看keepalived状态。执行脚本后keepalived关闭,说明脚本可用。

(3) 在Web01/Web02两台机器的keepalived.conf文件中定义nginx.sh脚本:

vim /etc/keepalived/keepalived.conf

#keepalived的健康检测脚本模块 模块名

vrrp_script check_nginx {
    script /scripts/nginx.sh  #脚本路径
    interval 3  #每隔3秒运行一次脚本
}

(4) 调用 check_nginx 模块:

#调用vrrp_script中定义的脚本

track_script {
    check_nginx
}

设置完成后,keepalived软件。

(5) 测试配置是否生效:

关闭web01的nginx服务:

商城能够正常访问:

7、抢占与非抢占模式:

(1) 抢占模式:

当MASTER发生故障时(宕机),VIP会自动从MASTER漂移到BACKUP服务器。但是当MASTER维修完毕后,启动keepalived的瞬间,其就会把VIP从BACKUP服务器中抢占过来,这种情况称之为“抢占模式”。

② keepalived中,如何决定谁是MASTER:

主要通过权重配置以及IP地址的大小来决定:

如果Web01与Web02其权重不同,当启动keepalived的时候, 默认会选择权重比较大的服务器充当MASTER。

如果Web01与Web02其权重相同,则IP地址大的优先成为MASTER:

Web02(10.1.1.13) > Web01(10.1.1.11)

③ 抢占模式的弊端:

抢占模式在VIP漂移时可能导致网络抖动,造成暂时的业务中断。

(2) 非抢占模式:

非抢占模式(Non-Preemption Mode)是keepalived配置中的一种模式。在非抢占模式下,当主节点故障后,备份节点接管服务,主节点恢复后,它不会再次抢占VIP,而是保持备份状态。

② 非抢占模式配置:

配置后重启keepalived。

vrrp_instance VI_1 {
    state BACKUP #所有服务器都设置为BACKUP,没有MASTER
    ……
    nopreempt #添加nopreempt(非抢占模式)
    priority 100 #web01与web02权重相同
    ……
}

③ 停止web01,重新启动后查看VIP所在位置:

VIP未漂移回web01。

8、VIP脑裂:

脑裂 (split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。(简言之:MASTER-BACKUP,两台机器上同时拥有VIP)

(1) MASTERBACKUP之间如何通信:

MASTER服务器通过组播地址 224.0.0.18,发送数据包,BACKUP服务器接收MASTER服务器的数据包。

安装tcpdump抓包软件:yum install tcpdump -y

抓取组播数据包:tcpdump -i ens33 vrrp -n (指定网卡和协议,-n显示IP地址)

可以看到在两台服务器上都是由MASTER发送组播信息:

(2) 模拟脑裂:

当BACKUP接收不到组播地址传输过来的数据包,系统就会认为MASTER已经宕机,开始选举生成新的MASTER。

VIP脑裂最大的产生原因:防火墙未关闭或没有把vrrp协议添加到防火墙中。

① 开启web02的防火墙:

systemctl start firewalld

使用ip a与tcpdump,查看VIP与抓取vrrp协议的数据包:

MASTER和BACKUP中都有VIP:

主从服务器都在发送组播数据包,数据传输混乱。

③ 解决方案:

当出现脑裂现象时,先关闭所有的BACKUP中的keepalived,只保留MASTER的服务。

检查所有BACKUP机器防火墙是否未关闭或者没有把vrrp协议添加到防火墙规则中,再重新启动BACKUP机器上的keepalived:

测试环境:systemctl stop firewalld

生产环境

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 -- protocol vrrp -j ACCEPT

firewall-cmd --reload

9、单播模式:

(1) 为什么要从组播改成单播:

keepalived在组播模式下所有的信息都会向224.0.0.18的组播地址发送,可能会产生干扰和冲突 ;某些特定环境(云服务器)禁止了组播方式,BACKUP没办法获取到MASTER的数据包信息。

组播:MASTER => 224.0.0.18 <= BACKUP

单播:MASTER => BACKUP1,BACKUP2,BACKUP3

(2) 单播配置:

① 配置文件中注释掉 vrrp_strict;

② 修改配置文件并重启keepalived软件:

web01:

vrrp_instance VI_1 {
    ......
    unicast_src_ip 10.1.1.11 #本机IP地址

    unicast_peer {
    10.1.1.13 #对端IP地址,支持多台机器
    }
    ......
}

web02:

vrrp_instance VI_1 {

    ......
    unicast_src_ip 10.1.1.13 #本机IP地址

    unicast_peer {
        10.1.1.11 #对端IP地址,支持多台机器
    }
    ......
}

③ 抓包查看数据包传输情况:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[计算机知识] TCP/IP网络模型、MySQL的结构

TCP/IP网络模型 应用层 给用户提供应用功能&#xff0c;如HTTP, DNS 应用层处于用户态&#xff0c;传输层及以下处于内核态 传输层 给应用层提供网络支持&#xff0c;如TCP, UDP TCP提供稳定、面向连接的网络传输协议 应用层的数据可能会太大&#xff0c;就需要进行拆分…

深入浅出 -- 系统架构之分布式架构

​​​​​​分布式架构&#xff1a; 根据业务功能对系统做拆分&#xff0c;每个业务功能模块作为独立项目开发&#xff0c;称为一个服务。 当垂直应用越来越多时&#xff0c;应用之间的交互不可避免&#xff0c;可将共用的基础服务或核心模块抽取出来作为独立服务&#xff0c…

与机器对话:ChatGPT 和 AI 语言模型的奇妙故事

原文&#xff1a;Talking to Machines: The Fascinating Story of ChatGPT and AI Language Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 从 ELIZA 到 ChatGPT&#xff1a;会话式人工智能的简史 会话式人工智能是人工智能&#xff08;AI&#xff09;的一个分…

【C++ STL迭代器】iterator

文章目录 【 1. 迭代器的属性 】【 2. 不同容器支持的迭代器 】【 3. 迭代器的定义方式 】【 4. 实例 】4.1 定义方式&#xff1a;正向迭代器和反向迭代器4.2 迭代器属性&#xff1a;前向迭代、双向迭代、随机迭代4.2 迭代器的遍历方法4.3 auto关键字 自动指定迭代器定义类型 背…

Pycharm安装及使用图文教程(附下载地址)

1. Pycharm简介 大家在使用Python的时候往往会选择一款自己熟悉的编译器。大多数Python使用者会选择PyCharm这款软件来进行Python的学习与开发。 关于PyCharm&#xff0c;PyCharm是一种Python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&a…

每日五道java面试题之ZooKeeper篇(一)

目录&#xff1a; 第一题. ZooKeeper 是什么&#xff1f;第二题. Zookeeper 文件系统第三题. Zookeeper 怎么保证主从节点的状态同步&#xff1f;第四题. 四种类型的数据节点 Znode第五题 . Zookeeper Watcher 机制 – 数据变更通知 第一题. ZooKeeper 是什么&#xff1f; Zoo…

Python爬虫:http和https介绍及请求

HTTP和HTTPS 学习目标&#xff1a; 记忆 http、https的概念和区别记忆 浏览器发送http请求的过程记忆 http请求头的形式记忆 http响应头的形式了解 http响应状态码 1 为什么要复习http和https 在发送请求&#xff0c;获取响应的过程中 就是发送http或https的请求&#xff0c…

grep无法使用完整的正则表达式

问题描述 grep无法使用完整的正则表达式&#xff0c;比如前置断言、后置断言、\d和\t、\n等 问题原因 使用了扩展正则&#xff0c;而不是perl正则。规则和perl正则不同 从文档上讲得很清楚&#xff1a; -E PATTERN is an extended regular expression 他是扩展表达式&#…

网络安全 | 什么是负载均衡器?

关注WX&#xff1a; CodingTechWork 介绍 负载均衡是在多个服务器之间有效分配网络流量的过程。负载均衡的目的是优化应用程序的可用性&#xff0c;并确保良好的终端用户体验。负载均衡可协助高流量网站和云计算应用程序应对数百万个用户请求&#xff0c;从而保证客户请求不会…

Driver not loaded之记录Qt访问MySql的解决经历

对于这个问题的本质原因&#xff0c;我也搞不明白&#xff0c;所以记录的方法不一定对所有人行之有效。我的目的很简单&#xff0c;就是把数据库用起来&#xff0c;经过查找网上资料&#xff0c;最终把数据库跑起来了。因此记录如下&#xff1a; 1&#xff0c;出现这个问题是缺…

【Linux】网络基础常识{OSI七层模型/ TCP/IP / 端口号 /各种协议}

文章目录 1.网络常识1.0DHCP协议1. 1IP地址/MAC地址/ARP协议是什么&#xff1f;IP/MACARP&#xff1a;IP ⇒ MAC 1.2手机连接wifi的原理 SSID与BSSID手机连接wifiSSID与BSSID 1.3手机如何通过“数据/流量”上网&#xff1f;1.4电脑连接wifi的原理&#xff1f;电脑通过热点上网…

Linux云计算之Linux基础3——Linux基本认识操作

1、终端 终端(terminal)&#xff1a;人和系统交互的必要设备&#xff0c;人机交互最后一个界面&#xff08;包含独立的输入输出设备&#xff09; 物理终端(console)&#xff1a;直接接入本机器的键盘设备和显示器虚拟终端(tty)&#xff1a;通过软件方式虚拟实现的终端。它可以…

各种滤波算法

各种滤波算法 1. 半径离群点去除(Radius Outlier Removal&#xff0c;半径滤波)2. 统计离群点剔除(Statistical Outlier Removal, 统计滤波)3. 体素网格将采样(voxel grid downsampling)4. 最远点采样(Farthest Point Sampling, FPS)5. 正态空间将采样(Normal Space Sampling, …

第六期丨酷雷曼无人机技能培训

第6期无人机技能提升培训 盼望着盼望着&#xff0c;第六期无人机技能提升培训会终于如期和大家见面了。 2024年1月1日&#xff0c;国务院、中央军事委员会颁布《无人驾驶航空器飞行管理暂行条例》&#xff0c;对民用无人机飞行活动实施更为严格的规范约束&#xff0c;越来越多…

AOP源码解析

一、注册AnnotationAwareAspectJAutoProxyCreator&#xff0c;引入postProcessAfterInitialization 1、Spring 入口&#xff1a; <aop:aspectj-autoproxy /> registerAspectJAnnotationAutoProxyCreatorIfNecessary,注册AnnotationAwareAspectJAutoProxyCreator Annot…

elsint报错Delete `␍`eslintprettier/prettier

一&#xff0c;原因 这篇博客写得很清楚&#xff1a;解决VSCode Delete ␍eslint(prettier/prettier)错误_vscode 删除cr-CSDN博客 还有这篇文章&#xff0c;解决办法很详细&#xff1a;滑动验证页面 二&#xff0c;解决办法 根目录下新建.prettierrc.js文件 module.exports…

wordpress外贸独立站模板

wordpress外贸独立站模板 WordPress Direct Trade 外贸网站模板&#xff0c;适合做跨境电商的外贸公司官方网站使用。 https://www.waimaoyes.com/wangzhan/22.html

入门用Hive构建数据仓库

在当今数据爆炸的时代&#xff0c;构建高效的数据仓库是企业实现数据驱动决策的关键。Apache Hive 是一个基于 Hadoop 的数据仓库工具&#xff0c;可以轻松地进行数据存储、查询和分析。本文将介绍什么是 Hive、为什么选择 Hive 构建数据仓库、如何搭建 Hive 环境以及如何在 Hi…

读《Spring实战》:面向切面

AOP术语 通知&#xff08;Advice&#xff09; 在AOP中&#xff0c;切面的工作被称为通知&#xff0c;也就是通知就是具体要干的工作。 spring中有5中通知&#xff1a; 前置通知&#xff1a; 在目标方法之前调用通知功能后置通知&#xff1a; 在目标方法之后调用通知功能返回…

无线电和雷达频谱大全

1&#xff0c;频率单位 2&#xff0c;全球警用雷达频率 3&#xff0c;军用雷达频段 4&#xff0c;国际电联ITU雷达频段 5&#xff0c;无线电频段 6&#xff0c;电子对抗ECM频段 7&#xff0c;声波频段