keepalived+Lvs/DR集群+高可用

keepalived+Lvs/DR集群+高可用

keepalived是什么
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。

keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

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

keepalived主要有三个模块,分别是core(核心)、check(检测)和vrrp(虚拟路由冗余协议)。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件(keepalived.conf)的加载和解析。check负责健康检查,包括常见的各种检查方式(TCP、脚本检测进程状态等)。vrrp模块是来实现VRRP协议的。


keepalived的常见组合:
keepalived+LVS
keepalived+nginx
keepalived+mysql-proxy
keepalived+mycat

keepalived+LVS
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

软件功能说明:
keepalived:实现中间件(代理服务器的高可用)。
LVS:是中间件软件(即代理服务器软件),是用来实现集群的负载均衡。

+++++++++ 
+---------------------------> + Client + 192.168.11.1 win7/10
| +++++++++ 
| ________________|_________________ 
| | VIP eth0:1 192.168.10.100 | 
| +++++++++++++++++++++ +++++++++++++++++++++ 
| + Director master主 node11 + + Director backup备 node12 +
| +++++++++++++++++++++ +++++++++++++++++++++
| DIP 192.168.11.11 ens33网卡 DIP 192.168.11.12 ens33网卡
| |________
| _________________|________________
| | | 
| +++++++++++++++++ ++++++++++++++++++
+--------+ RealServer A node13 + + Real Server B node14 +
+++++++++++++++++ ++++++++++++++++++
192.168.11.13/24 192.168.11.14/24

分别在Director master、Director backup 上部署浮动资源(VIP IPVS策略)
测试2个Director在DR模式下都工作正常。测试完成后都撤掉浮动资源。

实验准备:

先保证服务器防火墙和selinux都处于关闭状态

这里先临时关闭一下

systemctl  stop   firewalld临时关闭防火墙

setenforce  0 关闭selinux

getenforce  查selinux状态

 

2台Real Server ,ip设置为192.168.11.13和192.168.11.14

1台Director master,ip 设置为192.168.11.11

1台Director backup,ip设置为192.168.11.12

实验开始

在2台real server部署apache服务

用yum安装apache

yum  -y  install  httpd

systemctl  restart  httpd  启动apache服务

systemctl  enable  httpd  设为开机自启

在默认网页目录中临时添加内容

keepalived+Lvs/DR集群+高可用_第1张图片

做本地测试

keepalived+Lvs/DR集群+高可用_第2张图片

vim lo.sh##写入如下脚本

keepalived+Lvs/DR集群+高可用_第3张图片

加入可执行权限chmod +x lo.sh

运行脚本.  lo.sh

查一下ip

ip  a

keepalived+Lvs/DR集群+高可用_第4张图片

会看到多出一个192.168.11.100的ip

再给这个脚本传到另一台real server

keepalived+Lvs/DR集群+高可用_第5张图片

到此13的机器就部署完了

现在部署另一台real server

用yum安装apache

yum  -y  install  httpd

systemctl  restart  httpd  启动apache服务

systemctl  enable  httpd  设为开机自启

在默认网页目录中临时添加内容,并做本地测试

keepalived+Lvs/DR集群+高可用_第6张图片

执行从13上传过来的脚本、

. lo.sh

再次查看ip地址

keepalived+Lvs/DR集群+高可用_第7张图片

会发现多出一个ip地址。

到此,real server就部署好了。

 

现在部署Director master和Director backup

安装keepalived和ipvsadm(主要用来查询)

用yum安装:

yum  -y  install  keepalived  ipvsadm

备份配置文件

cp  -av  /etc/keepalived/keepalived.conf{,.bak}

修改配置文件

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { 全局定义,说明:在实验测试环境中,以下内容可以随便写,但是master和backup的router_id必须相同 
notification_email { 设置通知邮箱
root@localhost 管理员的邮箱地址 
}
notification_email_from keepalived@localhost 通知邮件的发件人邮箱
smtp_server 127.0.0.1 邮箱服务器IP地址
smtp_connect_timeout 30 邮件服务器连接超时时间为30秒
router_id dr1 路由器ID名称,同一个keepalived高可用集群中master和backup的ID名称必须相同
#vrrp_strict 一定要注释掉此行,否则无法通过VIP地址访问调度器
}

vrrp_instance VI_1 { vrrp虚拟路由冗余协议的实例设置 ,实例名称为VI_1
state MASTER 状态,主为MASTER,备为BACKUP状态 
interface ens33 //心跳检测网卡接口,要根据实际情况写网卡接口名,用ip a查网卡接口名
virtual_router_id 51 //master主和backup备两边必须一样,此处是集群的群号
priority 100 //优先级,MASTER的值必须高于BACKUP的值,类似于现实生活中的竞选的票数
advert_int 1 //检查间隔,单位秒。vrrp的组播地址是224.0.0.18
authentication { 身份认证配置
auth_type PASS //认证类型为密码方式,主备要一致
auth_pass 1111 //认证密码为1111,主备要一致
}
virtual_ipaddress {
192.168.11.100 //VIP,可多个IP,每行一个IP地址
192.168.11.111
}
}

virtual_server 192.168.11.100 80 { //LVS 配置(即调度器的配置),此行等同于ipvsadm -At 192.168.11.100:80 -s wrr命令
delay_loop 3 //服务论询的时间间隔 
lb_algo wrr //LVS 调度算法
lb_kind DR // LVS 集群模式
protocol TCP //指定协议为TCP协议
real_server 192.168.11.13 80 { //RS后端真实服务器的IP及端口号,等同于ipvsadm -at 192.168.11.100:80 -r 192.168.11.13:80 -g -w 1命令
weight 1
TCP_CHECK { //RS健康检查,如果RS主机上的80端口业务异常关闭了,用ipvsadm -Ln查不到此RS的IP信息
connect_timeout 3 //连接超时时间为3秒
}
}
real_server 192.168.11.14 80 {
weight 1
TCP_CHECK {
connect_timeout 3
  }
}
}

keepalived+Lvs/DR集群+高可用_第8张图片

keepalived+Lvs/DR集群+高可用_第9张图片

修改好配置文件后:传给备服务器

cd   /etc/keepalived

keepalived+Lvs/DR集群+高可用_第10张图片

传成功后:

在备服务器上,修改配置文件

vim   /etc/keepalived/keepalived.conf

keepalived+Lvs/DR集群+高可用_第11张图片

最后,在Director上启动服务。

systemctl  restart  keepalived  [centos7专用命令]

service keepalived  restart  [centos6和7通用命令]

查ipvsadm的集群信息

keepalived+Lvs/DR集群+高可用_第12张图片

到此服务就部署完成了。

最后,测试

根据权重会有以下结果

keepalived+Lvs/DR集群+高可用_第13张图片

最后,在192.168.11.11 master服务器上关掉keepalived服务

systemctl  stop  keepalived

用ip  a查一下ip地址

 keepalived+Lvs/DR集群+高可用_第14张图片

会发现vip不见了

去backup服务器上查ip地址

keepalived+Lvs/DR集群+高可用_第15张图片

到此,服务全部结束