18.11 LVS DR模式搭建
18.12 keepalived + LVS
18.11 LVS DR模式搭建
企业上使用LVS得最多是DR模式 ,NAT模式适合小企业使用。但是DR模式因为每台机器都是需要配置公网IP的,既浪费IP资源,又把服务器暴露在外网上,其实可以让所有机器都在自建的内网上使用LVS,然后让公网IP端口映射到内网的vip端口上的。
准备工作
准备三台机器 一台作分发器,两台作rs
分发器:kun03 外网:192.168.80.102
rs1:kun05 外网:192.168.80.104
rs2:kun06 外网:192.168.80.105
vip:192.168.80.66
由于上节把kun05和kun06的网卡改成了192.168.80.102 现在改回来1
2
3
4
5[root@kun06 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.80.2
[root@kun06 ~]# systemctl restart network
步骤
1.在分发器上编辑脚本
1 | [root@kun03 ~]# vim /usr/local/sbin/lvs_dr.sh |
1 | #! /bin/bash |
ifdown ens33 && ifup ens33
重启网卡 这里作用是清除之前临时设置的网卡ipifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
设置ens33:2网卡的IP地址为vipipvsadm -C
清除lvs规则-A
增加规则-t
指定分发器IP-s
指定算法-g
指DR模式-w
指定权重
2.执行分发器上的脚本
1 | [root@kun03 ~]# sh /usr/local/sbin/lvs_dr.sh |
3.两台rs上编辑脚本
1 | [root@kun05 ~]# vim /usr/local/sbin/lvs_dr.sh |
1 | #! /bin/bash |
下面四条命令可以查看文章 www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
4.执行rs上的脚本
1 | [root@kun05 ~]# sh /usr/local/sbin/lvs_dr.sh |
测试
使用浏览器访问192.168.80.66
18.12 keepalived实现lvs功能
一般完整的架构是需要两台服务器(分发器)分别安装keepalived软件,目的是实现高可用,但keepalived本身也有负载均衡的功能,其原因有两个,其一,负载均衡中的重要角色分发器不能宕机
,其二,后端的rs宕机时可以不分发用户请求,自能分发请求
。
所以本次实验可以只安装一台keepalived来实现负载均衡的效果。keepalived内置了ipvsadm的功能,所以是不需要再安装ipvsadm包,也不用编写和执行那个lvs_dir的脚本了
准备工作
准备三台机器 一台作分发器,两台作rs
分发器:kun03 外网:192.168.80.102
rs1:kun05 外网:192.168.80.104
rs2:kun06 外网:192.168.80.105
vip:192.168.80.66
步骤
1.分发器安装keepalived
1 | [root@localhost ~]# yum install -y keepalived |
2.编辑keepalived的配置文件
1 | [root@kun03 ~]# vim /etc/keepalived/keepalived.conf |
输入下面配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50vrrp_instance VI_1 {
#备用服务器上为 BACKUP
state MASTER
#绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
interface ens33
virtual_router_id 51
#备用服务器上为90
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux
}
virtual_ipaddress {
192.168.80.66
}
}
virtual_server 192.168.80.66 80 {
#(每隔10秒查询realserver状态)
delay_loop 10
#(lvs 算法)
lb_algo wlc
#(DR模式)
lb_kind DR
#(同一IP的连接60秒内被分配到同一台realserver)
persistence_timeout 60
#(用TCP协议检查realserver状态)
protocol TCP
real_server 192.168.80.104 80 {
#(权重)
weight 100
TCP_CHECK {
#(10秒无响应超时)
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.80.105 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
假如使用了高可用 记得也要在backup
机器上配置上面的配置 priority
和state
不同而已
内容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf
由于之前设置过vip和ipvsadm的规则 先情空他们1
2
3
4
5
6
7[root@kun03 ~]# ipvsadm -C
[root@kun03 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@kun03 ~]# systemctl restart network ##清空之前的vip
3.分发器上打开路由转发功能
1 | [root@kun03 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward |
4.两台rs上编辑脚本
1 | [root@kun05 ~]# vim /usr/local/sbin/lvs_dr.sh |
1 | #! /bin/bash |
5.执行rs上的脚本
1 | [root@kun05 ~]# sh /usr/local/sbin/lvs_dr.sh |
6.启动keepalived服务
1 | [root@kun03 ~]# systemctl start keepalived |
7.查看负载均衡的情况
1 | [root@kun03 ~]# ipvsadm -ln |
测试
也是回去浏览器访问192.168.80.66
这里把kun06的Nginx服务给停掉1
[root@kun06 ~]# systemctl stop nginx
keepalived只会发现kun05并发请求发送给他1
2
3
4
5
6[root@kun03 ~]# 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.80.66:80 wlc persistent 1
-> 192.168.80.104:80 Route 100 2 0
再把kun06的Nginx服务给起来1
[root@kun06 ~]# systemctl start nginx
keepalived又重新加载回kun061
2
3
4
5
6
7[root@kun03 ~]# 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.80.66:80 wlc persistent 1
-> 192.168.80.104:80 Route 100 5 2
-> 192.168.80.105:80 Route 100 2 0