首页 > 代码库 > LVS结合keepalived配置
LVS结合keepalived配置
ps:
上一节DR模式实验,可以实现两个机器负载均衡,但是有一个问题我们没有考虑过,假如其中一台机器宕掉之后,
比方把rs1的nginx停掉
[root@rs1 ~]# /etc/init.d/nginx stop
停止 nginx: [确定]
[root@rs1 ~]# curl localhost
curl: (7) couldn‘t connect to host
解释说明:
这样访问就不正常了
测试查看
[root@localhost ~]# curl 192.168.10.110
curl: (7) couldn‘t connect to host
[root@localhost ~]# curl 192.168.10.110
curl: (7) couldn‘t connect to host
[root@localhost ~]# curl 192.168.10.110
curl: (7) couldn‘t connect to host
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
curl: (7) couldn‘t connect to host
[root@localhost ~]# curl 192.168.10.110
curl: (7) couldn‘t connect to host
[root@localhost ~]# curl 192.168.10.110
curl: (7) couldn‘t connect to host
[root@localhost ~]# curl 192.168.10.110
222222
解释说明:
也出现这样的问题,3次不能访问,1次能访问,那这样的话,会把四分之三的请求产生这个坏点,也就是说4个人里面,有3个是不能访问的,所以说这种情况不是我们想要的结果,为了避免这种情况,我们就应该想到在lvs这一端能够有一个机制去检测,帮我们去检测当一个rs宕掉之后呢,它会把这个请求不再转发到这个坏掉的rs上去,我们直接把请求转发到好的rs上就行了,这样就会避免访问不到的情况。LVS本身没有这个功能,所以我们需要去借助一个第三方软件keepalived(它说白了是及负载均衡+HA高可用为一体)。
做这个实验呢需要四台机器,也就是说keepalived需要两台(一主一从),就像之前讲的heartbeat一样,一个提供服务,它是在线状态,另一个是备用,不提供服务,既然是做实验,为了节省资源,就用三台机器,那其中一个rs,比如说rs2,就把它当keepalived的备用机器也是可以的。
keepalived 用途
帮助LVS检测后端Real Server的存活,如果正常则将请求分发给RS;如果RS宕掉的话,就不会把这个请求发给RS,这样更加科学,这样不会产生一部分客户端的请求访问不到。
配置
1、 首先检查是否安装ipvsadm与keepalived
[root@dr ~]# rpm -qa ipvsadm keepalived
2、 清除DR模式实验脚本启动的VIP
[root@r1 ~]# ifconfig lo:0 down
[root@r2 ~]# ifconfig lo:0 down
[root@dr ~]# ifconfig eth0:0 down
3、 把之前的规则清空
[root@dr ~]# ipvsadm -C
4、 安装keepalived,如果之前安装过pel扩展源则可以直接安装
[root@dr ~]# yum install -y keepalived
[root@rs2 ~]# yum install -y ipvsadm
[root@rs2 ~]# yum install -y keepalived
5、 安装后编辑配置文件(先清空配置文件)
[root@dr ~]# > /etc/keepalived/keepalived.conf
[root@dr ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.110
}
}
virtual_server 192.168.10.110 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.10.13 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.10.14 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
解释说明:
vrrp_instance 全局配置
virtual_server 虚拟机,其实就是DS
real_server 包含与DR中
state 用于配置主MASTER/从BACKUP
priority 这里配置注册优先级,主的数值高从的数值低即可
authentication 验证,类似于HA的心跳线
virtual_ipaddress 配置vip
delay_loop 间隔多少秒钟检测一次RS状态
lb_algo 设置lvs算法
lb_kind 设置lvs的工作模式
persistence_timeout 保持长连接的时间(同一IP的连接设置秒内被分配到同一台RS)
protocol 使用什么协议RS状态
weight 权重
connect_timeout 设置时间内没有响应超时,单位为秒
6、 拷贝到从上
[root@dr ~]# scp /etc/keepalived/keepalived.conf 192.168.10.14:/etc/keepalived/keepalived.conf
7、 从上编辑配置文件
8、主上启动
[root@dr ~]# /etc/init.d/keepalived start
9、 启动keepalived后通过addr命令查看vip是否启动
[root@dr ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:d5:eb:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.10.12/24 brd 192.168.10.255 scope global eth0
inet 192.168.10.110/32 scope global eth0
inet6 fe80::20c:29ff:fed5:eb5e/64 scope link
valid_lft forever preferred_lft forever
10、从上启动
[root@rs2 ~]# /etc/init.d/keepalived start
11、主上查看规则
[root@dr ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.110:80 rr
-> 192.168.10.13:80 Route 100 0 0
-> 192.168.10.14:80 Route 100 0 0
12、测试之前再执行一下两个rs上执行下脚本
[root@rs1 ~]# sh /usr/local/sbin/lvs_dr_rs.sh
[root@rs2 ~]# sh /usr/local/sbin/lvs_dr_rs.sh
解释说明:
测试后没反应,所以就再执行了一下rs上的脚本
13、 测试
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
222222
14、那这时我们停掉一台机器(看是不是会自动地把它剔除掉)
[root@rs1 ~]# /etc/init.d/nginx stop
15、 测试
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
222222
解释说明:
这时会一直讲求rs2上
16、 查看到那条规则也会去掉
[root@dr ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.110:80 rr
-> 192.168.10.14:80 Route 100 0 12
17、 再把rs1启动了
[root@rs1 ~]# /etc/init.d/nginx start
18、 再查看规则就有了
[root@dr ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.110:80 rr
-> 192.168.10.13:80 Route 100 0 0
-> 192.168.10.14:80 Route 100 0 0
19、 把主keepalived停掉
[root@dr ~]# /etc/init.d/keepalived stop
20、 查看从keepalived
[root@rs2 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet 192.168.10.110/32 brd 192.168.10.110 scope global lo:0
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:e5:49:34 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.14/24 brd 192.168.10.255 scope global eth0
inet 192.168.10.110/32 scope global eth0
inet6 fe80::20c:29ff:fee5:4934/64 scope link
21、 查看从上规则
[root@rs2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.110:80 rr
-> 192.168.10.13:80 Route 100 0 1
-> 192.168.10.14:80 Local 100 0 1
22、 测试
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
222222
23、 再把主启动
[root@dr ~]# /etc/init.d/keepalived start
24、 测试
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
222222
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
11111111
[root@localhost ~]# curl 192.168.10.110
222222
本文出自 “linux” 博客,转载请与作者联系!
LVS结合keepalived配置