四台服务器,系统全为CentOS6.8:
192.168.0.150 master lvs+keepalived
192.168.0.151 backup lvs+keepalived
192.168.0.152 web1(nginx)
192.168.0.153 web2 (nginx)
1、分别在backup lvs和master lvs上安装lvs
yum -y install ipvsadm
2 把ipvsadm模块加载进系统
ipvsadm
lsmod | grep ip_vs
lsmod 命令用于显示已经加载到内核中模块的状态信息,执行lsmod命令后 会列出所有已经加载到系统的模块。
3 分别在backup lvs和master lvs上安装keepalived(keepalived官网:http://www.keepalived.org/)
tar -zxvf keepalived-1.2.24.tar.gz
cd /opt/keepalived-1.2.24
执行 ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share
此时报错了,提示没有安装gcc
我们通过 yum install gcc 命令安装
gcc 安装完成以后,我们再次执行 ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share
提示如下错误,错误原因 :系统缺少openssl-devel包所致
安装openssl-devel
yum -y install openssl-devel
安装完成以后,在此执行 ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share
完成配置
接着 执行编译和安装命令
make && make install
4 配置keepalived
vi /etc/keepalived/keepalived.conf
lvs-master的配置文件如下
! Configuration File for keepalived
global_defs { #全局配置部分
# notification_email { #email 邮件通知,基本不用,所以此处注释掉
# [email protected]
# [email protected]
# [email protected]
# }
# notification_email_from [email protected]
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
router_id LVS_DEVEL #设置lvs id 在一个网络内,应该是唯一的
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { #vrrp 实例部分
state MASTER # 设置lvs 的状态,分为MASTER和BACKUP两种,必须大写
interface eth0 #设置对外服务的接口
virtual_router_id 51 #设置虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一标识
priority 100 # 定义优先级,数字越大,优先级越高,在同一个vrrp-instance下 MASTER 的优先级必须大于BACKUP的优先级
advert_int 1 #设置master和backup负载均衡器之间同步检查的时间间隔,单位秒
authentication { #设置验证类型和密码
auth_type PASS # 主要有PASS和AH两种
auth_pass 1111 #验证密码,同一个vrrp-instance 下 验证密码必须相同
}
virtual_ipaddress {#设置虚拟ip地址,可以设置多个,每行一个
192.168.0.154
}
}
virtual_server 192.168.0.154 80 {
delay_loop 3 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页特别有用
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.0.152 80 {#配置服务器节点1 需要指定real server 的真实ip地址和端口
weight 1 #设置权重,数字越大,权重越大
TCP_CHECK { #real server 状态监测设置,部分单位 秒
connect_timeout 3 #超时监测
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 # 监测端口
}
}
real_server 192.168.0.153 80 {#配置服务器节点1 需要指定real server 的真实ip地址和端口
weight 1 #设置权重,数字越大,权重越大
TCP_CHECK { #real server 状态监测设置,部分单位 秒
connect_timeout 3 #超时监测
nb_get_retry 3 # 重试次数
delay_before_retry 3 #重试间隔
connect_port 80 # 监测端口
}
}
}
vi /etc/keepalived/keepalived.conf
lvs-backup 的配置文件如下
! Configuration File for keepalived
global_defs { #全局配置部分
# notification_email { #email 邮件通知,基本不用,所以此处注释掉
# [email protected]
# [email protected]
# [email protected]
# }
# notification_email_from [email protected]
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
router_id LVS_DEVEL #设置lvs id 在一个网络内,应该是唯一的
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { #vrrp 实例部分
state BACKUP # 设置lvs 的状态,分为MASTER和BACKUP两种,必须大写
interface eth0 #设置对外服务的接口
virtual_router_id 51 #设置虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一标识
priority 50 # 定义优先级,数字越大,优先级越高,在同一个vrrp-instance下 MASTER 的优先级必须大于BACKUP的优先级
advert_int 1 #设置master和backup负载均衡器之间同步检查的时间间隔,单位秒
authentication { #设置验证类型和密码
auth_type PASS # 主要有PASS和AH两种
auth_pass 1111 #验证密码,同一个vrrp-instance 下 验证密码必须相同
}
virtual_ipaddress {#设置虚拟ip地址,可以设置多个,每行一个
192.168.0.154
}
}
virtual_server 192.168.0.154 80 {
delay_loop 3 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页特别有用
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.0.152 80 {#配置服务器节点1 需要指定real server 的真实ip地址和端口
weight 1 #设置权重,数字越大,权重越大
TCP_CHECK { #real server 状态监测设置,部分单位 秒
connect_timeout 3 #超时监测
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 # 监测端口
}
}
real_server 192.168.0.153 80 {#配置服务器节点1 需要指定real server 的真实ip地址和端口
weight 1 #设置权重,数字越大,权重越大
TCP_CHECK { #real server 状态监测设置,部分单位 秒
connect_timeout 3 #超时监测
nb_get_retry 3 # 重试次数
delay_before_retry 3 #重试间隔
connect_port 80 # 监测端口
}
}
}
5 realserver的配置
1. 152 153两台real server 安装nginx服务
安装过程参考 https://mp.csdn.net/postedit/88556340
为了方便我们知道请求由那一个服务器响应的,修改nginx的 首页
vi /usr/share/nginx/html/index.html
我们在welcome 后面加上我们的ip 地址
2 进入 /etc/rc.d/init.d 目录创建 realserver.sh文件
cd /etc/rc.d/init.d
vi realserver.sh
realserver.sh 文件的内容如下
#!/bin/bash
# description: Config realserver lo and apply noarp
SNS_VIP=192.168.0.154
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
3 运行realserver.sh 脚本
执行 /etc/rc.d/init.d/realserver.sh start
此时会报权限不足的错误
为什么会报这个错误呢?我们看一下这个文件会发下,这个文件并没有可执行的权限,此时我们只需要给它加上执行权限即可
增加执行权限命令 : chmod u+x realserver.sh
再次执行 /etc/rc.d/init.d/realserver.sh start
脚本执行成功,上面的权限不足可以忽略
两台real server 都需要执行上面的脚本
两台real server 执行完是上面的脚本,执行 ifconfig 命令,应该都可以看到我们的 虚拟ip
4 启动两台real server 的nginx服务
执行命令 /usr/sbin/nginx
6 启动keepalived并进行测试
启动两台主机的keepalived 服务
执行 命令: service keepalived start
提示我们权限不够,那我们就去修改权限
进入 /etc/init.d/ 目录下 找到keepalived 文件,发现它并没有执行权限
执行 chmod u+x ./keepalived 添加执行权限,然后再次启动
在lvs-master 输入
tail -f /var/log/messages
通过 ipvsadm -L -n 我们可以查看 real server 的ip
ipvsadm -L -n
接下来 我们模拟lvs master 宕机了,看看lvs backup 反应
模拟之前我们看一下 backup 的状态,它还是backup 状态,并且没有接管vip
我们直接重启192.168.0.150 即lvs- master
执行命令 reboot ,我们可以看到 lvs-master 已经 重启,并且连接已经断开
此时,192.168.0.151 即lvs-backup 变为了master,并且已经接管了 vip
我们再起重启 lvs-master 并且启动keepalived 服务
这时lvs-master 重新接管了 vip
此时lvs-backup 交出了vip,再次成为一个备胎 ,backup
模拟real server 有一台宕机了
我们直接将192.168.0.152 关机
此时 lvs-master 不断的监测192.168.0.152 的状态,而 lvs-back 会监测一次 然后从路由列表删除
本文是 参考 https://www.cnblogs.com/liuyisai/p/5990645.html 进行实践操作,再次向大佬致敬
本文是 参考 https://www.cnblogs.com/liuyisai/p/5990645.html 进行实践操作,再次向大佬致敬
本文是 参考 https://www.cnblogs.com/liuyisai/p/5990645.html 进行实践操作,再次向大佬致敬