LVS搭建Nginx集群 准备工作 环境说明 共需要三台linux centos服务器,一台LVS,两台RealServer,端口号必须保持一致,设为80,所以需要3台服务器。
设定IP环境如下
服务名
IP
端口
作用
LVS-Director
VIP 192.168.120.200 RIP 192.168.120.58
80
运行LVS均衡调度,对外提供虚拟IP访问
RealServer-Nginx1
192.168.120.83
80
运行nginx及tomcat服务,作为真实服务 1
RealServer-Nginx2
192.168.120.58
80
运行nginx及tomcat服务,作为真实服务 2
LVS-Director负责将80端口的请求,负载均衡到Nginx1、Nginx2两台真实服务器上去,接下来我们将进行配置LVS-Director的路由方式-DR,直接路由。 准备IP地址信息打印程序balancer-1.0.0.jar,http://hostname:port/server/ip,打印服务器的IP端口号信息。
启动RealServer服务 安装步骤,参考前面Nginx的手册来操作,将Nginx分别安装在前面准备的两台linux服务器上。
启动Nginx,都为80端口,代理balancer-1.0.0.jar服务。
balancer-1.0.0.jar的端口号,分别为8081
操作192.168.120.83、192.168.120.58
1 java -jar balancer-1.0.0.jar --server.port=8081 cd /usr/local/nginx sudo ./nginx -c conf/nginx_lvs_upstream.conf
nginx_lvs_upstream.conf配置内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type text/html; sendfile on; keepalive_timeout 65; upstream backend { server 127.0.0.1:8081; } server { location / { proxy_pass http://backend; } } }
测试各个端口的服务是否可用,http://hostname:port/server/ip
安装LVS LVS全称为Linux Virtual Server,工作在ISO模型中的第四层,由于其工作在第四层,因此与 iptables类似,必须工作在内核空间上。 因此lvs与iptables一样,是直接工作在内核中的,叫ipvs,主 流的linux发行版默认都已经集成了ipvs,因此用户只需安装一个管理工具ipvsadm即可。 LVS现在已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。以下操作可以手动加载 ip_vs模块,并查看当前系统中ip_vs模块的版本信息
加载LVS 1 2 3 4 5 6 7 # 通过下面命令来检查,如果没有显示,则说明没有加载 lsmod |grep ip_vs ip_vs 145497 0 # 加载LVS,执行下面命令就可以把ip_vs模块加载到内核 # 或者如果是centos7,通过ipvsadm来加载,可以跳过这步 sudo modprobe ip_vs # 查看LVS版本号,说明安装成功 cat /proc/net/ip_vs IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
IPVS管理工具ipvsadm ipvsadm是lvs的管理工具,我们在使用ipvs的时候需要使用到这个工具。
安装依赖 1 sudo yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt*
安装ipvsadm 1 2 3 4 5 6 7 8 9 10 11 12 13 14 curl "http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz" -o ipvsadm-1.26.tar.gz tar zxf ipvsadm-1.26.tar.gz cd ipvsadm-1.26 rpm -qa | grep kernel-devel # 确认是否安装了kernel-devel(默认已经安装) sudo make && sudo make install curl "http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.25- 1.src.rpm" -o ipvsadm-1.25-1.src.rpm sudo rpm -ivh ipvsadm-1.25-1.src.rpm # 检查是否安装成功,显示下面的内容表示安装成功 sudo ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
LVS DR模式 DR模式是LVS三种实现负载均衡方式中性能最好的一个,下面就使用这个模式,配置Nginx负载均衡的实现。
LVS服务配置 编辑lvs文件
1 sudo vim /usr/local/sbin/lvs_dr.sh
输入下面内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/sbin/ipvsadm vip=192.168.120.200 ifconfig enp0s3:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev enp0s3:0 $ipv -C $ipv -A -t $vip :80 -s rr rs1=192.168.120.103 rs2=192.168.120.58 $ipv -a -t $vip :80 -r $rs1 :80 -g $ipv -a -t $vip :80 -r $rs2 :80 -g $ipv --set 1 2 1
使配置生效
1 2 3 sudo sh /usr/local/sbin/lvs_dr.sh sudo ipvsadm # 查看虚拟服务端口转发列表 sudo ipvsadm -ln
可能出现的错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 0、SIOCSIFFLAGS: 无法指定被请求的地址 没有对应的enp0s3:0网卡ip,本来就没有,可以忽略。运行脚本后enp0s3:0正常出现就没有问题。 1、没有轮询效果 一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟 sudo ipvsadm -L --timeout # 查看timeout配置信息 可以设置短一点,达到实验效果: sudo ipvsadm --set 1 2 1 注: 保存添加的虚拟ip记录和ipvsadm的规则可以使用service ipvsadm save,还可以用-S或-- save。清除所有记录和规则除了使用-C,还以使用--clear 2、错误:Memory allocation problem 查看一下vmlloc使用情况: cat /proc/meminfo | grep -i vmalloc 在/etc/default/grub文件的末尾添加如下一行: GRUB_CMDLINE_LINUX="vmalloc=256MB" 完成上述操作之后,发现lvs状态仍然是SYN_RECV。 3、lvs状态仍然是SYN_RECV 抓包后的pcap文件中,没有syn ack。于是想到是不是在什么地方丢掉了。 看到官方文档中有描述要设置re_ filter。 查了一下这个参数的解释 ====================================== rp_filter参数有三个值,0、1、2,具体含义: 0:不开启源地址校验。 1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最 佳路径,则直接丢弃该数据包。 2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任 意网口),如果反向路径不同,则直接丢弃该数据包。 ======================================= default的值是1,这里改为2 echo 2 > /proc/sys/net/ipv4/conf/ 网卡名/rp_filter echo 2 > /proc/sys/net/ipv4/conf/ 网卡名/rp_filter systemctl restart network.service 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
ipvsadm操作说明
1 2 3 4 5 6 7 8 9 10 11 12 13 sudo ipvsadm -C 清除 说明: -A --add-service在服务器列表中新添加一条新的虚拟服务器记录 -t 表示为tcp服务 -u 表示为udp服务 -s --scheduler 使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc -a --add-server 在服务器表中添加一条新的真实主机记录 -r --real-server 真实服务器地址 -m --masquerading 指定LVS工作模式为NAT模式 -w --weight 真实服务器的权值 -g --gatewaying 指定LVS工作模式为直接路由器模式(也是LVS默认的模式) -i --ipip 指定LVS的工作模式为隧道模式 sudo ipvsadm -help 可以查看更多的帮助信息
真实服务配置 在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,响应数据是直接返回给用户的,而不再
经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才
能直接返回给用户。
2台服务都需要配置相同的内容 ,2台真实web服务器的配置信息,编辑lvs_dr_rs.sh文件
1 sudo vim /usr/local/sbin/lvs_dr_rs.sh
输入内容
1 2 3 4 5 6 7 8 9 10 # ! /bin/bash vip=192.168.120.200 ifconfig enp0s3:0 $vip broadcast $vip netmask 255.255.255.255 up # 使用回环网卡适配器 route add -host $vip lo:0 # 关闭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
关闭arp解析
arp_ignore:当ARP请求发过来后发现自己正是请求的地址是否响应;
1 2 0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求; 1 - 哪个接口上接受ARP请求,就从哪个端口上回应。
arp_announce :定义不同级别,当ARP请求通过某个端口进来是否利用这个接口来回应。
1 2 3 0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求; 1 - 避免使用另外一个接口上的mac地址去响应ARP请求; 2 - 尽可能使用能够匹配到ARP请求的最佳地址。
使配置生效
1 2 sudo sh /usr/local/sbin/lvs_dr_rs.sh sudo sysctl -p
查看日志
LVS的日志是通过syslog来输出的,通过下面的命令就能查看最新日志输出,方便我们查看错误信息
1 sudo tail -f /var/log/messages
检查是否生效
多出enp0s3:0:虚拟网卡
1 2 3 4 ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.120.127 netmask 255.255.255.0 broadcast 192.168.120.255 inet6 fe80::370a:a3ea:20d0:69e3 prefixlen 64 scopeid 0x20<link > ether 08:00:27:f1:e3:c4 txqueuelen 1000 (Ethernet) RX packets 123143 bytes 129065693 (123.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 28035 bytes 2598163 (2.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 88 bytes 9145 (8.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.100.200 netmask 255.255.255.255 loop txqueuelen 1000 (Local Loopback)
可能出现的错误 不能telnet端口
现象描述 VIP能ping桶,但是VIP对应的端口号telnet不通
解决方法
确认真实服务器VIP是否一致
真实服务器与LVS-Director的端口号必须相同
测试Nginx集群效果 在浏览器输入访问
1 http://192.168.120.200:8080/server/ip
如果你发现IP地址在变化,恭喜你,成功了!
封装成shell脚本 LVS-Director脚本 见附件《lvs_dr.sh》shell脚本,在LVS-DR机器上我们只需要执行lvs_dr.sh脚本即可
使用方法
1 2 3 4 5 6 7 8 9 10 11 sudo sh lvs_dr.sh --help Usage: lvs_dr.sh {start ¦ stop} Usage: lvs_dr.sh start vip vip_port "real_server_ips..." virtual_net_card Usage: lvs_dr.sh stop virtual_net_card \# 启动,指定虚拟ip、真实服务ip、虚拟网卡 sudo sh lvs_dr.sh start 192.168.120.200 80 "192.168.120.83 192.168.120.58" enp0s3:0 \# 停止 sudo sh lvs_rs.sh stop enp0s3:0
RealServer脚本 见附件《lvs_rs.sh》shell脚本,在RealServer机器上我们只需要执行lvs_rs.sh脚本即可
使用方法
1 2 3 4 5 6 7 8 9 10 sh lvs_rs.sh --help Usage: lvs_rs.sh {start ¦ stop} Usage: lvs_rs.sh start vip loopback Usage: lvs_rs.sh stop loopback \# 启动,指定虚拟ip、虚拟网卡 sudo sh lvs_rs.sh start 192.168.120.200 lo:0 \# 停止 sudo sh lvs_rs.sh stop lo:0
window下编写的shell脚本,在linux下运行有 $’\r’: 未找到命令 的错误,是因为编码格式问题,通过
dos2unix来解决。
1 2 sudo yum install -y dos2unix sudo dos2unix lvs_rs.sh
Keepalived保证应用高可用 搭建Nginx高可用 环境准备 共需要两台linux centos服务器,一台作为Nginx Master,一台作为Nginx Backup。两台服务器上都需要安装Keepalived,通过Keepalived来开启虚拟端口,以及保证Nginx高可用。
服务名
IP
端口
作用
Nginx-Master Keepalived-Master
RIP 192.168.120.58 VIP 192.168.120.200
80
运行LVS均衡调度,对外提供虚拟IP访问
Nginx-Backup Keepalived-Backup
RIP 192.168.120.83 VIP192.168.120.200
80
运行nginx及tomcat服务,作为真实服务1
Keepalived不仅仅保证LVS高可用,也能保证其他应用高可用,比如tomcat、Nginx、甚至RPC服务。 我们需要三份配置文件(一个nginx_monitor监控脚本,主备LVS各一份keepalived配置)
Nginx监控脚本 在监控脚本中,通过ps命令来不停的探测nginx进程是否存在,来判断nginx是否还可用。编辑 nginx_monitor.sh文件
1 sudo vim /etc/keepalived/nginx_monitor.sh
脚本内容
1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash if [ "$(ps -ef | grep "nginx" | grep -v grep| grep -v keepalived ) " == "" ] then echo "nginx ############# app down " >> /var/log/messages exit 1 else exit 0 fi
执行脚本
1 2 3 4 5 sudo chmod +x /etc/keepalived/nginx_monitor.sh sh /etc/keepalived/nginx_monitor.sh
安装Keepalived 在两台Nginx服务上安装Keepalived 2.0.18版本
安装依赖
1 sudo yum install -y openssl-devel popt-devel libnl-devel kernel-devel gcc
安装Keepalived
1 2 3 4 5 6 7 8 cd ~ wget https://www.keepalived.org/software/keepalived-2.0.18.tar.gz tar -xvzf keepalived-2.0.18.tar.gz cd keepalived-2.0.18 ./configure --prefix=/usr/local/keepalived --sysconf=/etc sudo make & sudo make install
安装成功后,配置放在/etc/keepalived/目录中。
Keepalived配置 1 2 3 4 # - master主机 keepalived-nginx-master.conf # - backup备机 keepalived-nginx-backup.conf
Nginx-Master配置
文件内容,参考课件资料keepalived-lvs-master.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 # 定义一个名为monitor的脚本 vrrp_script monitor { # 监控脚本存放地址 script "/etc/keepalived/nginx_monitor.sh" # 每隔1秒执行一次 interval 1 } # 定义一个vrrp示例 vrrp_instance VI_1 { state MASTER #(主机为MASTER,备用机为BACKUP) interface enp0s3 #(HA监测网卡接口) virtual_router_id 61 #(主、备机的virtual_router_id必须相同,不大于255) priority 90 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高) advert_int 1 #(VRRP Multicast广播周期秒数) track_script { monitor #(监控脚本名称) } virtual_ipaddress { 192.168.120.200 #(VRRP HA虚拟IP) } }
Nginx-Backup配置
/etc/keepalived/keepalived-nginx-backup.conf
\
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 # 定义一个名为monitor的脚本 vrrp_script monitor { \# 监控nginx的脚本存放地址 script "/etc/keepalived/nginx_monitor.sh" \# 每隔1秒执行一次 interval 1 } \# 定义一个vrrp示例 vrrp_instance VI_1 { state BACKUP #(主机为MASTER,备用机为BACKUP) interface enp0s3 #(HA监测网卡接口) virtual_router_id 61 #(主、备机的virtual_router_id必须相同) priority 80 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高) advert_int 1 #(VRRP Multicast广播周期秒数) track_script { monitor #(监控脚本名称) } virtual_ipaddress { 192.168.120.200 #(VRRP HA虚拟IP) } }
启动服务 启动Keepalived 1 2 3 4 5 6 7 8 9 10 11 # 启动master主机 sudo /usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived-nginx- master.conf \# 启动backup备机 sudo /usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived-nginx- backup.conf
查看日志
Keepalived和LVS的日志是通过syslog来输出的,通过下面的命令就能查看最新日志输出,方便我们查
看错误信息
1 2 3 4 5 6 7 8 9 10 11 sudo tail -f /var/log/messages ... nginx ############# app down nginx ############# app down nginx ############# app down ...
可以看到nginx服务还没有启动
启动两台Nginx服务
1 2 3 4 5 6 7 8 9 10 11 Master-Nginx的日志输出 Oct 8 15:43:23 localhost Keepalived_vrrp[4127]: Script `monitor` now returning 0 Oct 8 15:43:23 localhost Keepalived_vrrp[4127]: VRRP_Script(monitor) succeeded Oct 8 15:43:23 localhost Keepalived_vrrp[4127]: (VI_1) Entering BACKUP STATE Oct 8 15:43:26 localhost Keepalived_vrrp[4127]: (VI_1) Entering MASTER STATE
注意事项 两台keepalived服务间需要通信,关闭防火墙
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running) systemctl list-unit-files|grep firewalld.service systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 [root@localhost ~]#systemctl stop firewalld.service [root@localhost ~]#systemctl disable firewalld.service 启动一个服务:systemctl start firewalld.service 关闭一个服务:systemctl stop firewalld.service 重启一个服务:systemctl restart firewalld.service 显示一个服务的状态:systemctl status firewalld.service 在开机时启用一个服务:systemctl enable firewalld.service 在开机时禁用一个服务:systemctl disable firewalld.service 查看服务是否开机启动:systemctl is-enabled firewalld.service;echo $? 查看已启动的服务列表:systemctl list-unit-files|grep enabled
测试 关闭master nginx服务,服务是否仍然可用,backup服务是否替补上来。
1 2 3 4 5 6 7 8 9 ps -ef|grep nginx root 5189 1 0 22:01 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx_lvs_upstream.conf nginx 5190 5189 0 22:01 ? 00:00:00 nginx: worker process sudo kill 5189
1 2 3 4 5 \1. 关掉备机,功能完全不受影响。 \2. 关掉主机,虚拟IP漂移到备机,备机开始工作。 \3. 关掉主机nginx,主机监控到无nginx后,自动切换
搭建LVS高可用 只有一台LVS服务,万一挂了怎么办?需要Keepalived来做高可用,准备两台linux服务器,用来安装两
台keepalived,Keepalived安装过程如下。
准备工作 做LVS高可用,我们需要准备四台服务器
服务环境设定 共需要四台服务器,两台LVS,两台RealServer,端口号必须保持一致,设为****80 ,所以需要4台服务器。
设定IP环境如下
服务名
IP
端 口
作用
LVS-Master Keepalived-Master
VIP 192.168.120.200 RIP 192.168.120.127
80
主LVS,对外提供虚拟IP访问
LVS-Backup Keepalived-Backup
VIP 192.168.120.200 RIP 192.168.120.128
80
备份LVS,对外提供虚拟IP访问 当主LVS不可用时,VIP漂移到备份LVS 当主LVS恢复可用时,VIP漂移回主LVS
RealServer Nginx1
192.168.120.124
80
运行nginx及tomcat服务,作为真实服务1
RealServer Nginx2
192.168.120.120
80
运行nginx及tomcat服务,作为真实服务2
LVS-Director负责将80端口的请求均衡到Nginx1、Nginx2两台真实服务器上去,接下来我们将进行配
置LVS-Director的路由方式-DR,直接路由。
准备IP地址信息打印程序balancer-1.0.0.jar,http://hostname:port/server/ip,打印服务器的IP端口号
信息。
准备LVS LVS-Director负责将80端口的请求均衡到Nginx1、Nginx2两台真实服务器上去,接下来我们将进行配
置LVS-Director的路由方式-DR,直接路由。
准备IP地址信息打印程序balancer-1.0.0.jar,http://hostname:port/server/ip,打印服务器的IP端口号
信息。
准备后端服务 在RealServer-Nginx1、RealServer-Nginx2两台服务上启动后端服务,具体操作参考前面的环境准备。
确保各个服务端口可用正常 。
安装Keepalived 在两台LVS服务上安装Keepalived 2.0.18版本
安装依赖
1 sudo yum install -y openssl-devel popt-devel libnl-devel kernel-devel gcc
安装****Keepalived
1 2 3 4 5 6 7 8 9 10 11 12 13 cd ~ wget https://www.keepalived.org/software/keepalived-2.0.18.tar.gz tar -xvzf keepalived-2.0.18.tar.gz cd keepalived-2.0.18 \# 安装到/usr/local/keepalived目录 ./configure --prefix=/usr/local/keepalived --sysconf=/etc sudo make & sudo make install
安装成功后,配置放在/etc/keepalived/目录中。
Keepalived配置 LVS-Master配置 文件内容,参考课件资料keepalived-lvs-master.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 # 全局段,故障通知邮件配置 global_defs { notification_email { root@localhost } notification_email_from root@along.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id keepalived_lvs } \# 配置虚拟路由器的实例段,VI_1是自定义的实例名称,可以有多个实例段 \# VI_1是自定义的实例名称 vrrp_instance VI_1 { \#初始状态,MASTER|BACKUP state MASTER \#通告选举所用端口 interface enp0s3 \#虚拟路由的ID号(一般不可大于255) virtual_router_id 51 \#优先级信息 #备节点必须更低 priority 100 \#VRRP通告间隔,秒 advert_int 1 \#vip virtual_ipaddress { 192.168.120.200 } } \# 设置一个virtual server段 virtual_server 192.168.120.200 80 { \# service polling的delay时间,即检查realserver状态的间隔时间 \# 作为测试改为0,默认6 delay_loop 0 \#LVS调度算法:rr|wrr|lc|wlc|lblc|sh|dh lb_algo rr \#LVS集群模式:NAT|DR|TUN lb_kind DR \#会话保持时间(持久连接,秒),即以用户在600秒内被分配到同一个后端realserver \#作为测试改为0 persistence_timeout 0 \#健康检查用的是TCP还是UDP protocol TCP \# real server设置段 \# 后端真实节点主机的权重等设置 real_server 192.168.120.120 80 { \#weight 1 #给每台的权重,rr无效 \#http服务 HTTP_GET { url { path / } \#连接超时时间 connect_timeout 3 \#重连次数 retry 3 \#重连间隔 delay_before_retry 3 } } real_server 192.168.120.124 80 { \#weight 2 HTTP_GET { url { path / } connect_timeout 3 retry 3 delay_before_retry 3 } } }
LVS-Backup配置 文件内容,参考课件资料keepalived-lvs-backup.conf
参考LVS-Master配置,修改vrrp_instance VI_1部分的内容,state、priority两个地方。其他的保持不
变。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 # 配置虚拟路由器的实例段,VI_1是自定义的实例名称,可以有多个实例段 \# VI_1是自定义的实例名称 vrrp_instance VI_1 { \#初始状态,MASTER|BACKUP state BACKUP \#通告选举所用端口 interface enp0s3 \#虚拟路由的ID号(一般不可大于255) virtual_router_id 51 \#优先级信息 #备节点必须更低 priority 90 \#VRRP通告间隔,秒 advert_int 1 \#vip virtual_ipaddress { 192.168.120.200 } }
启动****Keepalived
1 2 3 4 5 6 7 8 9 10 11 # 启动master主机 sudo /usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived-lvs- master.conf \# 启动backup备机 sudo /usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived-lvs- backup.conf
测试LVS高可用 关闭LVS-Master,服务是否仍然可用?
关闭RealServer-Nginx1,整个服务是否仍然可用?