install keepalived
需求
1.有4台服务器,如下
hostname | ip | 作用 |
---|---|---|
test1 | 10.0.1.201 | keepalived master |
test2 | 10.0.1.202 | keepalived backup |
real1 | 10.0.1.203 | realserver 1,安装nginx |
real2 | 10.0.1.204 | realserver 2,安装nginx |
2.本次试验的虚拟IP:10.0.1.200
3.4台服务器同处于一个局域网中
4.要求:同一时间只能有一台服务器的nginx处理请求流量,假如现在是real2在处理请求,real1处于standby状态,将real2的nginx关闭,real1自动接管real2的流量
源码安装keepalived
1 | wget https://www.keepalived.org/software/keepalived-2.0.17.tar.gz |
配置负载均衡
1.修改配置文件
/opt/keepalived/etc/keepalived/keepalived.conf
1 | ! Configuration File for keepalived |
2.将keepalived的目录/opt/keepalived整个复制到test2,并只修改其中的三项:
state,router_id,priority
state为backup的服务器,其priority必须要小于master服务器的priority值
1 | ! Configuration File for keepalived |
3.打开内核转发1
2sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sysctl -p
配置realserver
1.由于是DR转发,所以realserver需要arp抑制
分别在real1和real2上执行1
2
3
4
5#!/bin/bash
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
2.配置vip到realserver的lo:0接口
分别在real1和real2上执行1
2
3VIP=‘10.0.1.200’
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
route add -host $VIP dev lo:0
3.为了快捷,使用docker启动nginx
分别在real1和real2上执行:1
2
3docker run -d --name nginx -p 80:80 -v /opt/html:/usr/share/nginx/html nginx
hostname > /opt/html/index.html
# 为了测试效果,把主机名作为请求返回的结果,以确定是哪个服务器响应的请求
docker运行后,验证一下网嶡请求是否能正常返回:
curl 10.0.1.203
curl 10.0.1.204
启动keepalived
分别在test1和test2上执行1
2#!/bin/bash
/opt/keepalived/sbin/keepalived -f /opt/keepalived/etc/keepalived/keepalived.conf
验证
1.模拟一切OK的情况
curl 10.0.1.200
请求N次,返回的结果都为real2的主机名,为符合预期结果:同一时间,只能一台服务器提供服务
2.模拟real2的nginx异常退出的情况
在real2上执行:docker stop nginx,然后执行:curl 10.0.1.200
请求N次,返回的结果都为real1的主机名,为符合预期结果:将real2的nginx关闭,real1自动接管real2的流量
3.恢复一切正常后,再模拟keepalived master异常退出的情况
将test1的keepalived进程杀掉:killall keepalived
然后执行N次:curl 10.0.1.200
返回的结果都为real2的主机名,为符合预期结果:同一时间,只能一台服务器提供服务
4.恢复一切正常后,再模拟keepalived master服务器宕机的情况
将test1的keepalived进程杀掉:killall keepalived
将real2的nginx关闭:docker stop nginx
然后执行N次:curl 10.0.1.200
返回的结果都为real1的主机名,为符合预期结果:将real2的nginx关闭,real1自动接管real2的流量
5.恢复一切正常后,再模拟keepalived backup服务器宕机的情况
将test2的keepalived进程杀掉:killall keepalived
将real2的nginx关闭:docker stop nginx
然后执行N次:curl 10.0.1.200
返回的结果都为real1的主机名,为符合预期结果:将real2的nginx关闭,real1自动接管real2的流量
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rootid@126.com
文章标题:install keepalived
本文作者:Shawn
发布时间:2019-07-30, 14:57:42
最后更新:2019-07-30, 17:24:30
原始链接:https://gitrootid.github.io/2019/07/30/tools/install-keepalived_/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。