Keepalived+LVS
LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉时,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决该问题,它不仅仅有高可用的功能,还有负载均衡的功能。在调度器上只要安装了keepalived,就不用再安装ipvsadm了,也不用去编写LVS相关的脚本了,也就是说keepalived已经嵌人了LVS功能。完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度服务的只需要一台,另外一台作为备用。
1.基础准备
(1)准备3台机器
为了节省资源,我们只设置一台主keepalived,备用的暂时就省略掉了。下面为各机器的角色和IP。
主keepalived(调度器):192.168.147.130
真实服务器rs1:192.168.147.131
真实服务器rs2:192.168.147.132
VIP:192.168.147.110
(2)改名
分发器:
Rs1:
Rs2:
(3)安装yum源
在3台虚拟机上:
[root@master ~]# mkdir /opt/centos
[root@master ~]# mount /dev/cdrom /opt/centos
mount: /dev/sr0 写保护,将以只读方式挂载
[root@master ~]# mv /etc/yum.repos.d/* /media
[root@master ~]# vi /etc/yum.repos.d/local.repo
[centos7]
name=centos7
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
2.安装keepalived
如果你的机器上还未安装过keepalived,则需要先安装,直接yum install -y keepalived即可。
[root@dir1 ~]# yum install -y keepalived
下面编辑keepalived的配置文件:
清空配置文件:
[root@dir1 ~]# > /etc/keepalived/keepalived.conf
添加如下内容:
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.147.110
}
}
virtual_server 192.168.147.110 80 { #VIP
delay_loop 10 #每隔10秒查询realserver状态
lb_algo wlc #lvs算法
lb_kind DR #DR模式
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #用TCP协议检查realserver状态
real_server 192.168.147.131 80 { #真实服务器ip
weight 100 #权重
TCP_CHECK {
connect_timeout 10 # 10秒无响应超时(连接超时时间)
nb_get_retry 3 #失败重试次数
delay_before_retry 3 #失败重试的间隔时间
connect_port 80 #连接的后端端口
}
}
real_server 192.168.147.132 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3.配置
由于上一节(我的前一篇博客)刚刚执行过LVS的脚本,所以需要做一些操作:
把之前的ipvsadm规则清空:
[root@dir1 ~]# ipvsadm -C
可以把之前的vip删除掉:
[root@dir1 ~]# systemctl restart network
因为我们在keepalived的配置文件中定义的LVS模式为DR模式,所以还需要在两台rs上执行lvs_rs.sh脚本,这个脚本就是上一节设置的脚本。
[root@rs1 ~]# sh /usr/local/sbin/lvs_rs.sh
[root@rs2 sbin]# sh /usr/local/sbin/lvs_rs.sh
做完准备工作后,在130上启动keepalived服务:
[root@dir1 ~]# systemctl restart network
[root@dir1 ~]# systemctl start keepalived
[root@dir1 ~]# ps aux |grep keepalived //检查有无keepalived进程
root 11098 0.0 0.1 118688 1384 ? Ss 19:25 0:00 /usr/sbin/keepalived -D
root 11099 0.0 0.3 129620 3336 ? S 19:25 0:00 /usr/sbin/keepalived -D
root 11100 0.0 0.2 129488 2612 ? S 19:25 0:00 /usr/sbin/keepalived -D
root 11105 0.0 0.0 112720 988 pts/0 S+ 19:26 0:00 grep --color=auto keepalived
运行结果如下图所示:
4.测试
检验是否成功的方法也很简单,需要在浏览器直接访问vip192.168.147.110,然后故意把其中一台 rs的Nginx服务关掉,比如说关闭131的;然后再刷新浏览器看结果,刷新的时候需要使用组合键(Ctrl+F5)强制刷新浏览器,这样就不会有缓存数据了。
同时,也可以在调度器(130)上执行命令ipvsadm -ln查看连接数:
对应的rs只有一台131,然后再把132的Nginx服务启动,再来查看:
后端的rs又变成两台了,测试成功。
5.总结
●在dir上不仅要安装ipvsadm,三台服务器还要同时安装net-tools,否则配置完脚本缺少命令。
●在rs1和rs2上要提前安装并配置好nginx,(可以参考我的第一篇博客)否则真实服务器与vip无法连接。
●测试的时候要关闭131上的nginx或132上的nginx,再测试。
●关闭nginx
(1)进入nginx目录
cd /usr/local/nginx/sbin
(2)快速停止nginx
./nginx -s stop
(3)完整有序的停止nginx,这个命令会等待所有请求结束后再关闭nginx
./nginx -s quit
标签:负载,LVS,Keepalived,keepalived,dir1,192.168,nginx,root From: https://blog.csdn.net/Gao0Yuu/article/details/142520698