1、为什么需要双机热备
主要就是为了解决服务器的单点故障问题。
MASTER(宕机)
BACKUP(马上切换到备选服务器)
编号 | 主机IP地址 | 主机名称 | 角色 |
---|---|---|---|
1 | 10.1.1.11 | web01.liuluanyi.cn | Web01(MASTER) |
2 | 10.1.1.12 | mysql01.liuluanyi.cn | MySQL01 |
3 | 10.1.1.13 | web02.liuluanyi.cn | Web02(BACKUP) |
使用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
chmod -R mysql.mysql /usr/local/mysql
cd /usr/local/mysql
yum remove mariadb-libs -y
scripts/mysql_install_db --user=mysql
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
# source mysq.sh
# mysql_secure_installation
设置密码=>123
第一步:对Web01中的数据库的ds_wp博客系统进行备份
# mysqldump -uroot --databases ds_shop > ds_shop.sql -p
Enter password:123
第二步:使用文件传输命令rsync把ds_wp.sql推送到MySQL01
# rsync -av ds_shop.sql root@10.1.1.12:/root/
第三步:在MySQL01数据库中创建一个ds_wp数据库,然后倒入 ds_wp.sql
# mysql -uroot -p
Enter password:123
mysql> create database ds_shop default charset=utf8;
mysql> use ds_shop
mysql> source /root/ds_shop.sql
第四步:停止Web01中的数据库
# systemctl stop mysql
第五步:在MySQL01的MySQL数据中创建一个特定账号,用于远程连接
mysql> grant all privileges on ds_shop.* to
'dsshop'@'10.1.1.%' identified by '123';
mysql> flush privileges;
第六步:更改DSShop商城系统的数据库配置文件database.php
# vim /home/www/application/database.php
更改地址:
HA Cluster是指高可用性集群,是保证业务连续性的有效解决方案,一般 有两个或两个以上的节点,且分为活动节点及备用节点。
FailOver:故障自动切换,MASTER/BACKUP,MASTER宕机了,BACKUP 充当主机使用。
答:主要是为了解决Web服务的单点故障。
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功 能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务 (例如:Nginx、HAproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的(故障切换方 式)。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协 议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它 能够保证当个别节点宕机时,整个网络可以不间断地运行。
(FailOver+VIP漂移)
使用Keepalived进行VIP(虚拟的IP地址),所有服务器共享一个虚拟的 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协议的。
第一步:在Web01与Web02使用yum命令安装Keepalived软件
# yum install keepalived -y
第二步:了解keepalived配置文件与日志信息输出的位置
配置文件:
# vim /etc/keepalived/keepalived.conf
日志文件:
# cat /var/log/messages
Web01与Web02同时操作:
# vim /etc/keepalived/keepalived.conf
第一步:使用冒号:末行模式,切换光标到35行,然后按dG,删除35行以 后的所有内容
第二步:了解一下配置文件中每一行的含义19~34行
vrrp_instance 组建vrrp实例组的组名(Web01与Web02要保持一致) {
state 角色名称(MASTER/BACKUP)
interface 网卡名称(eth0=>ens33)
virtual_router_id vrrp组的编号(Web01与Web02要保持一致)
priority 权重(选举=>权重高=>当选几率大)
advert_int 1
authentication {
auth_type PASS => 授权类型(PASS密码)
auth_pass 1111 => 组密码(想组建集群,其密码必须一致)
}
virtual_ipaddress {
10.1.1.100 => VIP,虚拟的IP地址,需要与集群中的机
器保持在同一网段
}
}
设置完成后,保存并退出
第三步:启动Keepalived软件
# systemctl start keepalived
# systemctl status keepalived
分别在Web01/Web02中使用ip a命令,查看网卡上是否挂载VIP地址:
ip add
8、让VIP可以ping通 把域名解析到VIP,通过VIP访问到提供服务的服务器。
特别注意:1.3以后版本要注释vrrp_strict,否则虚拟IP无法ping通
设置完成后,重启keepalived软件
# systemctl restart keepalived
MASTER:网络无法连接,keepalived软件关闭 Web01 # systemctl stop network
问题:当我们在MASTER服务器中,手工停止Nginx,VIP会发生漂移么?
答:不会,因为keepalived软件主要检测keepalived服务状态以及网络情 况。只要这两者正常,这个VIP就不会发生漂移。
什么是抢占模式?
MASTER:权重100
BACKUP:权重90
当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)
非抢占模式
问题:如果让我们的HA Cluster集群成为非抢占模式呢?
答:一共分三步
第一步:更改keepalived.conf配置文件
vrrp_instance VI_1 {
virtual_router_id 51
------------------------ 华丽的分割线 ------------------
------------
nopreempt => 非抢占模式
------------------------ 华丽的分割线 ------------------
------------
priority 100
}
第二步:配置state角色都为BACKUP
vrrp_instance VI_1 {
------------------------ 华丽的分割线 ------------------
------------
state BACKUP => 所有服务器都设置为BACKUP,没有
MASTER/BACKUP之分
------------------------ 华丽的分割线 ------------------
------------
virtual_router_id 51
nopreempt
priority 100
}
第三步:重启keepalived软件
脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节 点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个 节点开始争抢共享资源,结果会导致系统混乱,数据损坏。(简言之:MASTER-BACKUP,两台机器上同时拥有VIP)
MASTER是如何发送组播数据包呢?
# tcpdump -i ens33 vrrp -n
MASTER服务器 => 224.0.0.18(组播地址)发送数据包 <= BACKUP服务 器(防火墙)
当有一天,BACKUP接受不到组播地址传输过来的数据包了,系统就会认 为MASTER已经宕机。开始选举生成新的MASTER。
VIP脑裂最大的产生原因:就是防火墙未关闭或没有把vrrp协议添加到防火 墙中。
一方面,keepalived在组播模式下所有的信息都会向224.0.0.18的组播地 址发送,产生众多的无用信息,并且会产生干扰和冲突。另一方面,在某 些特定环境(云服务器)禁止了组播方式,造成没办法获取到MASTER的 数据包信息。
所以需要将其组播的模式改为单播。这是一种安全的方法,避免局域网内 有大量的keepalived造成虚拟路由id的冲突(VIP脑裂)。单播模式需要关 闭vrrp_strict这个选项。单播需要在VIP实例配置段加入单播的源地址和目 标地址
组播 :MASTER => 224.0.0.18 <= BACKUP
单播 :MASTER => BACKUP1,BACKUP2,BACKUP3
第一步:如果使用keepalived1.3以上版本,必须注释或删除vrrp_strict选 项
# vrrp_strict
第二步:组播改单播
如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软件
# systemctl restart keepalived