首页 > 其他分享 >三、keepalived双机热备

三、keepalived双机热备

时间:2024-04-04 16:31:24浏览次数:25  
标签:热备 keepalived nginx vrrp MASTER mysql 服务器 双机

一、双机热备概述

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 [email protected]:/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) MASTER与BACKUP之间如何通信:

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

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

标签:热备,keepalived,nginx,vrrp,MASTER,mysql,服务器,双机
From: https://blog.csdn.net/weixin_61428407/article/details/137376746

相关文章

  • keepalived高可用负载均衡
    为什么需要keepalived(保持存活)keepalived实现高可用的工作原理1.准备一个集群,为了实现高可用,如nginx负载均衡的2个机器,确保用户的请求,能正确,高可用性的到达这个nginx集群2.部署keepalived,生成VIP,虚拟IP资源。3.keepalived是将一组服务器,组成一个虚拟设备组,实现他们......
  • web、keepalived、lvs、nginx 面试常问解析
    web、keepalived、lvs、nginx面试常问解析1.nginx代码状态代表啥意思--(工作可以快熟定位故障)200:服务器正常响应301:资源永久重定向302:资源临时重定向403:访问请求被禁止404:服务器找不到客户端请求的资源500:服务器内部错误502:代理服务器从后端收到了一条伪响应;badgateway......
  • 【IT老齐075】高可用架构避免单点经典方案Keepalived+VIP
    【IT老齐075】高可用架构避免单点经典方案Keepalived+VIP规避单点是高可用架构设置最基本的考量概念KeepalivedKeepalived是Linux轻量级别的高可用解决方案Keepalived主要是通过虚拟路由几余(VRRP)来实现高可用功能,Keepalived部署和使用非常的简单,所有配置只需要一个配置......
  • PostgreSQL从小白到高手教程 - 第48讲:PG高可用实现keepalived
       PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第48讲:PG高可用实现 内容1:keepalived简介内容2:Kee......
  • Lvs+keepalived+nginx搭建高可用负载均衡集群
    环境配置master主机192.168.199.149,虚拟IP192.168.199.148back备机192.168.199.150真实服务器1192.168.199.155真实服务器2192.168.199.156关闭防火墙和selinuxmaster配置(149)添加虚拟IPipaddradd192.168.199.148/24devens33下载keepalivedyuminstallkeepali......
  • keepalived 热备 +LVS
    keepalived用于实现高可用集群它的工作原理就是VRRP(虚拟冗余路由协议)在两台web服务器上安装keepalived修改配置文件[root@web1~]#vim/etc/keepalived/keepalived.conf12router_idweb1#设置本机在集群中的唯一识别符13vrrp_iptables#自动配置iptables放......
  • keepalived+nginx
    【转载于https://blog.csdn.net/chenshuai199533/article/details/124791176】keepalived是什么keepalived是集群管理中保证集群高可用(HA)的一个服务软件,其功能类似于heartbeat,用来防止单点故障。keepalived是以VRRP协议为实现基础的,当backup收不到vrrp包时就认为master宕......
  • 在K8S中,keepalived是如何检测工作节点是否存活的?
    在Keepalived中检测工作节点是否存活主要是通过两种方式实现:VRRP(VirtualRouterRedundancyProtocol)心跳检测:Keepalived的核心功能之一是实现了VRRP协议,多个节点之间形成一个虚拟路由器组,其中一个节点作为主节点(MASTER),其余节点为备份节点(BACKUP)。主节点会定期发送VRRP通告(hea......
  • 教你如何用Keepalived和HAproxy配置高可用 Kubernetes 集群
    本文分享自华为云社区《使用Keepalived和HAproxy创建高可用Kubernetes集群》,作者:江晚正愁余。高可用Kubernetes集群能够确保应用程序在运行时不会出现服务中断,这也是生产的需求之一。为此,有很多方法可供选择以实现高可用。本教程演示了如何配置Keepalived和HAproxy......
  • esp32笔记[14]-使用软串口双机通信
    摘要两个esp32之间使用软串口(SoftSerial)进行通信.平台信息ArduinoIDE:2.2.1node_a:esp32c3node_b:esp32s2原理简介软串口SoftSerial[https://www.arduino.cc/reference/en/libraries/espsoftwareserial/][https://blog.csdn.net/qq_43126437/article/details/106166......