LVS介绍
LVS(Linux Virtual Server),是一个极好的负载均衡解决方案,它将一个真实服务器集群虚拟成一台服务器来对外提供服务,同时在真实服务器集群中实现了负载均衡。该技术由章文嵩博客发起,从linux2.4开始已经被收录到linux核心中。
LVS 负载均衡模式
LVS 负载均衡有三种模式可供选择,下面我们来了解一下这三个模式的原理:
1)NAT(网络地址转换)模式(生产环境几乎不用):
NAT(Network Address Translation)是一种外网和内网地址映射的技术。每台Real Server的网关将是LVS服务器的地址,用户请求的数据进出都要经过LVS(所以它容易成为瓶颈)。当LVS服务器收到用户请求时会进行目标地址转换(DNAT),将请求IP修改为后端Real Server的IP,此时客户端IP不变,目标IP是VIP。Real Server响应用户请求时,需要再让LVS做源地址转换(SNAT),将返回的数据包源地址改为VIP。此时目标IP是客户端IP,而源IP是VIP,可以正常响应客户端请求。而对客户端来说仿佛是LVS进行的响应,无法感知到后端Real Server的存在。
如上图所示,客户端的请求会发往LVS主机,此时,客户端请求报文的源IP为CIP,目标IP为LVS的VIP,当LVS收到客户端的请求报文时,会将请求报文中的目标IP修改为后端某个RealServer的RIP,就以上图为例,当LVS收到客户端的请求报文时,会将报文中的VIP修改为RIP1或者RIP2,具体将VIP修改为哪个RealServer的RIP,取决于LVS使用的具体算法,最好理解的负载均衡算法就是轮询算法了,用大白话说,轮询算法就是如果这次将报文的目标IP修改为RIP1,那么下次就将目标IP修改为RIP2,再下次就再将目标IP修改为RIP1,以此类推,当然,除了轮询算法,还有很多别的算法可供我们选择,但是此处我们暂时先不考虑这么多,当客户端请求报文的目标IP被修改为对应的RIP后,请求报文的源IP为CIP,目标IP已经改为RIP,那么报文自然会被LVS转发到对应的RealServer中,当RealServer收到对应的请求报文时,会发现报文的目标IP就是自己的RIP,于是就会接收报文,处理后进行响应,因为RealServer收到请求报文时,源IP为CIP,目标IP为RIP,所以RealServer在进行响应时,响应报文的源IP则为RIP,目标IP则为CIP,但是CIP对于RealServer来说肯定不在一个网络内,因为CIP是一个公网IP,所以,我们要将所有RealServer的网关指向DIP,当RealServer产生响应报文时,会将响应报文发往网关DIP,而DIP就是LVS的内网IP,当LVS收到对应的响应报文时,响应报文的源IP为RIP,目标IP为CIP,此时,LVS会将响应报文的源IP修改为VIP,修改后的响应报文的源IP为VIP,目标IP为CIP,于是响应报文被发往客户端,客户端则会收到响应报文,其实上述整个过程是一个DNAT的过程,所以,此种LVS模型被称之为LVS-NAT模型。
NAT模式的集群节点需要跟director在同一网络;RIP通常是私有地址,仅用于各集群节点间的通信;RealServer的网关应该指向DIP;支持端口映射(转发);用户发起的请求由调度器向Real Server提交,Real Server再把数据经过调度器传给用户。相比DR模式的话,这样安全性高,但是效率低,瓶颈会出现在调度器上,生产环境几乎不用。
2)DR(直接路由)模式(生产环境中使用最多的):
客户端请求依然由LVS接受,但是最终数据包由Real Server传输给用户,不再经过LVS转发,避免了NAT模式的瓶颈问题。DR模式的工作过程比较复杂:
当用户发起请求时,源地址是客户端IP,目标地址是VIP;而LVS调度器将请求转发给Real Server处理后再发送给用户,这个时候源IP是RIP,目标地址是客户端IP,但是客户端一开始并没有请求RIP,而用RIP去响应请求时CIP是不会接受的,所以就需要用VIP响应请求。在DR模式下LVS和Real server都需要配备一样的VIP(VIP的MAC地址和物理网卡是一样的)(Real Server通过将VIP绑定在loopback实现)。由于一个网段内多台服务器出现同样IP地址会引起冲突,所以要在LVS服务器上设置一个VIP一个DIP,而每个Real Server也有一个RIP和一个VIP,并且将Real Server的VIP地址做了隐藏和ARP抑制,不会应答广播,只在响应CIP时作为源地址使用。当产生请求时LVS将目标MAC地址修改为某台Real Server的MAC,该包就会被转发到相应的Real Server处理,此时源IP和目标IP都没变。Real Server收到LVS转发来的包时发现MAC是自己的,IP也是自己的,于是这个包被合法地接受。当Real Server返回响应时,只要直接向CIP返回即可,不再经过LVS。
RealServer推荐使用公网IP;RealServer的网关地址不能指向DIP;RealServer和调度器需要在同个物理网络(同个机房),DIP和RIP应该在同一网段;入站数据经过调度器转发到RealServer,出站数据由RealServer直接发给客户端,不再经过调度器;不能做端口转发。
3)TUN隧道模式:
也叫作隧道模式,构建和DR模式一样,相比DR模式服务器间可以不在同一个网络,可以实现异地传输,但是RealServer需要支持隧道功能。
这个模式比较少用,所以暂时忽略,以后有用到了再加上。
LVS负载均衡调度算法
根据前面的介绍,我们了解了LVS的三种工作模式,但不管实际环境中采用的是哪种模式,调度算法进行调度的策略与算法都是LVS的核心技术,LVS在内核中主要实现了一下十种调度算法。
1.轮询调度
轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。
2.加权轮询调度
加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
3.最小连接调度
最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)
4.加权最小连接调度
加权最少连接(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5.基于局部的最少连接
基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。
6.带复制的基于局部性的最少连接
带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7.目标地址散列调度
目标地址散列调度(Destination Hashing 简称’DH’)算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。
8.源地址散列调度U
源地址散列调度(Source Hashing 简称’SH’)算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。
9.最短的期望的延迟
最短的期望的延迟调度(Shortest Expected Delay 简称’SED’)算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算
A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。
10.最少队列调度
最少队列调度(Never Queue 简称’NQ’)算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。
LVS中的一些术语:
LVS集群类型中的术语
VS(代理服务器):Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(lvs服务器)
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)
CIP:Client IP(客户机IP)
VIP:Virtual serve IP VS外网的IP
DIP:Director IP VS内网的IP
RIP:Real server IP (真实IP)
VS:代理服务器
RS:真实服务器
VIP:代理服务器的外网ip
DIP:代理服务器的内网ip
RIP:真实服务器的ip地址
访问流程:CIP <--> VIP == DIP <--> RIP
ipvsadm 工具
ipvsadm 工具选项说明
-A: 添加虚拟服务器
-D: 删除整个虚拟服务器
-s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc)
-a: 添加真实服务器(节点服务器)
-d: 删除某一个节点
-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口
-m: 表示使用NAT群集模式
-g: 表示使用DR模式
-i: 表示使用TUN模式
一w: 设置权重(权重为0时表示暂停节点)
-p 60: 表示保持长连接60秒
-l: 列表查看 LVS虚拟服务器(默认为查看所有)
-n: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln
#管理集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address #删除
ipvsadm –C #清空
ipvsadm –R #重载,相当于ipvsadm-restore
ipvsadm -S [-n] #保存,相当于ipvsadm-save
#管理集群中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
选项:
lvs类型:
-g: gateway, dr类型,默认
-i: ipip, tun类型
-m: masquerade, nat类型
-w weight:权重
例子:
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m
yum install ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm
###
ipvsadm 是lvs内核使用工具
keepalive协助ipvsadm工具生成高可用
NAT模式 LVS负载均衡部署
NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS
协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡
群集来说,使用 NFS 协议来共享数据存储是比较常见的做法,NFS 也是 NAS 存储设备必然支
持的一种协议。
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程
到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS
共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持
拓朴图:
lvs负载调度器:配置双网卡 内网:192.168.246.7 (ens33) 外网卡:12.0.0.1 (ens36) 二台WEB服务器集群池:192.168.246.8、192.168.246.9 一台NFS共享服务器:192.168.246.10 客户端:访问curl 12.0.0.1
①四台服务器都关闭防火墙、防护
②7-4共享服务器NFS配置
[root@localhost ~]# yum install nfs-utils.x86_64 rpcbind -y
#安装nfs服务
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
#开启服务
③7-2web服务器配置
④7-3web服务器配置
先检测下:
⑤7-1 调度服务器 配置
我们使用本地yum源安装软件ipvsadm
网关地址别忘记啊 修改7-2、7-3真实服务器网关地址
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
去检测:
lvs 的nat模式 是通过修改源ip和目的ip来实现负载均衡
安装软件ipvsadm的两种方法
方法一:使用yum安装
[root@zzzcentos1 ~]#yum install ipvsadm.x86_64 -y
ipvsadm相关配置文件:
主程序:/usr/sbin/ipvsadm 规则保存工具:/usr/sbin/ipvsadm-save 规则重载工具:/usr/sbin/ipvsadm-restore 配置文件:/etc/sysconfig/ipvsadm-config ipvs调度规则文件:/etc/sysconfig/ipvsadm
方法二:可以使用本地yum源安装软件ipvsadm
构建LVS-DR集群
1、构建LVS-DR集群的步骤(理论)
实验环境准备:
1、配置负载调度器(192.168.80.30)
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
12345
(1)配置虚拟 IP 地址(VIP:192.168.80.188)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0 #若隧道模式,复制为ifcfg-tunl0(小写字母l)
vim ifcfg-ens33:0
123
DEVICE=ens33:0
ONBOOT=yes #开机自动激活
IPADDR=192.168.80.188
NETMASK=255.255.255.255
1234
ifup ens33:0
ifconfig ens33:0
route add -host 192.168.80.188 dev ens33:0
123
(2)调整 proc 响应参数
由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭Linux 内核的重定向参数响应。
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p #刷新设置
(3)配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm #保存策略
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.80.188:80 -s rr #添加虚拟服务器
ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.10:80 -g #若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.20:80 -g #添加真实服务器
ipvsadm #激活
ipvsadm -ln #查看节点状态,Route代表 DR模式
2、部署共享存储(NFS服务器:192.168.80.40)
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
vim /etc/exports
12345678
/opt/kgc 192.168.80.0/24(rw,sync)
/opt/benet 192.168.80.0/24(rw,sync)
12
systemctl start nfs.service
systemctl start rpcbind.service
12
3、配置节点服务器(192.168.80.10、192.168.80.20)
systemctl stop firewalld.service
setenforce 0
12
(1)配置虚拟 IP 地址(VIP:192.168.80.188) ###此地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱。
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-lo:0
vim ifcfg-lo:0
123
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.80.188 #和VIP保持一致
NETMASK=255.255.255.255 #注意:子网掩码必须全为 1
1234
ifup lo:0
ifconfig lo:0
route add -host 192.168.80.188 dev lo:0 #添加VIP本地访问路由,将访问VIP的数据限制在本地,以避免通信紊乱
vim /etc/rc.local
/sbin/route add -host 192.168.80.188 dev lo:0
(2)调整 proc 响应参数
vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
或者 临时添加
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
sysctl -p
yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd
--192.168.80.10---
mount.nfs 192.168.80.40:/opt/kgc /var/www/html
echo 'this is kgc web!' > /var/www/html/index.html
--192.168.80.20---
mount.nfs 192.168.80.40:/opt/benet /var/www/html
echo 'this is benet web!' > /var/www/html/index.html
1234567
4、测试 LVS 群集
在客户端使用浏览器访问 http://192.168.80.188/,默认网关指向192.168.80.188
Keepalived + LVS 高可用集群实验规划
主调度器: IP:20.0.0.23 VIP:20.0.0.100 从调度器: IP:20.0.0.24 VIP:20.0.0.100 web节点服务器1:IP:20.0.0.26 lo:0: 20.0.0.100 web节点服务器2:IP: 20.0.0.27 lo:0: 20.0.0.100 存储服务器: IP: 20.0.0.28
2.3 配置主服务器
2.31 调整/proc响应参数
对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux 内核的重定向参数。
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost network-scripts]# sysctl -p ###生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
123456789
2.32 配置Keepalived 配置文件
2.321 全局配置,热备配置
首先应从主,从调度器实现热备功能,漂移地址使用LVS群集的VIP地址。Keepalived的配置文件中,使用“global_defs {…}" 区段来指定全局参数,使用“vrrp_instance 实例名称 {…}” 区段指定VRRP热备参数,注释文字以“!”符号开头
[root@localhost etc]# yum -y install keepalived ipvsadm
[root@localhost keepalived]# vi /etc/keepalived/keepalived.conf
global_defs {
router_id HA_TEST_R1 //主调度器的名称
}
vrrp_instance VI_1 { //定义VRRP热备实例
state MASTER //主调度器的热备状态
interface ens33 //承载VIP接口的物理接口
virtual_router_id 1 //虚拟路由器的ID号,每个热备组保持一致
priority 100 //主调度器的优先级,越大越优先
advert_int 1 //通告间隔秒数(心跳频率)
authentication { //主从热备认证信息
auth_type PASS //认证类型
auth_pass 123456 //密码子串
}
virtual_ipaddress { //指定群集VIP地址
20.0.0.100
}
}
2.322 WEB服务器池配置
在Keepalived 的热备配置基础上,添加“virtual_server VIP 端口 {…} " 区段来配置虚拟服务器,主要包括对负载调度算法,集群工作模式,健康检查间隔,真实服务器地址等参数的设置。
virtual_server 20.0.0.100 80 { //虚拟服务器地址(VIP),端口
delay_loop 15 //健康检查的间隔时间(秒)
lb_algo rr //轮询调度算法(rr)
lb_kind DR //直接路由(DR)群集工作模式
!rsistence 60 //连接保持时间(秒),启用需要去掉!号
protocol TCP //应用服务采用的是TCP协议
real_server 20.0.0.27 80 { //第一个web节点的地址端口
weight 1 //节点的权重
TCP_CHECK { //健康检查的方式
connect_port 80 //检查的目标端口
connect_timeout 3 //连接超时(秒)
nb_get_retry 3 //重试次数
delay_before_retry 4 //充实间隔(秒)
}
}
real_server 20.0.0.26 80 { //第二个web节点服务器的地址,端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
2.33 启动keepalived服务
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl enable keepalived
###查看VIP地址###
[root@localhost etc]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:09:d7:1f brd ff:ff:ff:ff:ff:ff
inet 20.0.0.23/24 brd 20.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 20.0.0.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::d11b:e35b:5200:54ba/64 scope link noprefixroute
valid_lft forever preferred_lft forever123456789101112
注意:MASTER的主服务器将ens33接口自动添加VIP地址,通过ip命令可以查看(ifconfig命令看不到)
2.4 配置从调度器
2.41 调整/proc响应参数
对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux 内核的重定向参数。
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost network-scripts]# sysctl -p ###生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 12345678
2.42 修改从调度器配置文件
从调度器的配置文件与主调度器的配置文件基本相同,也包括全局配置,热备配置,服务器池配置。只需要调整route_id, state, priority 参数即可,其余内容完全相同。
[root@localhost etc]# yum -y install keepalived ipvsadm
[root@localhost keepalived]# vi /etc/keepalived/keepalived.conf
global_defs {
router_id HA_TEST_R2 //从调度器的名称
}
vrrp_instance VI_1 { //定义VRRP热备实例
state BACKUP //从调度器的热备状态
interface ens33 //承载VIP接口的物理接口
virtual_router_id 1 //虚拟路由器的ID号,每个热备组保持一致
priority 99 //主调度器的优先级,越大越优先
.......... //省略部分信息
}
virtual_server 20.0.0.100 80 {
.....
}1234567891011121314
2.43 开启keepalived 服务
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl enable keepalived
###查看VIP地址###
[root@localhost ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:7c:68:da brd ff:ff:ff:ff:ff:ff
inet 20.0.0.24/24 brd 20.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::dc5:de30:9e5:aac/64 scope link noprefixroute
valid_lft forever preferred_lft forever12345678910
注意:主调度器没有发生故障,在从调度器里是查看不了VIP地址的,当主调度器down掉时可查看漂移地址。
2.5 配置节点服务器 (20.0.0.26)
2.51 配置虚拟IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=20.0.0.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@localhost network-scripts]# ifup lo:0
2.52 调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@localhost network-scripts]# sysctl -p
2.53 为虚拟接口lo:0配置VIP地址
DR模式,除了需要调整/proc系统的ARP相应参数以外,还需要为虚拟接口lo:0配置VIP地址,并添加一条VIP的本地路由。
[root@localhost network-scripts]# vi /etc/rc.local
/sbin/route add -host 20.0.0.100 dev lo:0
[root@localhost network-scripts]# route add -host 20.0.0.100 dev lo:0
2.54 挂载共享存储服务器
网站首页目录与存储服务器进行挂载
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.44 ####如果还没发布,请到存储服务器发布下
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.44:/opt/51xit /var/www/html/
[root@localhost ~]# vi /etc/fstab
192.168.100.44:/opt/51xit/ /var/www/html/ nfs defaults,_netdev 0 0
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# systemctl start rpcbind nfs
[root@localhost ~]# systemctl enable rpcbind nfs12345678910
2.6 配置节点服务器 (20.0.0.27)
20.0.0.27节点服务器的配置与20.0.0.26节点服务器的配置几乎完全一致,参考节点服务器20.0.0.26进行配置,这里不作叙述。
2.7 配置存储服务器
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# yum -y install rpcbind
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# vi /etc/exports
/opt/51xit 192.168.100.0/24 (rw,sync)
/opt/52xit 192.168.100.0/24 (rw,sync)
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# mkdir /opt/51xit /opt/52xit
[root@localhost ~]# echo "this is 51xit" >/opt/51xit/index.html
[root@localhost ~]# echo "this is 52xit" >/opt/52xit/index.html123456789101112131415