1、简述lvs四种集群特色及使用场景html
本质是多目标IP的DNAT,经过将请求报文中的目标地址和目标端口修改成某挑出的RS的RIP和
PORT实现转发。
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS能够是任意OS系统前端
Direct Routing,直接路由,LVS默认模式,应用最普遍,经过为请求报文从新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。web
(1)Director和各RS都配置有VIPvim
(2)确保前端路由器将目标IP为VIP的请求报文发往Director
在前端网关作静态绑定VIP和Director的MAC地址
在RS上使用arptables工具后端
arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别centos
/proc/sys/net/ipv4/conf/all/arp_ignore /proc/sys/net/ipv4/conf/all/arp_announce
(3)RS的RIP可使用私网地址,也能够是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向
DIP,以确保响应报文不会经由Director服务器
(4)RS和Director要在同一个物理网络网络
(5)请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client负载均衡
(6)不支持端口映射(端口不能修败)curl
(7)RS可以使用大多数OS系统
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文以外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
(1)DIP, VIP, RIP能够是公网地址
(2)RS的网关通常不能指向DIP
(3)请求报文要经由Director,但响应不经由Director
(4)不支持端口映射
(5)RS的OS须支持隧道功能
经过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
注意:此类型kernel默认不支持,
(1)VIP是公网地址,RIP和DIP是私网地址,且一般不在同一IP网络;所以,RIP的网关通常不会指向
DIP
(2)RS收到的请求报文源地址是DIP,所以,只需响应给DIP;但Director还要将其发往Client
(3)请求和响应报文都经由Director
(4)相对NATi模式,能够更好的实现LVS-RealServer间跨VLAN通信
(5)支持端口映射
2、描述LVS-DR工做原理,并配置实现。
一、LVS-DR工做原理。
LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最普遍,经过为请求报文从新封装一个MAC首部
进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
二、LVS实验须要5台centos8主机。
分别须要客户机1台、路由主机1台、LVS主机1台、web服务器2台
三、配置各台主机网络,配置以下:
(1)client主机,eth0使用仅主机模式,网关指向路由主机eth1网卡
NAME="eth0" DEVICE="eth0" ONBOOT=yes BOOTPROTO=none IPADDR=192.168.0.8 GATEWAY=192.168.0.68 PREFIX=24 TYPE=Ethernet
(2)route主机,eth0使用nat模式,eth1使用仅主机模式,启用IP_FORWARD。
NAME="eth0" DEVICE="eth0" ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.68 PREFIX=24 TYPE=Ethernet NAME="eth1" DEVICE="eth1" ONBOOT=yes BOOTPROTO=none IPADDR=192.168.0.68 PREFIX=24 TYPE=Ethernet [root@route ~]#echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
(3)lvs主机,eth0使用nat模式,网关指向路由主机eth0网卡。
NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.78 PREFIX=24 GATEWAY=10.0.0.68 TYPE=Ethernet
(4)rs1主机,eth0使用nat模式,网关指向路由主机eth0网卡。
NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.88 PREFIX=24 GATEWAY10.0.0.68 TYPE=Ethernet
(5)rs2主机,eth0使用nat模式,网关指向路由主机eth0网卡。
NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.98 PREFIX=24 GATEWAY10.0.0.68 TYPE=Ethernet
四、rs1和rs2配置内核参数和vip,要先修改内核参数再添加地址,两台都要执行。
[root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@rs1 ~]#ifconfig lo:1 10.0.0.100 netmask 255.255.255.255 #永久保存内核参数须要把下面4行添加到/etc/sysctl.conf里 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 [root@rs1 ~]#sysctl -p #lo网卡地址保存须要设置ifconfig命令开机时执行 [root@rs1 ~]#echo "ifconfig lo:1 10.0.0.100 netmask 255.255.255.255" >> /etc/rc.d/rc.local [root@rs1 ~]#chmod +x /etc/rc.d/rc.local
五、rs1和rs2安装httpd服务,设为开机启动。
[root@rs1 ~]#yum install -y httpd ; systemctl enable --now httpd
六、rs1和rs2添加不一样的index.html,以便检测效果。
[root@rs1 ~]#echo rs1 /var/www/html/index.html [root@rs2 ~]#echo rs2 /var/www/html/index.html
七、lvs主机添加vip,安装ipvsadm软件包。
[root@lvs ~]#ifconfig eth0:1 10.0.0.100 netmask 255.255.255.255 [root@lvs ~]#yum install -y ipvsadm
八、lvs主机设置DR规则。
[root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 -s rr [root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.88:80 -g [root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.98:80 -g [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 10.0.0.100:80 rr -> 10.0.0.88:80 Route 1 0 0 -> 10.0.0.98:80 Route 1 0 0
九、测试客户端访问,已实现负载均衡。
[root@centos08 ~]#curl 10.0.0.100 rs1 [root@centos08 ~]#curl 10.0.0.100 rs2 [root@centos08 ~]#curl 10.0.0.100 rs1 [root@centos08 ~]#curl 10.0.0.100 rs2
十、持久化保存lvs的规则,先手动保存一次,ipvsadm服务设为开机启动便可自动保存和加载lvs规则。
[root@lvs ~]#ipvsadm -S >/etc/sysconfig/ipvsadm [root@lvs ~]#systemctl enable --now ipvsadm.service Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.
3、实现LVS+Keepalived高可用。
一、本实验在上例的基础上完成,client、rs一、rs2不变,原lvs服务器安装Keepalived软件包做为主服务器,增长备份LVS+Keepalived服务器一台和sorry server服务器一台。
二、新增服务器网卡配置。
#备LVS+Keepalived服务器网卡配置 NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.58 PREFIX=24 GATEWAY=10.0.0.68 TYPE=Ethernet #sorry server主机网卡配置 NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.77 PREFIX=24 GATEWAY10.0.0.68 TYPE=Ethernet
三、sorry server服务器参照rs1服务器的方法配置内核参数,在lo网卡上添加vip,安装httpd,设置index页面。
[root@sorry ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@sorry ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@sorry ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@sorry ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@sorry ~]#ifconfig lo:1 10.0.0.100 netmask 255.255.255.255 [root@sorry ~]#yum install -y httpd [root@sorry ~]#systemctl enable --now httpd [root@sorry ~]#echo sorry >/var/www/html/index.html
四、主备两台LVS+Keepalived服务器安装ipvsadm和Keepalived,启动服务,要保证版本一致。
[root@lvs1 ~]#yum install -y keepalived [root@lvs1 ~]#systemctl enable --now keepalived.service Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service. [root@lvs2 ~]#yum install keepalived [root@lvs2 ~]#systemctl enable --now keepalived.service Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service. [root@lvs2 ~]#yum install -y ipvsadm
五、修改主服务器Keepalived配置文件,重启服务。
[root@lvs1 ~]#vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER #MASTER表明主服务器 interface eth0 #设置vip所在的网卡,不要使用lo网卡 virtual_router_id 51 #这个数值要和备服务器一致 priority 100 #这个数值要比备服务器大 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { #vip 10.0.0.100 } } virtual_server 10.0.0.100 80 { #vip delay_loop 6 lb_algo rr lb_kind DR #DR模式 protocol TCP sorry_server 10.0.0.77 80 #sorry server dip real_server 10.0.0.88 80 { #rs1 dip weight 1 TCP_CHECK { connect_timeout 5 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.98 80 { #rs2 dip weight 1 TCP_CHECK { connect_timeout 5 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } [root@lvs1 ~]#systemctl restart keepalived.service
六、复制主LVS+Keepalived服务器配置文件到备服务器,修改部份内容,重启服务。
#修改下里两行,其余不变 [root@lvs1 ~]#vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state BAKCKUP #MASTER改成BACKUP priority 50 #这个数值比主服务器的小便可 [root@lvs2 ~]#systemctl restart keepalived.service
七、主服务器故障后,vip地址能够自动飘动到备服务器,主服务器恢复后vip地址自动回到主服务器,期间不影响用户访问。
[root@lvs1 ~]#hostname -I 10.0.0.78 10.0.0.100 [root@lvs1 ~]#systemctl stop keepalived.service #中止服务后lvs1的vip地址消失 [root@lvs1 ~]#hostname -I 10.0.0.78 #lvs2出现vip地址 [root@lvs2 ~]#hostname -I 10.0.0.58 [root@lvs2 ~]#hostname -I 10.0.0.58 10.0.0.100
八、后端rs1和rs2其中一台故障后,会被Keepalived检测到,自动不转发请求到该服务器,后端两台所有故障后可显示sorry derver页面提示用户,后端服务器恢复后便可正常访问。
[root@centos08 ~]#curl 10.0.0.100 rs1 [root@centos08 ~]#curl 10.0.0.100 rs2 [root@centos08 ~]#curl 10.0.0.100 rs2 [root@centos08 ~]#curl 10.0.0.100 rs2 [root@centos08 ~]#curl 10.0.0.100 sorry [root@centos08 ~]#curl 10.0.0.100 rs1 [root@centos08 ~]#curl 10.0.0.100 rs2