LVS/NAT:网络地址转换方式
1、客户端请求数据,目标IP为VIP
2、请求数据达到LB负载均衡服务器,LB根据自己的调度算法将目的地址修改为RIP地址及对应端口,并连接HASH表中记录下这个连接
3、数据报从LB负载均衡服务器到达RS服务器RS3
4、然后RS3进行响应。RS3的网关必须是LB负载均衡服务器的内网IP也就是DIP,然后将数据返回给LB服务器
5、LB收到RS的返回后的数据,根据连接HASH表修改源地址VIP和目的地址DIP
缺点:NAT模式中请求的报文和响应报文都需要通过LB负载均衡服务器,造成LB负载均衡服务器的IO大量增加,
优点:NAT模式中只需要给LB负载均衡服务器配置一个公网IP地址,但是RS服务器得跟LB负载均衡服务器在同一个内网
LVS/TUN:隧道方式
工作方式不再是变换地址了,而是将请求包作为数据报进行打包,发给WS服务器,WS服务器进行两次解包,再以此次响应数据包打包直接返回客户端,不再通过LB负载均衡服务器,解决了WS服务器跟LB负载均衡服务器必须在一个内网中的问题,且效率有所提高。
LVS/DR:直接路由方式
1、DR模式将报文直接路由给目标LB负载均衡服务器
2、LB负载均衡服务器根据各个真实服务器的负载情况,连接数多少等,动态选在一台服务器,不修改目标IP和目标端口,不封装IP报文,而是将请求报文的数据帧的目标MAC改为真实服务器的MAC地址
3、然后将修改后的数据帧在服务器组的局域网上发送。因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一局域网。那么根据局域网的通信原理,真实服务器一定能够收到由LB发出的数据报。真实服务器接收到请求数据包时,解开包头发现目标IP是VIP不是自己的(需要将WS服务器的本地回环接口上面配置为VIP,且为了防止ARP响应冲突,需要将WS服务器VIP的lo接口上的ARP响应关闭掉,这里使用arptables)
4、然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据报发回给客户
实现DR模式的LVs
首先在node01上运行:
ifconfig eth0:3 192.168.88.60/24
echo "1" > /proc/sys/net/ipv4/ip_forward
防止mac不对,但是IP地址正确的情况下,将数据报错误的扔掉。
yum install ipvsadm -y
在node2 和node 3都需要进行一下操作:
ifconfig lo:8 192.168.88.60 netmask 255.255.255.255
cd /proc/sys/net/ipv4/conf/eth0/
对arp_ignore和arp_announce文件修改,让虚拟机接收mac地址为自己的数据报
echo 2 > arp_announce
echo 1 > arp_ignore
cd /proc/sys/net/ipv4/conf/all
echo 1 > arp_ignore
echo 2 > arp_announce
安装httpd
yum install httpd -y
在/var/www/html 下创建有标志的文件
service httpd start
在node1上运行:
ipvsadm -A -t 192.168.88.60:80 -s rr
ipvsadm -a -t 192.168.88.60:80 -r 192.168.88.62 -g
ipvsadm -a -t 192.168.88.60:80 -r 192.168.88.63 -g
ipvsadm 参数详解:
-C 清除表中所有的记录
-A --add-service在服务器列表中新添加一条新的虚拟服务器记录
-t 表示为tcp服务
-u 表示为udp服务
-s --scheduler 使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
ipvsadm -A -t 192.168.20.100:80 -s rr
-a --add-server 在服务器表中添加一条新的真实主机记录
-t --tcp-service 说明虚拟服务器提供tcp服务
-u --udp-service 说明虚拟服务器提供udp服务
-r --real-server 真实服务器地址
-m --masquerading 指定LVS工作模式为NAT模式
-w --weight 真实服务器的权值
-g --gatewaying 指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ipip 指定LVS的工作模式为隧道模式
-p 会话保持时间,定义流量呗转到同一个realserver的会话存留时间
ipvsadm -a -t 192.168.20.100:80 -r 192.168.20.102 -g
即可通过访问node1来调度到node2或node3
——————————————————当node1宕机的时候整个集群将无法使用,所以引用keepalived来确保node1宕机后有结点机来替换——————————————————
在node1上运行:
ifconfig eth0:3 down
ipvsadm -C
yum install keepalived -y
在node4上运行:
yum install keepalived ipvsadm -y
在node1上打开/etc/keepalived/keepalived.conf文件
将virtual_ipaddress改为
virtual_ipaddress {
#label相当于给网卡eth0起别名eth0:3
192.168.88.60/24 dev eth0 label eth0:3
}
virtual service改为:
virtual_server 192.168.88.60 80 {
delay_loop 6
real_server 192.168.88.62 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.88.63 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
修改完之后输入scp keepalived.conf node4:`pwd` 将文件传给node4
最后打开keepalived服务即可