4_企业架构双点服务器HA

企业架构双点服务器HA

学习目标和内容

1、能够描述高可用HA的作用

2、能够理解VIP的切换

3、能够描述keepalived作用

4、能够理解主master和备backup服务器关系

5、能够实现主备服务器高可用配置

6、能够实现模拟业务宕机服务切换

一、背景描述及其方案设计

1、业务背景描述

时间:2009.6-2010.9

发布产品类型:互联网动态站点 商城

⽤户数量: 2000-4000(⽤户量猛增 翻了4倍)

PV : 8000-50000(24⼩时访问次数总和)

QPS: 50-100*(每秒访问次数)

DAU: 200-400(每⽇活跃⽤户数)

随着用户量增多,单台WEB服务器,压力越来越大。虽然单台WEB服务器,目前可以完成工作任务。但是如果一旦宕机,用户就完全失去服务了,用户体验特别不好。需要备用一台服务器进行使用,主服务器宕机之后,快速切换为备用服务器

2、模拟运维设计方案

在之前架构中,先将数据库服务器单独迁移

针对web服务器单点故障,升级为主备服务器架构

二、数据库服务器迁移

1、克隆复制虚拟机

server01 WEB服务器 master 192.168.17.102

server02 数据库服务器 192.168.17.100

server03 WEB服务器 backup 192.168.17.101

2、服务器基本配置

根据之前的服务器基本环境的要求进行配置

因为是克隆获取虚拟机,所以只需要进行IP和MAC地址的修改即可。

#1、删除原有网卡mac地址记录信息
shell > cd /etc/udev/rules.d
shell > rm -rf 70-persistent-net.rules
#2、删除eth0里的mac地址项 HWADDR参数
#3、修改主机名称
shell > sed -i "s/server01/server02/" /etc/sysconfig/network;
#4、启动之后,把hosts文件对应也做解析

##3、数据备份和迁移

①源数据库服务器导出数据

#源数据库是server01 在server01上操作
shell > mysqldump -uroot -p --database tp5shop > /root/tp5shop.sql

②导入数据到新数据库服务器

#因为数据库服务器克隆来的,所有本身具有数据 可以删除了库,模拟新机器,重新导入
mysql > drop database tp5shop;
#创建数据库并导入数据
mysql > create database tp5shop;
mysql > use tp5shop;
mysql > source /root/tp5shop.sql;

③在server02 MySQL服务器中建立远程连接用户并授予权限

mysql > grant all on tp5shop.* to 'tp5shop'@'192.168.17.%' identified by '$Abc3721';

④修改项目数据库配置文件

shell > vim /usr/local/nginx/html/tp5shop/application/database.php

修改参考示例:

