虚拟机搭建LVS-DR集群
一.。必备知识
参考搭建 NAT模型 http://blog.csdn.net/liaomin416100569/article/details/73300692
二。概念解析
lvs官网 http://www.linuxvirtualserver.org/
lvs和nginx的区别在于 lvs是传输层(7层中第4层)的负载均衡 也就是ip和端口的负载均衡
nginx是应用层(7层中第7层) http协议的负载均衡 比如http协议中中的url ,浏览器缓存,cookie一些设置都可以在应用层 在第4层就
无法做到 明显 4层负载均衡效率高于7层负载均衡
lvs(linux virtual server)提供了三种集群方式
分别是:
- The LVS/NAT working principle and configuration instructions.
- The LVS/TUN working principle and configuration instructions.
- The LVS/DR working principle and configuration instructions.
Dr模型(Direct Routing)直接路由 用户负载均衡分发到RealServer NAT也是用于该目标
NAT模型所有的请求和响应都必须经过负载均衡服务器 一般响应的流量较大 请求的参数小 需要负载均衡器下载带宽无限大 负载均衡的目的在于均衡的将请求分发给目标RealServer不能因为下载的流量导致服务器带宽被占用完 DR模型 负载均衡器只需要将请求转发 RealServer响应不再经过均衡器直接
由RealServer响应给客户端 由于socket长连接 客户端与负载均衡器发送的请求和响应必须是相对的 如果实现RealServer直接响应 必须在RealServer响应
时将源ip修改为负载均衡器ip 同时RealServer可连接客户端 可以给RealServer一个虚拟ip 该ip和负载均衡器的外网ip一致 同时 ip不对外发送arp
三。场景模拟
DR模式要求所有的机器处于同一网络环境中 比如 客户端 负载均衡器 和RealServer都处于互联网中 要么同处于同一局域网中
负载均衡器 192.168.58.134(局域网ip DIP) 192.168.58.133(客户端访问VIP)
RealServer1 192.168.58.135(局域网ip RIP) 192.168.58.133(虚拟ip VIP)
RealServer2 192.168.58.136(局域网ip RIP) 192.168.58.133(虚拟ip VIP)
1.配置负载均衡器
》添加虚拟ip 192.168.58.133(eno16777736为物理网卡名 通过ifconfig查看)
ifconfig eno16777736:0 192.168.58.133/32 up
route add -host 192.168.58.133 dev eno16777736:0
》安装ipvsadm
yum -y install ipvsadm
#清空所有的路由规则
ipvsadm -C
#添加一个集群 192.168.58.133:80 必须是外网ip 也就是vip 因为别人才可以访问 rr表示轮询
ipvsadm -A -t 192.168.58.133:80 -s rr
#给集群添加一个主机 Rserver 192.168.58.135:80和192.168.58.136:80 这两台机各自部署一个tomcat -m表示nat模式 -g 表示dr模型
ipvsadm -a -t 192.168.58.133:80 -r 192.168.58.135:80 -g
ipvsadm -a -t 192.168.58.133:80 -r 192.168.58.136:80 -g
2 配置RealServer1和2
》虚拟ip的arp路由设置
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
》 添加虚拟ip
ifconfig lo:0192.168.58.133 broadcast192.168.58.133 netmask 255.255.255.255 up
route add -host 192.168.58.133 lo:0
RealServer分别安装两个tomcat 修改端口为80
访问 http://192.168.58.133 成功
查看转发或者realserver的运行检查 可以查看系统日志 /var/log/messages文件
四。lvs缺点
lvs使用负载算法 平均发布请求到realserver 但是不能进行健康检查 比如 rs1出现故障 director仍然会转发到rs1 所以必须结合keepalived
五。使用keepalived结合lvs检查rs故障
模拟场景
DServer1 192.168.58.134(局域网ip DIP) 192.168.58.133(客户端访问VIP) +keepalived +lvs
DServer2 192.168.58.137(局域网ip DIP) 192.168.58.133(客户端访问VIP) +keepalived
+lvs
RealServer1 192.168.58.135(局域网ip RIP) 192.168.58.133(虚拟ip VIP) +tomcat
RealServer2 192.168.58.136(局域网ip RIP) 192.168.58.133(虚拟ip VIP) +tomcat
两台Dserver 分别安装lvs负载均衡 并且安装使用keepalived
keepalived 功能
1:vip192.168.58.133 在主(Dserver1)和从(Dserver2)中漂移 如果主机Dserver1的lvs挂掉 vip自动切换给Dserver2
2:keepalived会自动检测 后台的realserver的tomcat是否挂掉 如果挂掉自动切换到其他tomcat
在两台Dserver上分别配置 keepalived的配置文件/etc/keepalived/keepalived.conf 具体可以先参考(http://blog.csdn.net/liaomin416100569/article/details/73477162 该文章了解 keepalived)
vrrp_instance LVS {
state MASTER #
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.58.133
}
}
virtual_server 192.168.58.133 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.58.135 80 {
weight 1
HTTP_GET {
url {
path /
digest aa150255da35870c218c9be8cea310f3
}
connect_timeout 3
nb_get_retry 3
connect_port 80
delay_before_retry 3
}
}
real_server 192.168.58.136 80 {
weight 1
HTTP_GET {
url {
path /
digest aa150255da35870c218c9be8cea310f3
}
connect_timeout 3
nb_get_retry 3
connect_port 80
delay_before_retry 3
}
}
}
其中 keepalived实际上通过访问 http://192.168.58.135:80/ 来测试tomcat是否正常运行 其中
digest可以预先通过
[root@bogon keepalived]# genhash -s 192.168.58.135 -p 80 -u /
MD5SUM = aa150255da35870c218c9be8cea310f3
生成
该keepalived 会指定在interface eno16777736指定的网络接口上生成虚拟ip 192.168.58.133
可以ip addr查看
[root@bogon keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:49:29:6c brd ff:ff:ff:ff:ff:ff
inet 192.168.58.134/24 brd 192.168.58.255 scope global dynamic eno16777736
valid_lft 1468sec preferred_lft 1468sec
inet 192.168.58.133/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe49:296c/64 scope link
valid_lft forever preferred_lft forever
同时 会自动在lvs中添加 dr的轮询rr (不需要自己添加)
[root@bogon keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.58.133:80 rr persistent 50
-> 192.168.58.135:80 Route 1 0 0
-> 192.168.58.136:80 Route 1 0 0
所有的realserver 配置同三。场景模拟 的 2 配置RealServer1和2
访问 http://192.168.58.133
关闭其中一台tomcat 看是否能够继续访问
关闭主lvs服务134看 看vip是否转移到 从服务器 137