前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Keepalived双机热备

Keepalived双机热备

作者头像
刘銮奕
发布2020-04-27 09:38:16
2.1K0
发布2020-04-27 09:38:16
举报
文章被收录于专栏:奕知伴解奕知伴解

1、为什么需要双机热备

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

MASTER(宕机)

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

2、服务器的环境准备

编号

主机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)

MySQL数据库分离

在MySQL01中安装MySQL

使用Shell脚本安装MySQL:

代码语言:javascript
复制
# 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安全初始化

代码语言:javascript
复制
# mysql_secure_installation
设置密码=>123

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

第一步:对Web01中的数据库的ds_wp博客系统进行备份

代码语言:javascript
复制
# mysqldump -uroot --databases ds_shop > ds_shop.sql -p
Enter password:123

第二步:使用文件传输命令rsync把ds_wp.sql推送到MySQL01

代码语言:javascript
复制
# rsync -av ds_shop.sql root@10.1.1.12:/root/

第三步:在MySQL01数据库中创建一个ds_wp数据库,然后倒入 ds_wp.sql

代码语言:javascript
复制
# 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中的数据库

代码语言:javascript
复制
# systemctl stop mysql

第五步:在MySQL01的MySQL数据中创建一个特定账号,用于远程连接

代码语言:javascript
复制
mysql> grant all privileges on ds_shop.* to
'dsshop'@'10.1.1.%' identified by '123';

mysql> flush privileges;

第六步:更改DSShop商城系统的数据库配置文件database.php

代码语言:javascript
复制
# vim /home/www/application/database.php

更改地址:

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的功能体系结构,大致分两层:用户空间(user space)和内 核空间(kernel space)。

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

用户空间:

代码语言:javascript
复制
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软件

代码语言:javascript
复制
# yum install keepalived -y

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

配置文件:

代码语言:javascript
复制
# vim /etc/keepalived/keepalived.conf

日志文件:

代码语言:javascript
复制
# cat /var/log/messages

6、设置Keepalived配置文件

Web01与Web02同时操作:

代码语言:javascript
复制
# vim /etc/keepalived/keepalived.conf

第一步:使用冒号:末行模式,切换光标到35行,然后按dG,删除35行以 后的所有内容

第二步:了解一下配置文件中每一行的含义19~34行

代码语言:javascript
复制
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软件

代码语言:javascript
复制
# systemctl start keepalived
# systemctl status keepalived

分别在Web01/Web02中使用ip a命令,查看网卡上是否挂载VIP地址:

代码语言:javascript
复制
ip add

8、让VIP可以ping通 把域名解析到VIP,通过VIP访问到提供服务的服务器。

特别注意:1.3以后版本要注释vrrp_strict,否则虚拟IP无法ping通

设置完成后,重启keepalived软件

代码语言:javascript
复制
# 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配置文件

代码语言:javascript
复制
vrrp_instance VI_1 {
virtual_router_id 51
------------------------ 华丽的分割线 ------------------
------------
nopreempt => 非抢占模式
------------------------ 华丽的分割线 ------------------
------------
priority 100
}

第二步:配置state角色都为BACKUP

代码语言:javascript
复制
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是如何发送组播数据包呢?

代码语言:javascript
复制
# 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选 项

代码语言:javascript
复制
# vrrp_strict

第二步:组播改单播

如Web01:

代码语言:javascript
复制
vrrp_instance VI_1 {
......
unicast_src_ip 10.1.1.11 ##(本地IP地址)
unicast_peer {
10.1.1.13 ##(对端IP地址)此地址一定不能忘
记,支持多台机器
}
......
}

Web02:

代码语言:javascript
复制
vrrp_instance VI_1 {
......
unicast_src_ip 10.1.1.13 ##(本地IP地址)
unicast_peer {
10.1.1.11 ##(对端IP地址)此地址一定不能忘
记,支持多台机器
}
......
}

第三步:重启keepalived软件

代码语言:javascript
复制
# systemctl restart keepalived
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奕知伴解 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、服务器的环境准备
  • MySQL数据库分离
    • 在MySQL01中安装MySQL
      • 2、MySQL安全初始化
        • 3、把Web01中的数据库迁移MySQL01
        • HA高可用服务搭建
          • 1、HA Cluster高可用集群
            • 2、为什么要引入HA高可用
              • 3、Keepalived软件概述
                • 4、Keepalived组成和原理
                  • 5、安装Keepalived软件
                    • 6、设置Keepalived配置文件
                      • 9、模拟服务器故障,VIP漂移
                        • 10、Keepalived监测Nginx服务
                        • Keepalived配置补充
                          • 1、抢占与非抢占模式
                            • 2、VIP脑裂
                              • 3、单播模式
                              相关产品与服务
                              云数据库 SQL Server
                              腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档