return [
    // 数据库类型
    'type'            => 'mysql',
    // 服务器地址
    'hostname'        => '192.168.17.100',
    // 数据库名
    'database'        => 'tp5shop',
    // 用户名
    'username'        => 'tp5shop',
    // 密码
    'password'        => '$Abc3721',
    // 端口
    'hostport'        => '3306',

⑤访问页面,查看业务使用情况

三、高可用服务搭建

1、HA高可用

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指通过设计,减少系统服务不可用的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。==很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为0.876个小时==。

描述通俗叫法可用性级别年度停机时间
基本可用性2个999%87.6小时
较高可用性3个999.9%8.8小时
具有故障自动恢复能力的可用性4个999.99%53分钟
极高可用性5个999.999%5分钟

实现高可用的核心点:

①冗余(多台服务器)

②自动切换

备份服务器:

冷备 服务器不启用(域名不解析),使用的时候再开启,需要手动切换

热备 服务器在等待状态(监控主服务器状态),一旦主宕机,备就接管,自动切换

实现热备,引入VIP的切换

通过VIP的方式,切换主备服务器

①默认VIP绑定在主服务器(master)

②master不可用,就切换VIP到备份服务器(backup)

③用户可以使用到连续性更好的服务,通过VIP访问服务器

常用来单独实现高可用的软件:

==①keepalived==

②heartbeat 较早 属于redhat HA工程的一部分

2、keepalived介绍

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件

3、keepalived组成和原理

Keepalived软件主要是通过VRRP协议实现高可用功能的。

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

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

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

内核空间:

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

用户空间:

WatchDog:负载监控checkers和VRRP进程的状况

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

Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查healthchecking是一定要有的。

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

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

keepalived主要使用三个模块,分别是core、check和vrrp。

core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。

check负责健康检查,包括常见的各种检查方式。

vrrp模块是来实现VRRP协议的。

4、安装配置启动keepalived

master和backup都需要进行安装,也就是server01和server03机器

#安装keepalived
shell > yum -y install keepalived
主机名称服务器IP
server01192.168.17.102master
server03192.168.17.101backup

keepalived需要使用的目录和文件:

文件或者目录作用
/etc/keepalived/keepalived.conf生效的配置文件
/etc/init.d/keepalived服务器管理脚本
/var/log/messages日志信息

配置keepalived

①备份主备服务器的配置文件

shell > cd  /etc/keepalived
shell > cp keepalived.conf keepalived.conf_bak

②分别修改主备服务器配置文件

shell > vim keepalived.conf

示例配置文件说明

! Configuration File for keepalived
#发送邮件的配置
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
#vrrp协议的配置
vrrp_instance VI_1 {
    #工作模式
    state MASTER
    #监听的网卡
    interface eth0
    #虚拟路由id 需要和备服务器一致
    virtual_router_id 51
    #权重 优先级
    priority 100
    #vrrp包的发送周期  1s
    advert_int 1
    #权限验证
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #需要绑定切换的VIP
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

主服务器

! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #master默认只需要修改使用VIP即可
    virtual_ipaddress {
        192.168.17.200
    }
}

备服务器

! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    #修改工作模式为备
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #注意修改VIP
    virtual_ipaddress {
        192.168.17.200
    }
}

③分别按照顺序启动主服务器和备服务器的keepalived

shell > service keepalived start

④查看主备服务器的网卡信息

#需要通过ip a命令查看  分别在server01和server03查看
shell > ip a

##5、模拟服务器不可用VIP切换

服务器整机不可用,常见于服务器断网,或者断电关机等。

方法一:模拟主服务器断电关闭

#关闭主服务器  VIP所在服务器
shell > poweroff

方法二:模拟主服务器断网

#关闭VIP所在服务器的网卡  使其不能够联网
shell > service network stop

通过以上实验检测,发现当主服务器整机不可用时,VIP会切换到备用服务器

四、实现服务HA

通过keepalived可以直接实现主服务器整机不可用,实现VIP的切换。保证用户可以通过VIP进行访问服务。

但是实际情况下,往往并不是服务器整机不可用,只是对应的服务或者软件不可用。

比如说:nginx提供的web服务,nginx进程关闭

就需要检测当nginx不可用时,就切换VIP

实现过程分析:

VIP实际是由keepalived进行绑定的,所以当nginx服务不可用时,就关闭当前机器的keepalived即可,释放VIP。进而绑定到其他备用服务器。

①编写服务检测脚本,实现检测nginx是否可用,不可用则关闭当前所在主机的keepalived

②在keepalived配置中调用检测服务脚本

1、Nginx服务可用检测脚本

主备服务器都要实现此脚本

①编写测试脚本 赋予执行权限

shell > cd /etc/keepalived
shell > vim check_nginx.sh

脚本内容:

#!/bin/bash
nginx_status=`ps -C nginx --no-header | wc -l`
if [ $nginx_status -eq 0 ];then
   service keepalived stop
fi

赋予脚本执行权限 方便之后其他软件调用执行

shell > chmod +x check_nginx.sh

②测试脚本可用性

启动nginx和keepalived

关闭nginx 执行脚本 查看keepalived是否也关闭

2、模拟宕机实现服务切换

在多台服务器中配置keepalived定时触发检测nginx的脚本模块

