Keepalived双机热备

  • A+
所属分类:Linux

1、为什么需要双机热备

主要就是为了解决服务器的单点故障问题。

MASTER(宕机)

BACKUP(马上切换到备选服务器)

2、服务器的环境准备

编号主机IP地址主机名称角色
110.1.1.11web01.liuluanyi.cnWeb01(MASTER)
210.1.1.12mysql01.liuluanyi.cnMySQL01
310.1.1.13web02.liuluanyi.cnWeb02(BACKUP)

MySQL数据库分离

在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
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

2、MySQL安全初始化

# mysql_secure_installation
设置密码=>123

3、把Web01中的数据库迁移MySQL01

第一步:对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
Keepalived双机热备

更改地址:

Keepalived双机热备

HA高可用服务搭建

1、HA Cluster高可用集群

HA Cluster是指高可用性集群,是保证业务连续性的有效解决方案,一般
有两个或两个以上的节点,且分为活动节点及备用节点。

FailOver:故障自动切换,MASTER/BACKUP,MASTER宕机了,BACKUP
充当主机使用。

2、为什么要引入HA高可用

答:主要是为了解决Web服务的单点故障。

3、Keepalived软件概述

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

4、Keepalived组成和原理

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双机热备

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协议的。

5、安装Keepalived软件

第一步:在Web01与Web02使用yum命令安装Keepalived软件

# yum install keepalived -y

第二步:了解keepalived配置文件与日志信息输出的位置

配置文件:

# vim /etc/keepalived/keepalived.conf

日志文件:

# cat /var/log/messages

6、设置Keepalived配置文件

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双机热备

设置完成后,重启keepalived软件

# systemctl restart keepalived

9、模拟服务器故障,VIP漂移

MASTER:网络无法连接,keepalived软件关闭
Web01 # systemctl stop network

10、Keepalived监测Nginx服务

问题:当我们在MASTER服务器中,手工停止Nginx,VIP会发生漂移么?

答:不会,因为keepalived软件主要检测keepalived服务状态以及网络情
况。只要这两者正常,这个VIP就不会发生漂移。

Keepalived配置补充

1、抢占与非抢占模式

什么是抢占模式?

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软件

2、VIP脑裂

脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节
点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个
节点开始争抢共享资源,结果会导致系统混乱,数据损坏。(简言之:
MASTER-BACKUP,两台机器上同时拥有VIP)

MASTER是如何发送组播数据包呢?

# tcpdump -i ens33 vrrp -n

MASTER服务器 => 224.0.0.18(组播地址)发送数据包 <= BACKUP服务
器(防火墙)

当有一天,BACKUP接受不到组播地址传输过来的数据包了,系统就会认
为MASTER已经宕机。开始选举生成新的MASTER。

VIP脑裂最大的产生原因:就是防火墙未关闭或没有把vrrp协议添加到防火
墙中。

3、单播模式

一方面,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
  • 我的微信
  • 欢迎大家,与我交流,非诚勿扰谢谢
  • weinxin
  • 奕知伴解 微信公众号
  • 扫一扫关注,从此不迷路。
  • weinxin
刘銮奕

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: