4_企业架构双点服务器HA
企业架构双点服务器HA
一、背景描述及其方案设计
1、业务背景描述
时间:2009.6-2010.9
发布产品类型:互联网动态站点 商城
⽤户数量: 2000-4000(⽤户量猛增 翻了4倍)
PV : 8000-50000(24⼩时访问次数总和)
QPS: 50-100*(每秒访问次数)
DAU: 200-400(每⽇活跃⽤户数)
随着用户量增多,总的页面数量一直在持续增加,可以预料到的是,WEB服务器,压力会越来越大。虽然单台WEB服务器,完全可以完成工作任务。但是如果一旦宕机,用户就完全失去服务了,用户体验特别不好。单点故障
需要备用一台服务器进行使用,如果出现宕机,切换为备用服务器
service down 服务不可用
宕机 中文中,整机不可用
2、模拟运维设计方案
在之前架构中,将数据库服务器单独迁移
针对业务背景下的需求,升级为以下架构
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、数据备份和迁移
①源数据库服务器导出数据
②导入数据到新数据库服务器
数据备份文件获取
##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 '密码';
②业务代码连接数据库配置到新的数据库服务器
③访问页面,查看业务恢复情况
三、高可用服务搭建
1、HA高可用
HA是High Available缩写,是双机集群系统简称,指高可用性集群,是==保证业务连续性的有效解决方案==,一般有两个或两个以上的节点,且分为活动节点及备用节点。
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。==很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时==。
单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。
保证系统高可用,架构设计的核心准则是:冗余。有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可用服务时间。所以,又往往是通过“自动故障转移”来实现系统的高可用。failover
实现高可用的核心点:冗余(多台服务器) 自动切换
备份服务器:
冷备 服务器不启用(域名不解析),使用的时候再开启,需要手动切换
热备 服务器在等待状态(监控主服务器状态),一旦主宕机,备就接管,自动切换
实现热备,引入VIP的切换
正常来说,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。这样的话就可以保证路由器的高可用了。
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
使用目录
keepalived的部署配置文件在/etc/keepalived/keepalived.conf
注意在选择VIP的时候,需要注意:
①用户可以访问VIP,VIP所在的机器没有限制外网访问
②VIP是没有被占用的
以下实现,VIP选择同网段的
Master机器配置(server01)
Backup机器配置(server03)
5、启动keepalived并查看
通过yum方式安装的keepalived,直接使用service命令进行管理
如果是通过源码包安装的可以使用keepalived -D 参数启动
查看主备服务器的网卡信息
master的网卡信息
通过keepalived的主备模式,实现默认VIP绑定到了master服务器
master服务器宕机了(关机,断电了,网线断了),VIP会切换到了backup
抢占模式:
默认state master和backup模式,优先master,如果一旦master恢复,就会把VIP重新切换master上,本来没有问题,但是对于用户的友好性不好。如果master恢复,不争抢作为备机更好。
可以通过把两台服务器的state状态,都调整为backup,就不存在恢复争抢的问题。
四、实现服务HA
1、解析域名到VIP
把域名解析到VIP,通过VIP访问到提供服务的服务器
2、模拟宕机实现服务切换
真是业务环境下,可能是服务器整机没有宕机,nginx服务down,监控nginx服务,如果nginx服务down,就关闭keepalived。
①配置服务检测脚本
在多台服务器的keepalived的配置文件目录,建立一个检测nginx服务的脚本,作用在于当检测nginx服务宕机,关闭到keepalived
赋予执行权限
脚本需要实际测试一下,是否可以实现nginx宕机关闭keepalived
③在多台服务器中配置keepalived定时触发检测nginx的脚本模块
vrrp_script 名称[方便调用的] {
script 脚本的路径
interval 检测时间间隔
weight 降低的权重值
}
定义一个脚本模块
在vrrp_instance里进行调用
当nginx服务不可用之后,关闭keepalived,VIP进行飘移
Tip:priority 权重 在多备情况,会根据权重选择成为Master的BACKUP
五、keepalived的配置补充
1、非抢占模式
1> 在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip
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
②查看目录,配置文件和启动文件
③配置单播的语法格式
注意如果使用的是1.3.7版本的话,注意注释模式
④启动测试效果
shell > /usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/etc/keepalived/keepalived.conf -D
脑裂:vip出现在了多台机器上。网络不通畅,禁用了数据包,主备服务器没法通讯,造成备服务器认为主服务器不可用,绑定VIP,主服务器VIP不会释放。
①双备或者多备模式 BACKUP 通过priority权重来区分谁的优先级更高
②单播的方式
③时间不同步 服务器时间校时