高可用keepalived详解---干货满满(企业应用示例)

目录

一、master/master 的 Keepalived 双主架构

1.1  ka1部署

1.2 ka2部署 

1.3 重启测试 

二、实现ipvs高可用 (keepalived+lvs)

2.1 ipvs的相关配置

2.1.1 虚拟服务器配置架构

2.1.2 virtual server (虚拟服务器)的定义格式

2.1.3 虚拟服务器配置 

 2.1.4 应用层监测

2.1.5 TCP监测

2.2 lvs-----dr模式高可用

2.2.1 在rs1,rs2配置虚拟IP,并解决arp响应问题。

2.2.2 在ka1,ka2上面配置ipvsadm

2.2.3 在keepalived 添加配置dr 负载均衡策略

 2.2.4 重启测试

2.2.5 watch 监控检测

三、实现VRRP Script高可用性

3.1 VRRP Script 配置

3.1.1 定义脚本

3.1.2  调用脚本

 3. 2 利用vrrp脚本实现主从角色切换

3.2.1 写脚本

3.2.2 编辑配置文件

3.2.3 重启测试 

四、实现haproxy高可用 (keepalived+haproxy)

4.1 ka1,ka2安装部署haproxy

4.2 添加内核参数

4.3 重启haproxy测试

 4.4 脚本检测haproxy状态

4.4.1 写脚本

4.4.2 编辑配置文件

 4.4.3 重启测试


本章实验的环境和上一篇一样,不知道的可以看上一篇的环境配置哦。!!!!!

一、master/master Keepalived 双主架构

master/slave 的单主架构,同一时间只有一个 Keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用 master/master 的双主架构,解决此问题。
双主架构就是:

在两个或以上 VIP 分别运行在不同的 keepalived 服务器,以实现服务器并行提供 web访问的目的,提高服务器资源利用率。

1.1  ka1部署

在ka1上面在配置文件里面再添加VIP(172.25.254.200)的配置,注意此时ka1上面为backup。如下

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev ens33 label ens33:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
      172.25.254.20
    }
}

#添加这个
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 200
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev ens33 label ens33:2
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
      172.25.254.20
    }
}

 

1.2 ka2部署 

在ka2上面在配置文件里面再添加VIP(172.25.254.200)的配置,注意此时ka1上面为MASTER。如下

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev ens33 label ens33:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
      172.25.254.10
    }
}
#添加下面这个
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 200
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev ens33 label ens33:2
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
      172.25.254.10
    }
}

1.3 重启测试 

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka2~]# systemctl restart keepalived.service

其vip2就出现在ka2上面

然后将ka2上的keepalived服务stop停止了,其两个VIP就都出现在ka1上面。

二、实现ipvs高可用 (keepalived+lvs)

通过在keepalived部署策略,能够实现负载均衡的高可用,高性能。

2.1 ipvs的相关配置

2.1.1 虚拟服务器配置架构

virtual_server IP port {
...
real_server {
...
}
real_server {
...
}
…
}

2.1.2 virtual server (虚拟服务器)的定义格式

virtual_server IP port # 定义虚拟主机 IP 地址及其端口
virtual_server fwmark int #ipvs 的防火墙打标,实现基于防火墙的负载均衡集群
virtual_server group string # 使用虚拟服务器组

2.1.3 虚拟服务器配置 

virtual_server IP port { #VIP和PORT
delay_loop <INT> #检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh #定义调度方法
lb_kind NAT|DR|TUN #集群的类型,注意要大写
persistence_timeout <INT> #持久连接时长
protocol TCP|UDP|SCTP #指定服务协议,一般为TCP
sorry_server <IPADDR> <PORT> #所有RS故障时,备用服务器地址
real_server <IPADDR> <PORT> { #RS的IP和PORT
weight <INT> #RS权重
notify_up <STRING>|<QUOTED-STRING> #RS上线通知脚本
notify_down <STRING>|<QUOTED-STRING> #RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... } #定义当前主机健康状
态检测方法
}
}
#注意:括号必须分行写,两个括号写在同一行,如: }} 会出错

 2.1.4 应用层监测

应用层检测:HTTP_GET|SSL_GET
HTTP_GET|SSL_GET {
url {
path <URL_PATH> #定义要监控的URL
status_code <INT> #判断上述检测机制为健康状态的响应码,一般为 200
}
connect_timeout <INTEGER> #客户端请求的超时时长, 相当于haproxy的timeout server
nb_get_retry <INT> #重试次数
delay_before_retry <INT> #重试之前的延迟时长
connect_ip <IP ADDRESS> #向当前RS哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #向当前RS发出健康状态检测请求时使用的源地址
bind_port <PORT> #向当前RS发出健康状态检测请求时使用的源端口
}

2.1.5 TCP监测

传输层检测: TCP_CHECK
TCP_CHECK {
connect_ip <IP ADDRESS> #向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址
bind_port <PORT> #发出健康状态检测请求时使用的源端口
connect_timeout <INTEGER> #客户端请求的超时时长
#等于haproxy的timeout server
}

2.2 lvs-----dr模式高可用

这里我们使用单主模式,也可以在双主模式下配置。下面就开始我们的部署了

2.2.1 在rs1,rs2配置虚拟IP,并解决arp响应问题。

添加虚拟ip

[root@rs1 ~]# ip a a 172.25.254.100/32 dev lo

[root@rs2 ~]# ip a a 172.25.254.100/32 dev lo

