三、keepalived双机热备

一、双机热备概述

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地址,支持多台机器
    }
    ......
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【TB作品】MSP430单片机读取大气压强传感器BMP180

文章目录 实物main所有代码 实物 main #include <msp430.h> #include "stdio.h" #include "OLED.h"#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h>// P2.2 oled scl // P2.3 oled sda// p…

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

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

第十四篇:web后端开发-Springboot

文章目录 一、Web入门1. 什么是Spring2. SpringBootWeb入门3. HTTP 协议3.1 HTTP-概述3.2 HTTP-请求协议3.3 HTTP-响应协议 4. Web服务器4.1 Tomcat---简介4.2 基本使用 5. 请求/响应5.1 请求5.1.1 postman5.1.2 简单参数5.1.3 实体参数5.1.4 数组集合参数5.1.5 日期参数5.1.6 …

echart 仪表盘实现指针的渐变色及添加图片

需求&#xff1a; 在仪表盘中设置指针为渐变色&#xff0c;并在仪表盘中间添加图片。 实现重点&#xff1a; 1、仪表盘指针渐变色的实现 渐变色通过设置pointer的itemStyle属性内的color实现&#xff0c;重点是echart版本&#xff0c;这个原本使用4.8.0的版本不起作用&#xff…

33---PS2-键盘鼠标电路设计

视频链接 PS2-键盘鼠标电路设计01_哔哩哔哩_bilibili PS2-键盘鼠标电路设计 1、PS/2简介 PS/2原是“personal 2”的意思&#xff0c;即“个人系统2”&#xff0c;是IBM公司在上个世纪80年代推出的一种个人电脑。 PS/2协议和接口最初由IBM公司开发并广泛使用的应用于键盘/鼠…

速通数据结构与算法第四站 双链表

系列文章目录 速通数据结构与算法系列 1 速通数据结构与算法第一站 复杂度 http://t.csdnimg.cn/sxEGF 2 速通数据结构与算法第二站 顺序表 http://t.csdnimg.cn/WVyDb 3 速通数据结构与算法第三站 单链表 http://t.csdnimg.cn/cDpcC 感谢佬们…

有人用GPT来做日内交易,居然赚钱了!但是……

在我们还在烦恼会不会被AI替代时&#xff0c;已经有人在教ChatGPT去炒股票了。 在近年ChatGPT火速出圈后&#xff0c;围绕AI能取代什么职业的讨论持续受到大众关注。 从事客服、编程、法律合规以及内容创作等行业人员最早感受到这股AI带来的寒意。 那ChatGPT能不能替代交易员…

Lora 串口透传开发 5

1 简介 串口转usb、转wifi等很多应用 2 设计原理 2.1 设计需求 1将LoRa终端定义成两种角色:Master和Slave 2一个模块发送任意字节长度&#xff08;小于128Byte&#xff09;数据&#xff0c;另一模块都可以接收到 3PC机上通过串口调试助手实现接收和发送 4终端在LCD屏幕上显…

【Redis】分布式锁及其他常见问题

分布式锁及其他常见问题 1. 我看你的项目都用到了 Redis&#xff0c;你在最近的项目的哪些场景下用到了 Redis 呢&#xff1f; 一定要结合业务场景来回答问题&#xff01;要是没有不要硬讲&#xff0c;除非面试官问&#xff1b; 接下来面试官将深入发问。 你没用到的也可能会…

软考109-上午题-【计算机网络】-网络设备

一、网络设备 1-1、物理层的互联设备 物理层的设备&#xff1a;中继器、集线器 1、中继器 中继器&#xff0c;可以使得两个链路在物理层上互联。 可以使得信号再生&#xff0c;信号增强。因此&#xff0c;中继器使得接受用户&#xff0c;收到衰减很小的原始信号 2、集线器&a…

最优控制理论笔记 - 01数学准备

目录 一、向量和矩阵的微分 1. 向量对标量的导数 2. 矩阵对标量的导数 2.1 矩阵对标量的导数的运算公式 2.2 标量函数对向量的导数&#xff1a; 2.3 向量函数对向量的导数 二、函数极值的问题 三、有约束条件的函数极值问题 四、n元函数的Taylor 一、向量和矩阵的微分 …

23linux 自定义shell文件系统

打印环境变量&#xff0c;把当前子进程所有环境变量打印出来 环境变量也是一张表&#xff08;指针数组以null结尾&#xff0c;最后条件不满足就退出了 &#xff09; 用子进程调用 结论1 当我们进行程序替换的时候 &#xff0c;子进程对应的环境变量&#xff08;子进程的环境变…

51入门之LED

目录 1.配置文件 2.点亮一个LED 2.1单个端口操作点亮单个LED 2.2整体操作点亮LED 3.LED闪烁 4.LED实现流水灯 4.1使用for循环和移位实现 4.1.1移位操作符 4.1.2使用移位操作和for循环实现 4.2使用移位函数实现LED流水灯 众所周知&#xff0c;任何一个硬件工程师…

pycharm和Spyder多行注释快捷键

1.选取注释内容 2.pycharm&#xff1a;使用Ctrl/ 3.Spyder&#xff1a;使用Ctrl1 效果图

1.k8s架构

k8s集群架构 一个Kubernetes集群至少包含一个控制平面(control plane)&#xff0c;以及一个或多个工作节点(worker node)。控制平面(Control Plane) : 控制平面负责管理工作节点和维护集群状态。所有任务分配都来自于控制平面。工作节点(Worker Node) : 工作节点负责执行由控制…

Centos-Linux安装部署MySQL-8.0

linux搭建mysql 1.使用系统的root账户 2.切换到 /usr/local 目录下 3.下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz也可以直接在官方下载最新版本 官方下载 选择linux 4.解压mysql tar xvJf mysql-8.0.21-l…

Redux Toolkit+TypeScript最佳实践

Redux-Toolkit是为了简化使用Redux繁琐的步骤&#xff0c;可以j降低使用useReducer与useContext管理状态的频率&#xff0c;而且起到项目中状态管理规范和约束化的效果。 阅读本文需要的前置知识&#xff1a;React、Redux、Typescript、Redux hooks。 Redux-Toolkit使用步骤 …

【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美(含源码仅此一份,先到先得)

【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美&#xff08;含源码仅此一份&#xff0c;先到先得&#xff09; 目录 【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美&#xff08;含源码仅此一份&#xff0c;先到先得&#xff09;1.面向对象的引用1.1简介1…

Day79:服务攻防-中间件安全IISApacheTomcatNginx弱口令不安全配置CVE

目录 中间件-IIS-短文件&文件解析&蓝屏&写权限 HTTP.SYS&#xff08;CVE-2015-1635&#xff09;主要用作蓝屏破坏&#xff0c;跟权限不挂钩 IIS短文件(iis全版本都可能有这个问题) IIS文件解析 IIS写权限 中间件-Nginx-文件解析&目录穿越漏洞&CRLF …

C++ //练习 11.14 扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名和生日。

C Primer&#xff08;第5版&#xff09; 练习 11.14 练习 11.14 扩展你在11.2.1节练习&#xff08;第378页&#xff09;中编写的孩子姓到名的map&#xff0c;添加一个pair的vector&#xff0c;保存孩子的名和生日。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#x…