#在vrrp_instance外上面定义
vrrp_script check_nginx {
   #调用脚本地址
   script  /etc/keepalived/check_nginx.sh
   #检测间隔时间
   interval 3
}
#在vrrp_instance里调用
track_script {
    #上线定义的名称
    check_nginx
}

##3、实现web服务器高可用

以上案例已经实现了,服务不可用VIP切换到可用服务器。

现在需求用户的服务是连续不间断的,故用户需要通过VIP进行访问

①解析域名到VIP

②模拟用户访问

五、keepalived的配置补充

脑裂(裂脑):vip出现在了多台机器上。网络不通畅,禁用了数据包,主备服务器没法通讯,造成备服务器认为主服务器不可用,绑定VIP,主服务器VIP不会释放。

解决方案:

①双备或者多备模式 BACKUP 通过priority权重来区分谁的优先级更高

②单播(定向广播)的方式 (一些特定环境禁用了组播方式)

③时间不同步 服务器时间校时

1、非抢占模式

①nopreempt

在主备服务器的配置文件,vrrp_instance段中

②设置state工作模式为BACKUP 两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,会根据优先级来选举一个MASTER出来。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。

2、单播模式

一些特定环境下不允许发送组播,造成备服务器无法收到vrrp包,可能会造成脑裂现象。可以通过单播的方式解决。

单播示例配置:注意此语法在keepalived1.2.11版本以上支持

unicast_src_ip 192.168.1.21##(本地IP地址)

unicast_peer {

192.168.1.22##(对端IP地址)此地址一定不能忘记

}

主服务器server01配置

#在vrrp_instace段中加入
#本地IP
unicast_src_ip 192.168.17.102
unicast_peer {
    #对象IP  发送vrrp包给备服务器
    192.168.17.101
}

备服务器server03配置

#在vrrp_instace段中加入
#本地IP
unicast_src_ip 192.168.17.101
unicast_peer {
    #对象IP  发送vrrp包给备服务器
    192.168.17.102
}

tcpdump抓vrrp包的方式:

shell > tcpdump vrrp -n

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

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

相关文章

activemq启动成功但web管理页面却无法访问

前提: 在linux启动activemq成功!本地能ping通linux 处理方案: 确定防火墙是否关闭, 有两种处理方案:第一种-关闭防火墙;第二种-暴漏8161和61616两个端口 netstat -lnpt查看8161和61616端口 注意&#xf…

【算法每日一练]-图论(保姆级教程篇12 tarjan篇)#POJ3352道路建设 #POJ2553图的底部 #POJ1236校园网络 #缩点

目录 POJ3352:道路建设 思路: POJ2553:图的底部 思路: POJ1236校园网络 思路: 缩点: 思路: POJ3352:道路建设 由于道路要维修,维修时候来回都不能走,现要…

Python实战:批量加密Excel文件指南

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 Python实战:批量加密Excel文件指南,全文3800字,阅读大约10分钟。 在日常工作中,保护敏感数据是至关重要的。本文将引导你通过…

跟着Nature Communications学习Hisat-Trinity-PASA等分析流程

一边学习,一边总结,一边分享! 详细教程请访问: 组学分析流程 本期分析流程 Hisat2-SamtoolsTrinity_GG_denovoPASA … 本期教程文章 题目:Genomic insights into local adaptation and future climate-induced vu…

untiy webgl常见问题与操作

文章目录 1 untiy和网页相互通信2 打开新页面(同标签页和新标签页)3 获取网页的URL4 解析Url内的参数5 后处理与色彩空间问题 1 untiy和网页相互通信 看这个文章 2 打开新页面(同标签页和新标签页) 先看本文untiy和网页相互通信…

代码随想录算法训练营 ---第五十三天

第一题: 简介: 本题和昨天的最大重复子串问题很相似,只不过本题不一定是连续的。 动规五部曲分析如下: 确定dp数组(dp table)以及下标的含义 dp[i][j]:长度为i-1 的字符串text1与长度为j-1的…

Git 分支详解

目录 1. Git 分支管理 2. 如何自己创建分支? 3. 创建分支修改内容,之后合并到主分支 4. 删除分支 5. 出现 merge 冲突如何解决 6. 分支策略 前言 之前只是知道有 master 分支这个东西,但是具体是啥意思还是不知道,今天详…