限制arp响应,这里我们写到配置文件中来进行永久限制,

[root@rs1 ~]# vim /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

[root@rs1 ~]# vim /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

 重启起作用:

[root@rs1 ~]# sysctl --system

[root@rs2 ~]# sysctl --system

2.2.2 在ka1,ka2上面配置ipvsadm

[root@ka1 ~]# yum install ipvsadm -y

[root@ka2~]# yum install ipvsadm -y

2.2.3 在keepalived 添加配置dr 负载均衡策略

ka1上配置:

修改配置文件 [root@ka1 ~]# vim /etc/keepalived/keepalived.conf

ka2上面的配置:

 修改配置文件 [root@ka2 ~]# vim /etc/keepalived/keepalived.conf

 2.2.4 重启测试

我们就可以在两台keepalived服务器上面查看到了策略,如下。

 我们再测试一下负载均衡轮询,如下也能够实现。

2.2.5 watch 监控检测

我们在ka1上面进行watch检测。

[root@ka1 ~]# watch -n 1 ipvsadm -Ln

刚开始的时候,其检测到ipvs策略110,120都有

然后关闭rs1的httpd服务,发现监控到没有了到110的策略。

然后再开启rs1的httpd服务,发现监控又有了110的策略。

以上就是keepalived能够实现动态检测故障,然后ka1故障,lvs自动切换至ka2.

[root@ka1 ~]# systemctl stop keepalived.service
[root@ka2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 wrr
-> 172.25.254.110:80 Route 1 0 0
-> 172.25.254.120:80

三、实现VRRP Script高可用性

keepalived 利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能。

3.1 VRRP Script 配置

3.1.1 定义脚本

vrrp_script :自定义资源监控脚本, vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在 vrrp 实例之外的独立配置块,一般放在 global_defs 设置块之后。
通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对 MASTER节点的权重减至 低于 SLAVE 节点,从而实现 VIP 切换到 SLAVE 节点.
vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING> #此脚本返回值为非0时,会触发下面OPTIONS执行
OPTIONS
}

3.1.2  调用脚本

track_script :调用 vrrp_script 定义的脚本去监控资源,定义在 VRRP实例之内,调用事先定义的vrrp_script
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
}

 3. 2 利用vrrp脚本实现主从角色切换

3.2.1 写脚本

#这个脚本是对这个文件是否存在状态
[root@ka1 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
[ ! -f /lee ]
#给执行权限
[root@ka1 ~]# chmod +x /etc/keepalived/test.sh
#开始是没有这个文件的状态为0
[root@ka1 ~]# echo $?
0

3.2.2 编辑配置文件

本次主要是在ka1上实现的,所以只要编辑ka1配置文件就行了。

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 

3.2.3 重启测试 

主要是通过过创建删除文件/lee来检测VIP。

重启服务keepalived后。

[root@ka1 ~]# systemctl stop haproxy.service 

首先没有这个/lee文件  即 $?=0。那么我们的VIP就没有变化

然后创建文件/lee,文件存在就出问题,$?==1 ----非0,权重就会变化100-30=70,VIP就会转移其vip100就转移到 ka2上

四、实现haproxy高可用 (keepalived+haproxy)

在配置haproxy是需要将之前做的lvs-dr的配置都清理干净不然会有影响!!!!!

4.1 ka1,ka2安装部署haproxy

[root@ka1 ~]# yum install haproxy -y

[root@ka2 ~]# yum install haproxy -y

编辑haproxy配置文件。

#ka1上
[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg 
#添加
listen webcluser
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
    server web2 172.25.254.120:80 check inter 3 fall 2 rise 5

#ka2上
[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg 
#添加
listen webcluser
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
    server web2 172.25.254.120:80 check inter 3 fall 2 rise 5

 就是下面的。

4.2 添加内核参数

添加内核参数 -使得不管本地有没有VIP100都能监听:---两台都要做。

[root@ka1 ~]# vim /etc/sysctl.conf
#添加
net.ipv4.ip_nonlocal_bind = 1
#启用
[root@ka1 ~]# systemctl --system
[root@ka1 ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1

[root@ka2 ~]# vim /etc/sysctl.conf
#添加
net.ipv4.ip_nonlocal_bind = 1
#启用
[root@ka2 ~]# systemctl --system
[root@ka2 ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1

4.3 重启haproxy测试

[root@ka1 ~]# systemctl enable --now haproxy.service

[root@ka2 ~]# systemctl enable --now haproxy.service

haproxy的功能就先配置好了实现负载均衡

下面我们就开始进行keepalived部署动态检测实现高可用高性能。

 4.4 脚本检测haproxy状态

使用killall -0 haproxy来检测 ,其脚本也是和上面的差不多。

4.4.1 写脚本

#这个脚本是对这个haproxy进程状态进行检测
[root@ka1 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy
#给执行权限
[root@ka1 ~]# chmod +x /etc/keepalived/test.sh


[root@ka2 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy
#给执行权限
[root@ka2 ~]# chmod +x /etc/keepalived/test.sh

4.4.2 编辑配置文件

ka1上面:主要添加下面标红的

ka2上面:主要添加下面标红的

 

 4.4.3 重启测试

先关掉ka1一台上面的haproxy,就会出现vip转移。然后就会在ka2上面调用haproxy,这样就实现了即使一台调度器挂了,另一台也能及时响应成为haproxy服务器来使用。

再次开启之后,其VIP就回来了

以上就是我在学习keepalived阶段的全部内容啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左水水%

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值