两台机器
192.168.88.47
192.168.88.48
192.168.88.40(要设置的虚IP)
查看ip
ifconfig
两台机器分别执行
ifconfig ens33:0 192.168.88.40 netmask 255.255.255.0 up
然后可以ping,关掉任一一个机器都还可以访问
写在/etc/rc.local里也可以,写在这里就不怕断电后机器无法正常使用了。
重启,再查看
附:
lvs+nginx负载均衡
参考:
https://blog.csdn.net/qq9808/article/details/84553632
https://www.cnblogs.com/arjenlee/p/9262737.html
1:DS:Director Server。虚拟服务,负责调度 2:RS:Real Server。后端真实的工作服务器。 3:VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址 4:DIP:Director Server IP,DS的IP 5:RIP:Real Server IP,后端服务器的IP地址 6:CIP:Client IP,访问客户端的IP地址
准备三台机器
DS:192.168.66.49 RS:192.168.66.41 nginx RS:192.168.66.42 nginx vip:192.168.66.40
负载均衡服务器(director)配置 DS:192.168.66.49
执行脚本
#!/bin/bash vip=192.168.66.40 rs1=192.168.66.41 rs2=192.168.66.42 netName=ens160 #set virttual ip address /sbin/ifconfig $netName:0 $vip broadcast $vip netmask 255.255.255.255 up /sbin/route add -host $vip dev $netName:0 #clear ipvs tables /sbin/ipvsadm -C #set LVS Server /sbin/ipvsadm -A -t $vip:80 -s rr /sbin/ipvsadm -a -t $vip:80 -r $rs1:80 -g /sbin/ipvsadm -a -t $vip:80 -r $rs2:80 -g #run lvs /sbin/ipvsadm # update /etc/sysctl.conf #echo "0" >/proc/sys/net/ipv4/ip_forward #echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects #echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects #echo "1" >/proc/sys/net/ipv4/conf/eht0/send_redirects #/sbin/sysctl -p
真实服务器 (real server)配置: RS:192.168.66.41/RS:192.168.66.42
分别执行脚本
#!/bin/bash vip=192.168.66.40 /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up /sbin/route add -host $vip dev lo:0 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 /sbin/sysctl -p
192.168.66.41
192.168.66.42
轮询结果
附:
#删除虚拟ip命令 ip addr del 192.168.66.40 dev ens160:0 #路由列表查询 netstat -rn ip route
附录 lvs参数简介 部分参数如下:man ipvsadm可以全部看到。 -A, --add-service Add a virtual service -E, --edit-service Edit a virtual service -D, --delete-service Delete a virtual service -C, --clear Clear the virtual server table. -R, --restore -S, --save -a, --add-server Add a real server to a virtual service -e, --edit-server Edit a real server in a virtual service -d, --delete-server Remove a real server from a virtual service -L, -l, --list List the virtual server table if no argument is specified -t, --tcp-service Use TCP service. -u, --udp-service Use UDP service -s 指定服务采用的算法,常用的算法参数如下: rr 轮叫(Round Robin) 调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务 器,而不管服务器上实际的连接数和系统负载。 wrr 加权轮叫(Weighted Round Robin) 调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。 lc 最少链接(Least Connections) 调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。 wlc 加权最少链接(Weighted Least Connections) 在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。 lblc 基于局部性的最少链接(Locality-Based Least Connections) "基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。 lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication) "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。 dh 目标地址散列(Destination Hashing) "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。 sh 源地址散列(Source Hashing) "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。 -a 表示往一个服务内增加一个real server -r 指定real server的IP地址 -w 表示权重 -g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。
附:
keepalived + 双LVS 热备
参考:https://segmentfault.com/a/1190000016294818
DS1:192.168.66.48 DS2:192.168.66.49
RS:192.168.66.41 nginx
RS:192.168.66.42 nginx
DS服务的安装参照上面
安装Keepalived
参考:https://blog.csdn.net/lili_lady/article/details/106856309
1.安装依赖
sudo apt-get install libssl-dev sudo apt-get install openssl sudo apt-get install libpopt-dev sudo apt-get install keepalived
文件 | 说明 |
---|---|
/usr/sbin/keepalived | 二进制程序 |
/etc/keepalived/keepalived.conf | 配置文件 |
/usr/lib/systemd/system/keepalived.service | 服务文件 |
修改主lvs下/etc/keepalived/keepalived.conf文件
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL1
}
vrrp_instance VI_1 {
state MASTER # 标示为主lvs
interface ens160 # HA检测端口 实际网卡对应上
virtual_router_id 51 # 主备的virtual_router_id 必须相同
priority 100 # 优先级,备lvs要比主lvs稍小
advert_int 1 # VRRP Multicast 广播周期秒数
authentication { # 定义认证
auth_type PASS # 认证方式为口令认证
auth_pass 1111 # 定义口令
}
virtual_ipaddress { # 定义vip
192.168.66.40 # 多个vip可换行添加
}
}
virtual_server 192.168.66.40 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.66.41 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.66.42 80 {
weight 3
TCP_CHECK {
connect_timeout 3
}
}
}
修改从lvs下/etc/keepalived/keepalived.conf文件
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL2 #两边不一样
}
vrrp_instance VI_1 {
state BACKUP # 标示为备lvs
interface ens160 # HA检测端口 跟实际网卡对应上
virtual_router_id 51 # 主备的virtual_router_id 必须相同
priority 99 # 优先级,备lvs要比主lvs稍小
advert_int 1 # VRRP Multicast 广播周期秒数
authentication { # 定义认证
auth_type PASS # 认证方式为口令认证
auth_pass 1111 # 定义口令
}
virtual_ipaddress { # 定义vip
192.168.66.40 # 多个vip可换行添加
}
}
virtual_server 192.168.66.40 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.66.41 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.66.42 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
设置成启动服务
# systemctl enable keepalived # systemctl start keepalived # reboot
按照如下步骤执行
两台ds分别执行脚本
#!/bin/bash vip=192.168.66.40 rs1=192.168.66.41 rs2=192.168.66.42 netName=ens160 #set virttual ip address /sbin/ifconfig $netName:0 $vip broadcast $vip netmask 255.255.255.255 up /sbin/route add -host $vip dev $netName:0 #clear ipvs tables /sbin/ipvsadm -C #set LVS Server /sbin/ipvsadm -A -t $vip:80 -s rr /sbin/ipvsadm -a -t $vip:80 -r $rs1:80 -g /sbin/ipvsadm -a -t $vip:80 -r $rs2:80 -g #run lvs /sbin/ipvsadm # update /etc/sysctl.conf #echo "0" >/proc/sys/net/ipv4/ip_forward #echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects #echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects #echo "1" >/proc/sys/net/ipv4/conf/eht0/send_redirects #/sbin/sysctl -p
两台rs分别执行脚本
#!/bin/bash vip=192.168.66.40 /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up /sbin/route add -host $vip dev lo:0 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 /sbin/sysctl -p
然后重启两台ds的keepalived
systemctl restart keepalived
测试
1)观察lvs路由条目 master上查询 # ipvsadm -L 2)观察vip地址在哪台机器上 master上查询 # ip a 3)客户端浏览器访问vip 192.168.66.40 4)关闭master上的keepalived服务,再次访问vip 5)关闭web1站点服务,再次访问VIP
附:Keepalived 配置文件
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc #设置报警邮件地址,可以设置多个,每行一个。 failover@firewall.loc #需开启本机的sendmail服务 sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc #设置邮件的发送地址 smtp_server 127.0.0.1 #设置smtp server地址 smtp_connect_timeout 30 #设置连接smtp server的超时时间 router_id LVS_DEVEL #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息 } vrrp_instance VI_1 { state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器 interface eno16777736 #指定HA监测网络的接口 virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的 priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级 advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置验证类型和密码 auth_type PASS #设置验证类型,主要有PASS和AH两种 auth_pass 1111 #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信 } virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个 192.168.244.10 } } virtual_server 192.168.244.10 8066 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开 delay_loop 6 #设置运行情况检查时间,单位是秒 lb_algo rr #设置负载调度算法,这里设置为rr,即轮询算法 lb_kind DR #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选 nat_mask 255.255.255.0 persistence_timeout 50 #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。 #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。 #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作 #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制 protocol TCP #指定转发协议类型,有TCP和UDP两种 real_server 192.168.244.148 8066 { #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开 weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器 #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源 TCP_CHECK { #realserver的状态检测设置部分,单位是秒 connect_timeout 3 #表示3秒无响应超时 nb_get_retry 3 #表示重试次数 delay_before_retry 3 #表示重试间隔 connect_port 8066 } } real_server 192.168.244.149 8066 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 8066 } } }