【面试HOT200】二叉树——广度优先搜索篇

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于【CodeTopHot200】进行的,每个知识点的修正和深入主要参…

MFC 绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线.

MFC 绘制三种不同圆形以及绘制正弦函数曲线 本文使用visual Studio MFC 平台实现绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线. 关于基础工程的创建请参考 01-Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 02-vis…

设计模式-结构型模式之适配器设计模式

文章目录 一、结构型设计模式二、适配器模式 一、结构型设计模式 这篇文章我们来讲解下结构型设计模式,结构型设计模式,主要处理类或对象的组合关系,为如何设计类以形成更大的结构提供指南。 结构型设计模式包括:适配器模式&…

【前沿技术】扩散模型是什么

0. 前言 扩散模型的灵感来自非平衡热力学。他们定义了一个马尔可夫扩散步骤链,以缓慢地将随机噪声添加到数据中,然后学习逆转扩散过程以从噪声中构建所需的数据样本。与VAE或流动模型不同,扩散模型是通过固定程序学习的,并且潜在变…

Linux下activemq的安装与安装成功确认

一、下载 apache-activemq-5.14.0-bin.tar.gz 二、安装 将压缩包拷入linux内,进行解压tar -zxvf apache-activemq-5.14.0-bin.tar.gz,与redis、nginx不同的是,active解压不需要安装就可以直接启动! 启动命令:./bin…

PMP考试解析

PMP考试解析 考试动机 1、裁员太猛了,多一条生存技能 2、学习管理技能往管理方向靠 3、转行, 考试路径 1、报班费: 考PMP必须报班,不然没有考试资格(无语的规定) (类似于考驾照,…

PhotoZoom 2024中文版全新版本震撼来袭!PhotoZoom 8怎么使用

PhotoZoom 2023(PhotoZoom 8)全新版本震撼来袭。 一款划时代的、技术上产生革命性影响的数码图片放大工具。 我们获取图片的方法,一般是从度娘图片和各个图库里找素材。但一般网上搜索到的很多图片像素都非常小,普通方法放大就像打…

DeDeCMS v5.7 SP2 正式版 前台任意用户密码修改(漏洞复现)

1.环境搭建 PHP 5.6 DeDeCMSV5.7SP2 正式版 安装phpstudy,https://www.xp.cn/小皮面板 先启动Apache2.4.39和MySQL5.7.26 如果他会让你下载,点击是就好! 让后点击网站—>点击创建网站 域名自己创建,自己取 其他的不变 点击…

详解Spring对Mybatis等持久化框架的整合

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

RPG项目01_脚本代码

基于“RPG项目01_场景及人物动画管理器”,我们创建一个XML文档 在资源文件夹下创建一个文件夹, 命名为Xml 将Xnl文档拖拽至文件夹中, 再在文件夹的Manager下新建脚本LoadManager 写代码: using System.Collections; using System…

【目标检测实验系列】YOLOv5创新点改进实验:通过转置卷积,动态学习参数,减少上采用过程特征丢失,提高模型对目标的检测精度!(超详细改进代码流程)

1. 文章主要内容 本篇博客主要涉及两个主体内容。第一个:简单介绍转置卷积的原理。第二个:基于YOLOv5 6.x版本,将Neck部分的upSample改为nn.ConvTranspose2d转置卷积(通读本篇博客需要10分钟左右的时间)。 小提…

QNX常用调试方法

QNX常用调试方法 1. top 查询系统状态最常用的工具是top,它可以显示系统资源的使用情况。我们最关心的通常是系统可用内存和CPU使用率。如果CPU使用率过高可能是因为某些应用存在bug,重点关注下面显示的占用CPU资源最多的几个线程。如果可用内存太少&am…

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台!

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台! 什么是低代码平台?2023年顶尖二十大低代码平台,哪个值得一试?低代码平台应该如何选择?本篇,我们将为大家盘点顶尖的十大低代码平…