开发者学堂课程【LVS 负载均衡实战:LVS 的 DR 模型实战应用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/553/detail/7635
LVS 的 DR 模型实战应用(二)
二、LVS
◆负载均衡集群设计时要注意的问题
(1)是否需要会话保持
(2)是否需要共享存储
共享存储:NAS,SAN,DS(分布式存储)
数据同步:
◆lvs-nat ;
设计要点:
(1) RIP 与 DIP 在同一 IP 网络, 但不必须,RIP 的网关要指向 DIP
(2)支持端口映射
(3) Director 要打开核心转发功能
生产中即使用ngt模式也很少见,因为路由器的性能比不上交换机,非要使用路由器也没有必要,一般中间是交换机
三、实验:多个集群服务在一个 VLAN 上调度
创建多个集群服务放在一个 lvs 上,进行统一调动两个集群服务,比如实现 https 功能。
相当于https 与 https 是一个服务,https 和 web 是一个服务,首先通过#make
magedu
.
crt
自签名证书,记不住后缀可#cat Makefile查看脚本,这里会提示输入口令,输入口令后会利用刚才生成的私钥去创建对应的证书时再次输入口令,接着添加信息,国家,省,城市,名字,组织,服务名,生成信息实现https服务,加密证书所在文件夹,可通过ll查看,如,
[root@centos6
certs]
#
ll
total
1904
…
-
rw-------,1 root 1314 Jul 2 14.22 magedu.crt
-
rw-------,1 root 1766 Jul 2 14.21 magedu.key
此处可以去掉口令,因为如果每次要用magedu.key的话,都会提醒输入口令,也可以不去,不去的话私钥是可以被看到的,通过#cat magedu.key,看到显示PRIVATE KEY,但是被加密了ENCRYPTED。
这里可以看到私钥文件和证书是放在同一个文件夹的,然后再配合#yum
install
mod_
s
sl
进行加密
#vim
/etc/httpd/conf.d/ssl.conf
更改其中 sslfile 和 sslkeyfile 文件路径再调用,
最好与http路径在一块,所以此处移动到
#mv
magedu
.*/etc/httpd/conf.d/
下
再#service
httpd
restart
重启服务,输入口令,成功建立网站#
echo centos6 > /var/ww
w
/ht
m
l/index .html
。
重复如上操作第二个https。 调度服务器,如下图进行配置:
[root@centos7~
]
#ipvsadm -A -t 172.20.0.200:443 -
s
rr
[root@centos7~]#ipvsadm -
a
-t 172.20.0.200:443 -r 192.168.0.201 -m
[ root@centos7 ~ ] #ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port
Forward Weight ActiveConn InActConn
TCP
172.20.0.200:80 wlc
-> 192. 168.30.17 :8080
Masq
3 0 2
-> 192. 168.30.27 :80
Masq
1 0 1
TCP
172.20.0.200:443 rr
-> 192.168.0.201:443
Masq 1 1 2
此时看得出有两个集群服务,最后因为证书是加密的,所以先忽略
下执行#curl -k https://172.20.0.200/测试,
结果:centos6,则调度服务测试成功。
如果再搭建一个集群服务 https 则会回旋。事实上 http 和https经常是同一类型服务。
四、实验:实现单网络的 DR 的 LVS
实现 DR 模型,LVS在DR模型中配置特性是要有VIP,如果 RS1,RS2,LVS 都在同一网段,根据如图 top结构进行从左到右配置。
1、配置客户端机器:
#
vie
0
//更改IPADDR=172.20.0.222,增加网关GATEWAY=172.20.0.200
#
hostname client
//更改主机名
#
service network restarts
2、配置路由器:
#
vie
0
//更改地址I
PADDR=192.168.30.200
#cp
ifcfg-eth0 ifcfg-eth1
//生成另外一个网卡
#
vim
ifcfg
-
eth
1
//更改eth
1
为eth
2
,I
PADDR=172.20.0.200
,P
REFIX=16
#vim /etc/udev/rules.d/ 70- persistent-net. rules
//删掉eth1的记录,将NAME=eth0改为eth1
3、配置 LVS 服务器:
#hostnamectl
set
-
hostname
lvs
#vie
0
//添加GATEWAY=192.168.30.200,修改IPADDR=192.168.30.100
#
service network restarts
#
ip a
//可看到以获取地址192.168.30.100
#
ip a a 192.168.30.7/24 dev eh0:1
//在其上绑定 vip 地址
#ip
a
//可查看到inet
192.168.30.7/24
#ipvsadm
-L
n
//可查看到
4、增加路由:
#vim
/etc/sysctl.conf
//改变为ip_forward=1
#sysctl
-p
//生效下
5、此时测试两台机器能否 ping 通:
由里向外
[root@
l
vs~]#ping 172.20.0.222
PING 172.20.0.222 (172.20.0.222
)
56(84) bytes of data.
64 bytes from 172.20.0.222: icmp_seq=1 tt
l
=63 time=3.49 ms
64 bytes from 172.20.0.222: icmp_seq=2 tt
l
=63 time=1.07 ms
--- 172.20.0.222 ping statistics ---
2 packets transmitted, 2 received,
0
% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.076/2.287/3.498/1.211 ms
由外向里
[rootecentos6. Desktop
]#
ping 192 .168.30.7
PING 192.168.30.7 (192.168.30.7) 56(84) bytes of data.
64 bytes from 192.168.39.7: icmp_seq=1 tt
l
=63 tine=1.12
m
s
64 bytes from 192.168.30.7: icmp_seq=2 tt
l
=63 time=1.03 ms
^C
--- 192.168.30.7 ping statistics ---
2 packets transmitted. 2 received, 的packet loss
,
time 1566ms
rtt min/avg/max/mdev = 1. 030/1.079/1.129/0.059 ms
测试互 ping 成功
两台机器 ip 地址配好了未配网关,1
92.168.30.17
中#vie
0
添加网关G
ATEWAY=192.168.30.200
,#
service network restarts
。
同理1
92.168.30.27
添加网关G
ATEWAY=192.168.30.200
。
此时1
72.20.0.222
可成功ping通.27和.17,相互间网络联通。
6、解决 VIP 地址冲突
LVS-DR
◆DR模型中各主机上均需要配置 VIP ,解决地址冲突的方式有三种:
(1)在前端网关做静态绑定
(2)在各 RS 使用 arptables
(3)在各 RS 修改内核参数,来限制 arp 响应和通告的级别
◆限制响应级别: arp_ignore
0 :默认值,表示可使用本地任意接口,上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
◆限制通告级别: arp_ announce
0 :默认值,把本机所有接口的所有信息向每个接 C 的网络进行通告
1 :尽量避免将接口信息向非直接连接网络进行通告
2 :必须避免将接口信息向非本网络进行通告
7、下面开始 RS 相关配置:
RS 的 VIP 地址可以绑在网卡上,事实 VIP 一般不绑在物理网卡上而是回环网卡上,回环网卡意味着 lo 网卡,这个地址用于接收远程用户发请求,不会抛弃原拥有数据包,因此配置的时候比较特殊,
但是直接配 VIP 可能与原来 VIP 产生冲突,为了避免冲突要改两个内核参数,可locate找到内核文件,
又因为内存文件放不进locate,所以可以find /proc/sys |grep arp_ignore查找annouce或者ignore路径, 将 arp_ i gnore 配置成1只回答本地主机报文请求,
arp_ announce 配置成2不向外公布自身地址,如果是永久改还要写到conf文件里面,下面采用临时更改,
在回环网卡做IP地址配置,所以改lo,也可以为了更稳妥加个all,表示所有arp_ announce 都不对外公布自身地址,192.168.30.17配置如下:
#echo 1 > /proc/sys/net/ipv4/conf/
lo
/arp_ ignore
#echo 1 > /proc/sys/net/ ipv4/conf/a
ll
/arp_ ignore
#echo 2 > /proc/ sys/net /ipv4/conf/a
ll
/arp_ announce
#echo 2 > /proc/sys/net/ipv4/conf/
lo
/arp_ announce
#ip
a
a
192.168.30.7
/
32 dev lo
//32表示这个网络只有一台主机
#hostnamectl
set-hostname RS1
虚拟VIP配置完成,192.168.30.27中重复上述操作。
安装http服务:
#
yy
httpd
#echo RS 1>/var /www/htm
l
/index . htm
l
#sys
temctl start httpd
/
/
1
92.168.30.27
中重复上述操作。
此时在远程主机172.20.0.222上#curl 192.168.30.27和#curl 192.168.30.17成功访问:RS1,RS2,LVS访问不通RS1,2则不影响,因为真正中不可能在LVS中访问RS1,2,都是通过远程服务机上调度LVS进行访问RS1,RS2。
8、在LVS服务器配置调度策略:
192.168.30.7中配置
#yum
install ipvsadm
//安装工具
[root@lvs ~]#ipvsadm -A -t 192.168.30.7:80 -
s
rr
[root@lvs ~]#ipvsadm -a -t 192.168.30.7:80 -r 192 .168.30.17
//17后不用再定义端口号80,因为DR模型不支持端口映射,不写则是默认DR模型,-g
[ root@lvs~]#ipvsadm -a -t 192.168.30.7:80 -r 192.168 .30.27
[root@lvs ~]#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.30.7 :80 rr
-> 192.168.30.17 :80
Route
1 0 0
->192.168.30.27 :80 Route 1 0 0
在172.20.0.222中测试成功如下:
[root@client ~]#cur1 192.168.30.7
RS1
[root@client ~]#cur1 192.168.30.7
RS2
9、模型中LVS的物理网关
router上请求报文到LVS,回来时不走再走这条路,所以理论上GATEWAY没有意义。
如果把lvs网关盖掉:[root@
lvs
~]
#route
-
n
,然后[root@client ~]#cur1 192.168.30.7
,则一直可以循环访问RS1 ,RS2。再删掉[root@
lvs
~]
#route
del
default
gw
192.168.30.20
0,则立即停止访问。所以需要配置网关,
新配置网关如下:
[ root@lvs ~
]
#route add default gw 192.168.30.111
//环境不干净,client任无法访问
[ root@lvs ~
]
#
ipvsadm
-
save
-
n
>
f1
/
/save
存盘到f1
[ root@lvs ~
]
#
reboot
因为RS2还是之前的地址有冲突,放在eth0上,所以此时还未调用策略便已经对外发布出,开始只访问RS2,最好放在lo上。
[root@rs2 -]#ip ad del 192.168.30.7/24 dev eth0
[root@rs2 -]#ip ad add 192.168.30.7/32 dev
lo
[ root@rs2 -]#
i
p a
//可查看到成功加入inet 192.168.30.7/32
把规则重新加载到lvs:
[ root@lvs ~
]
#
i
pvsadm -Ln
[ root@lvs ~
]
#
i
pvsadm -restore < f1
[ root@lvs ~
]
#
i
p a
//因为机器重启所以没有vip地址
[ root@lvs ~
]
ip addr a 192.168.30.7/32 dev
lo
[ root@lvs ~
]
#route del default gw 192.168.30.200
//删掉原来的路由
[ root@lvs ~
]
#route add
default gw 192. 168.30.111
//增加新的路由
[ root@lvs ~
]
#
vie
0
//更改GATEWAY=192.168.30.111
[ root@lvs ~
]
#
sys
temctl restart network
[ root@lvs ~
]
#ip addr a 192.168.30.7/32 dev
lo
此时再次成功访问RS1,RS2。得知LVS物理网关需要配,因为
clientcip远程主机ip,访问LVS时没有网关会认为无法通信,但可以随便配。