企业架构双点服务器HA

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

1、业务背景描述

时间:2009.6-2010.9

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

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

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

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

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

随着用户量增多,总的页面数量一直在持续增加,可以预料到的是,WEB服务器,压力会越来越大。虽然单台WEB服务器,完全可以完成工作任务。但是如果一旦宕机,用户就完全失去服务了,用户体验特别不好。单点故障

需要备用一台服务器进行使用,如果出现宕机,切换为备用服务器

service down 服务不可用

宕机 中文中,整机不可用

2、模拟运维设计方案

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

img

针对业务背景下的需求,升级为以下架构

img

shop.devops.com 192.168.17.100

​ 192.168.17.102

绑定一个IP 192.168.17.200

域名解析到192.168.17.200 web1 server1

监控如果web1服务不可用,切换192.168.17.200的绑定到web2,server02

二、数据库服务器迁移

1、克隆复制虚拟机

server01 WEB服务器 master 192.168.17.101

server02 数据库服务器 192.168.17.102

server03 WEB服务器 backup 192.168.19.103

2、服务器基本配置

根据之前的服务器基本环境的要求进行配置,例如:yum源、ntp等基础服务。

##3、数据备份和迁移

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

img

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

数据备份文件获取

img

img

##4、业务代码配置

server01 web业务服务器,停止MySQL服务和开机自启关闭

server02 数据库服务器,只启动使用MySQL服务,php和nginx服务关闭和开机自启关闭

mysql数据库迁移到其他服务器,WEB服务器里的mysql应该停止了,业务代码也需要切换到新的单点mysql数据库服务器了

需要让server01服务器业务代码,之后使用server02提供的数据库服务器支持

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

shell > grant all on tp5shop.* to 'tp5shop'@'192.168.17.%' identified by '密码';

img

②业务代码连接数据库配置到新的数据库服务器

img

img

③访问页面,查看业务恢复情况

三、高可用服务搭建

1、HA高可用

HA是High Available缩写,是双机集群系统简称,指高可用性集群,是==保证业务连续性的有效解决方案==,一般有两个或两个以上的节点,且分为活动节点及备用节点。

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

单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。

保证系统高可用,架构设计的核心准则是:冗余。有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可用服务时间。所以,又往往是通过“自动故障转移”来实现系统的高可用。failover

实现高可用的核心点:冗余(多台服务器) 自动切换

备份服务器:

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

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

实现热备,引入VIP的切换

img

正常来说,VIP绑定在主服务器(master),业务访问的master

master宕机了,VIP就会绑定在备份服务器(backup),业务被切换到备份服务器

让用户无感知,影响较小

VIP 决定了,用户被分发请求到哪个业务服务器

keepalived 保持活跃

linux redhat HA 工程 heartbeat 心脏敲打 pacemaker

centos 基于redhat

centos6.x heartbeat,keepalived

centos7.x keepalived

2、keepalived介绍

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

3、keepalived组成和原理

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

使用keepalived进行VIP的实现。

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

img

img

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

keepalived可以使用通过yum方式或者源码编译的方式实现。

在目前案列实现中,通过yum安装的版本即可。

使用yum方式安装

给server01和server03进行安装keepalived

master和backup都需要进行安装

shell > yum -y install keepalived

img

使用目录

img

img

keepalived的部署配置文件在/etc/keepalived/keepalived.conf

注意在选择VIP的时候,需要注意:

①用户可以访问VIP,VIP所在的机器没有限制外网访问

②VIP是没有被占用的

以下实现,VIP选择同网段的

img

Master机器配置(server01)

img

Backup机器配置(server03)

img

5、启动keepalived并查看

通过yum方式安装的keepalived,直接使用service命令进行管理

如果是通过源码包安装的可以使用keepalived -D 参数启动

img

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

master的网卡信息

img

img

通过keepalived的主备模式,实现默认VIP绑定到了master服务器

master服务器宕机了(关机,断电了,网线断了),VIP会切换到了backup

img

抢占模式:

默认state master和backup模式,优先master,如果一旦master恢复,就会把VIP重新切换master上,本来没有问题,但是对于用户的友好性不好。如果master恢复,不争抢作为备机更好。

可以通过把两台服务器的state状态,都调整为backup,就不存在恢复争抢的问题。

img

四、实现服务HA

1、解析域名到VIP

把域名解析到VIP,通过VIP访问到提供服务的服务器

img

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

真是业务环境下,可能是服务器整机没有宕机,nginx服务down,监控nginx服务,如果nginx服务down,就关闭keepalived。

①配置服务检测脚本

在多台服务器的keepalived的配置文件目录,建立一个检测nginx服务的脚本,作用在于当检测nginx服务宕机,关闭到keepalived

img

img

赋予执行权限

img

脚本需要实际测试一下,是否可以实现nginx宕机关闭keepalived

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

vrrp_script 名称[方便调用的] {

script 脚本的路径

interval 检测时间间隔

weight 降低的权重值

}

定义一个脚本模块

img

在vrrp_instance里进行调用

img

当nginx服务不可用之后,关闭keepalived,VIP进行飘移

Tip:priority 权重 在多备情况,会根据权重选择成为Master的BACKUP

五、keepalived的配置补充

1、非抢占模式

1> 在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip

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

非抢占模式,就是为了用户体验更加。服务恢复服务之后,不要抢占VIP

2、单播模式

单播模式的配置,是需要在keepalived1.2.10(含)以上版本

如果在某些特定环境(云服务器aliyun)禁止了组播方式,造成没办法获取到master的数据包信息,造成脑裂现象(多台机器同时绑定VIP)。可以通过单播的方式,定向广播的方式。

unicast_src_ip 192.168.1.21##(本地IP地址)

unicast_peer {

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

}

针对于server01 unicast_src_ip 就是192.168.19.100 unicast_peer 192.168.19.102

针对于server03 unicast_src_ip 就是192.168.19.102 unicast_peer 192.168.19.100

①需要使用高一点版本的keepalived(1.2.11)

shell > cd /root/soft
shell > tar xvf keepalived-1.2.11.tar.gz
shell > cd keepalived-1.2.11
shell > ./configure --prefix=/usr/local/keepalived
shell > make && make install

②查看目录,配置文件和启动文件

img

img

③配置单播的语法格式

img

注意如果使用的是1.3.7版本的话,注意注释模式

img

④启动测试效果

shell > /usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/etc/keepalived/keepalived.conf -D

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

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

②单播的方式

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