目录
一、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 双主架构
双主架构就是:在两个或以上 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 {
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 {
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高可用性
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_scripttrack_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阶段的全部内容啦。