Skip to content

3 集群基础

一 拓展

流量相关:

        PV: 页面浏览量或点击量
        UV: 独立访客
        IP: 独立的IP的访问用户
一般下: PV > UV > IP
            PV > IP         网吧,学校环境
            UV < IP         家庭中ADSL拨号上网

性能扩展:

垂直扩展(纵向): 增加内存,磁盘等
水平扩展(横向): 增加服务器等

image-20221204220041939

二 集群概念

一组协同工作,但对外表现为一个整体的服务器组

优点: 高可扩展性
        高可用性
        高性能
        高性价比

拓展: 负载与分布式区别
        负载: 厨师之间的关系
        分布式: 厨师与配菜员关系

三 集群分类

LBC:负载均衡集群

HAC:高可用性集群

HPC:高性能计算集群(科学计算集群)

1)LBC:负载均衡集群

(1)概念

LBC(load balancer Cluster):负载均衡集群

目的:提升业务性能,降低单台服务器压力

实现方式:
        硬件: 单独硬件设备(独立专门的操作系统) F5(之后又收购了nginx,软硬件都有)
        软件: DNS、LVS、RAC、Haproxy
                LVS:linux虚拟服务器
                RAC:实时应用集群
                DNS实现负载:同一域名解析不同IP(缺点:由于缓存原因,导致任务分配不均,无法实现健康检查)(缓存DNS无法实现分配用户请求)

算法: RR:轮询
                WRR:权重(加权轮询)

结构: agent       负载调度器
                业务层     服务器池
                存储          共享存储

层级: 硬件: 二、四、七
                软件:
                    四   负载调度器:LVS、RAC
                    七   负载调度器:mysql、proxy、RAC
                                  nginx
                                  haproxy
区别\不同点 触发条件 实现原理 应用场景 安全性
四层 ip、port 一次TCP连接 TCP应用 转发SYN
七层 URL、主机名 两次TCP连接 HTTP协议 拦截SYN

四层负载与七层负载的区别:

        七层基于http协议
        七层负载更智能化
        四层基于TCP
        四层负载较为灵活
        两者利用的报文所在层面不同
1、七层负载均衡:基本都**基于http协议**,适用于web服务器的负载均衡
2、四层负载均衡:**基于TCP协议**,可以做任何基于tcp/ip协议的负载均衡(haproxy, LVS)
3、二者主要区别在于**利用的报文所在的层面是不同的**,各有各的好处。
4、**七层负载**均衡的好处,是使得整个网络**更“智能化”**。

例如访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器,并可以利用缓存技术;将对文字类的请求转发到特定的文字服务器,并可以利用压缩技术。
从技术原理上,七层负载可以对客户端的请求和服务器的响应进行任何意义上的修改,极大的提升了应用系统在网络层的灵活性。例如nginx或apache上部署的功能可以迁移到负载均衡器上,例如客户请求中的Header重写,服务器响应中的关键字过滤或内容插入等功能。
5、**四层负载**均衡的优点是**较为灵活**,可以作为多种软件的负载均衡器。


**总结:**
举个例子形象的说明:四层负载均衡就像银行的自助排号机,每一个到银行的客户,根据排号机的顺序,选择对应的窗口接受服务;而七层负载均衡像银行大堂经理,先确认客户需要办理的业务,再安排排号。这样办理理财、存取款等业务的客户,会去不同的地方排队,加快了业务办理流程。

ipvsadm命令 【重难点】

0.  查看集群
    ipvsadm -ln
        -l  #list,显示列出集群的相关信息
        -n  #以数字形式显示(数字化显示)
1.  创建集群
    ipvsadm -A -t vip:port -s rr        
        -A  #add,创建(添加)新的集群
        -t  #创建的集群使用的是TCP协议进行数据传输
        -s  #指定集群的负载调度算法{rr 、wrr}
2.  向集群内添加应用服务器
    ipvsadm -a -t vip:port -r rip:port -m
        -a  #向已存在的指定集群内添加应用服务器
        -r  #指定将哪个应用服务器加入到集群内
        -m  #IPVS函数的工作模式{-m NAT模式 | -g DR模式 }
3.  修改集群信息(已经存在的集群)
    ipvsadm -E -t vip:port -s 算法
        -E  #edit,编辑已经创建了的集群参数(仅能修改集群的调度算法)
4.  修改集群内已添加的应用服务器参数
    ipvsadm -e -t vip:port -r rip:port -g|-m -w 数字
        -e  #修改集群内应用服务器参数,可修改工作模式,权重
        -g  #修改真实服务器在集群中工作模式为DR模式
        -m  #修改帧数服务器在进群中工作模式为NAT模式
        -w  #修改为wrr算法时,(修改权重)
5.  删除集群:(协议、ip、端口相同时,算法即固定,可不写算法)
    ipvsadm -D -t vip:port
6.  删除集群中应用服务器:(不写工作模式,算法)
    ipvsadm -d -t vip:port -r rip:port

(2)四层负载均衡软件----LVS(linux-virtual-server)

​ 内核层: IPVS函数(默认有)

​ 用户层:ipvsadm 命令

CIP:客户端ip

DIP:负载调度器IP

VIP:集群IP

RIP:真实服务器IP

(3)三种工作模式:

1.  NAT转换模式 - 铺垫
2.  route路由模式(DR)   - 最常用的模式
3.  隧道模式 - 了解

负载调度器算法

静态算法:只考虑算法本身,不考虑服务器状态
        rr(轮循):**一个一个轮替**
        wrr(加权轮循):**按权重比例轮替**
        sh(源地址hash):**实现会话绑定**,保留之前建立的会话信息
        dh(目标地址hash):将同一个目标地址的请求,发送给同一个服务器节点。**提高缓存命中率**

动态算法:既要考虑算法本身,也要考虑服务器状态(原理:通过hash表记录连接状态----active/inactive)
        LC(最少连接):新请求分给连接数少的服务器                  公式:活动连接*256+非活动连接
        WLC(加权最少连接):最少连接的特殊模式                       公式:(活动连接*256+非活动连接)/权重
        SED(最短期望延迟):加权最少连接的特殊模式                 公式:(活动连接 +1)*256/权重
        NQ  (永不排队):sed的特殊模式(当某台真实服务器连接为0时,直接分配,不计算)
        LBLC(基于局部性的最少连接):
            dh的特殊模式,**既要提高缓存命中率,又要考虑连接数量**。
            先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
        LBLCR(带复制的基于局部性的最少连接):LBLCR=LBLC+缓存共享机制

(4)实验---LVS-NAT模式

原理:

1.客户端请求负载调度器,发送数据包(源IP:CIP  目标IP:VIP)
2.负载调度器进行数据包目标地址转换(源IP:CIP  目标IP:RIP)
3.数据包交给应用服务器,响应后发回负载调度器(源IP:RIP 目标IP:CIP)
4.负载调度器进行数据包源地址转换(源IP:RIP   目标IP:CIP)

NAT特点:

同一网络、指向DIP、内私有、中间、端口映射、负载linux,其他随意

同一网络指向内部,中间映射linux

1.负载调度器和真实服务器,必须位于同一网络
2.真实服务器的网关必须指向DIP
3.负载调度器必须位于客户端和真实服务器之间
4.RIP通常都是私有地址,仅用于各个集群节点通信
5.支持端口映射
6.真实服务器可以使用任意操作系统、负载调度器必须是LINUX系统

NAT缺点:

负载调度+路由作为整体,压力大

原理图:

image-20221130222247037

实验环境:

测试机:110 路由+负载调度器:120 应用服务器1:130 应用服务器140
虚拟机名 7-1 7-2 7-3 7-4
网卡模式 vmnat10 vmnat10、vmnat11 vmnat11 vmnat11
ip 192.168.10.110 192.168.10.120
192.168.11.120
192.168.11.130 192.168.11.140
网关 192.168.10.120 192.168.11.120 192.168.11.120

实验步骤:

1)7-2开启路由转发

[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# grep "net" /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

2)7-3、7-4安装apache,并部署网页

#7-3
[root@localhost ~]# yum -y install httpd >/dev/null
[root@localhost ~]# systemctl enable httpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# echo "hello 130..." > /var/www/html/index.html

#7-4
[root@localhost ~]# yum -y install httpd >/dev/null
[root@localhost ~]# systemctl enable httpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# echo "hello 140...." > /var/www/html/index.html

3)7-1测试:

​ 11.130、11.140能访问到apache服务器

​ 10.120不能访问到apache服务器

[root@localhost ~]# curl 192.168.11.130
hello 130...
[root@localhost ~]# curl 192.168.11.140
hello 140....
[root@localhost ~]# curl 192.168.10.120
curl: (7) Failed connect to 192.168.10.120:80; 拒绝连接

4)7-2搭建集群

[root@localhost ~]# grep -i "ip_vs" /boot/config-3.10.0-957.el7.x86_64          #检查系统有ipvs函数
[root@localhost ~]# yum -y install ipvsadm                                      #安装ipvsadm命令
[root@localhost ~]# ipvsadm -ln                                                         #查看集群,没有集群信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@localhost ~]# ipvsadm -A -t 192.168.10.120:80 -s rr                               #创建集群
[root@localhost ~]# ipvsadm -a -t 192.168.10.120:80 -r 192.168.11.130:80 -m             #将130加入集群
[root@localhost ~]# ipvsadm -a -t 192.168.10.120:80 -r 192.168.11.140:80 -m             #将140加入集群
[root@localhost ~]# ipvsadm -ln                                                         #再次查看,其中有集群信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.120:80 rr
  -> 192.168.11.130:80            Masq    1      0          0         
  -> 192.168.11.140:80            Masq    1      0          0

5)测试

​ 7-1访问10.120能分别访问到130、140的内容

​ 检查130、140的访问日志(来源ip为7-1,客户端到apache一次TCP连接)

[root@localhost ~]# curl 192.168.10.120
hello 140....
[root@localhost ~]# curl 192.168.10.120
hello 130...

image-20221130225449733

注意:负载均衡服务器+路由器

​ client——》server 数据包目标地址转换

​ server——》client 数据包源地址转换

(5)实验----LVS-DR模式

实验原理:

1.客户端通过dns域名解析出路由器的对外公网ip,发送数据包给路由器

2.路由器接受后,经过防火墙,进行ip目标地址转换为:集群的VIP(负载均衡服务器)

3.负载均衡服务器接收后,通过局域网的mac地址转换,找到应用服务器

4.应用服务器通过lo子接口接受后,将网页内容打包到数据包中,通过网关发给路由器

5.路由器防火墙,再将源地址转换为路由器对外的公网ip,发给客户端

image-20221201150522047

DR特点:

同一网络、指向、公私、负载入站Linux、其他随意

1. 负载调度器和真实服务器,必须位于同一网络
2. 真实服务器的网关必须指向路由器
3. 负载调度只处理入站请求
4. RIP可以是私有地址,也可以是公网地址
5. 真实服务器可以使用任意操作系统,负载调度器必须是LINUX系统

DR优点:

负载压力较小、支持100台左右RS(real server)

DR缺点:

配置复杂

实验环境

虚拟机 网卡、ip 网关 主要操作
7-1 路由 vmnat10 192.168.10.110
vmnat11 192.168.11.110
1.开启路由转发
2.设置防火墙规则
7-2 负载调度器 vmnat11 ens33 192.168.11.120(DIP)
ens33:0 192.168.11.200(VIP)
192.168.11.110 1.创建集群,将应用服务器加入集群
2.关闭路由重定向
7-3 应用服务器1 vmnat11 192.168.11.130 192.168.11.110 1.安装httpd,写网页,启动服务
2.创建lo子接口
3.忽略arp解析结果
4.关闭keepalive功能,避免缓存影响实验效果
7-4 应用服务器2 vmnat11 192.168.11.140 192.168.11.110 1.安装httpd,写网页,启动服务
2.创建lo子接口
3.忽略arp解析结果
4.关闭keepalive功能,避免缓存影响实验效果
7-5 测试机 vmnat10 192.168.10.15 192.168.10.110 访问192.168.10.110,能访问到两个应用服务器

实验步骤:

1)7-1配置

开启路由转发

设置防火墙进出规则

[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# grep "net" /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.10.110 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.200:80
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -p tcp --sport 80 -j SNAT --to-source 192.168.10.110
[root@localhost ~]# iptables -t nat -L -n --line-numbers
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  0.0.0.0/0            192.168.10.110       tcp dpt:80 to:192.168.11.200:80

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    SNAT       tcp  --  192.168.11.0/24      0.0.0.0/0            tcp spt:80 to:192.168.10.110

2)7-2配置

创建集群,将应用服务器加入集群

关闭路由重定向

[root@localhost ~]# ipvsadm -A -t 192.168.11.200:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.130:80 -g
[root@localhost ~]# ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.140:80 -g
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.11.200:80 rr
  -> 192.168.11.130:80            Route   1      0          0         
  -> 192.168.11.140:80            Route   1      0          0         

[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# grep "net" /etc/sysctl.conf
net.ipv4.conf.all.send_redirects=0
[root@localhost ~]# sysctl -p
net.ipv4.conf.all.send_redirects = 0

3)7-3、7-4配置

1.安装httpd,写网页,启动服务

2.创建lo子接口

3.忽略arp解析结果

4.关闭keepalive功能(keepalive功能:客户端访问同一资源时,建立缓存,避免多次tcp握手)

#7-3应用服务器1
#1  配置应用服务器
[root@localhost ~]# yum -y install httpd>/dev/null
[root@localhost ~]# echo "hello 130...." >/var/www/html/index.html
[root@localhost ~]# systemctl enable httpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

#2  添加lo子接口
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -a ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
    #仅修改了以下三项
DEVICE=lo:0
IPADDR=192.168.11.200
NETMASK=255.255.255.255
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.11.200  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

#3  忽略arp解析结果
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# grep "net" /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
[root@localhost ~]# sysctl -p
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2

#4  关闭keepalive功能
[root@localhost ~]# cp -a /usr/share/doc/httpd-2.4.6/httpd-default.conf  /etc/httpd/conf.d/
[root@localhost ~]# vim /etc/httpd/conf.d/httpd-default.conf 
[root@localhost ~]# grep "^KeepAlive" /etc/httpd/conf.d/httpd-default.conf 
KeepAlive On
KeepAliveTimeout 0
[root@localhost ~]# systemctl restart httpd


#7-4应用服务器2
#1  配置应用服务器
[root@localhost ~]# yum -y install httpd>/dev/null
[root@localhost ~]# echo "hello 140...." >/var/www/html/index.html
[root@localhost ~]# systemctl enable httpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

#2  添加lo子接口
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -a ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
    #仅修改了以下三项
DEVICE=lo:0
IPADDR=192.168.11.200
NETMASK=255.255.255.255
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.11.200  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

#3  忽略arp解析结果
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# grep "net" /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
[root@localhost ~]# sysctl -p
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2

#4  关闭keepalive功能
[root@localhost ~]# cp -a /usr/share/doc/httpd-2.4.6/httpd-default.conf  /etc/httpd/conf.d/
[root@localhost ~]# vim /etc/httpd/conf.d/httpd-default.conf 
[root@localhost ~]# grep "^KeepAlive" /etc/httpd/conf.d/httpd-default.conf 
KeepAlive On
KeepAliveTimeout 0
[root@localhost ~]# systemctl restart httpd

4)7-5测试

访问路由器公网ip(192.168.10.110)

[root@localhost ~]# curl 192.168.10.110
hello 130....
[root@localhost ~]# curl 192.168.10.110
hello 140....
[root@localhost ~]# curl 192.168.10.110
hello 130....

(6)iptables 命令语法结构

1)防火墙结构:

规则表:    容器,存放规则链
            作用: 标记、跟踪、阻拦放行、日志记录等
            默认五张表、常用4张、最常用2张
                        nat表:转发
                        filter表: 阻拦放行
规则链:     容器,存放一条条具体规则
            作用: 在什么时候处理数据包
                            INPUT、OUTPUT、FORWARD
                            PREROUTING、POSTROUTING

2)语法

查看防火墙规则:

iptables -L -n --line-numbers
        -L                  #列出规则
        -n                  #数字化显示
        --line-numbers      #显示行号

删除规则:

注意:永久关闭需要修改防火墙服务自启动

iptables -F
    -F          #清空当前的防火墙缓存信息

创建规则

iptables -t nat -A PREROUTING -d 192.168.10.110 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.200:80
iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -p tcp --sport 80 -j SNAT --to-source 192.168.10.110
    防火墙规则存放位置:
            -t          #table,指定表创建
            -A          #指定连追加
    条件判断:
    注意:若有端口匹配,必须先写协议类型,再写端口
            -d          #匹配数据包目标地址
            -s          #匹配数据包源地址
            --dport     #匹配数据包目标端口
            --sport     #匹配数据包源端口
            -p          #指定协议类型(tcp、udp、icmp)
            .....
    执行动作:
            -j          #符合条件时,要执行的动作
                ACCEPT、  REJECT、  DROP、   DNAT、       SNAT
                放行      拒绝放行    丢弃     目标地址转换   源地址转换
                DNAT --to-destination           #目标地址修改
                SNAT --to-source                #源地址修改

2)HAC高可用

目的:故障转移

高可用:通过尽量缩短系统停机时间,提高系统和应用的可用性
                一般2个节点做出HA集群,“双机热备”  “双机互备”

最大限度:
        99%        87.6h
        99.9%      8.8h
        99.99%     53m
        99.999%    5m

故障切换: 心跳检测、RS232串口线实现

双机备份软件: Rose Haproxy、keepaliced、Heartbeat

特殊情况: 脑分裂(由于线缆故障,两个LVS+keepalived服务器都抢占主)
                解决:
                    1.设置参考IP(网关):ping对方IP和参考IP都故障才抢主
                    2.设置冗余线路: 设置两张网卡,两张网卡都不同时才抢主
                    3.爆头模式:判断故障后,无论是否真故障,先让对方故障(断电),再抢主

(1)实验----LVS-DR模式+keepalived

实验原理:在LVS-DR模式中,加入负载调度的故障转移功能

前提:在LVS-DR模式实现环境下进行

实验环境:

虚拟机 网卡、ip 网关 主要操作
7-1 路由 vmnat10 192.168.10.110
vmnat11 192.168.11.110
1.开启路由转发
2.设置防火墙规则
7-2 负载调度器1 vmnat11 ens33 192.168.11.120(DIP)
ens33:0 192.168.11.200(VIP)
192.168.11.110 1.安装ipvsadm、keepalived软件
2.关闭路由重定向
3.配置keepalived作为主,并配置集群相关信息
4.启动自启动keepalived
7-3 应用服务器1 vmnat11 192.168.11.130 192.168.11.110 1.安装httpd,写网页,启动服务
2.创建lo子接口
3.忽略arp解析结果
4.关闭keepalive功能,避免缓存影响实验效果
7-4 应用服务器2 vmnat11 192.168.11.140 192.168.11.110 1.安装httpd,写网页,启动服务
2.创建lo子接口
3.忽略arp解析结果
4.关闭keepalive功能,避免缓存影响实验效果
7-5 测试机 vmnat10 192.168.10.15 192.168.10.110 访问192.168.10.110,能访问到两个应用服务器
7-6 负载调度器2 vmnat11 ens33 192.168.11.122(DIP)
ens33:0 192.168.11.200(VIP)
需解决IP冲突问题
192.168.11.110 1.解决IP冲突问题
2.安装ipvsadm、keepalived软件
3.配置keepalived作为从,并配置集群相关信息
4.启动自启动keepalived

实验步骤:

1)两个负载调度器解决IP冲突问题

#7-2、7-6都注释两个文件中的ip冲突判断部分
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifup-eth
                    #if [ $? = 1 ]; then
                    #    ARPINGMAC=$(echo $ARPING |  sed -ne 's/.*\[\(.*\)\].*/\1/p')
                    #    net_log $"Error, some other host ($ARPINGMAC) already uses address ${ipaddr[$idx]}."
                    #    exit 1
                    #fi

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifup-aliases
            #if [ $? = 1 ]; then
            #    ARPINGMAC=$(echo $ARPING | sed -ne 's/.*\[\(.*\)\].*/\1/p')
            #    net_log $"Error, some other host ($ARPINGMAC) already uses address ${IPADDR}."
            #    return 1
            #fi

2)配置keepalived功能

#7-2
[root@localhost ~]# yum -y install keepalived
[root@localhost ~]# cp -a /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_MASTER                             #标记路由id
}

vrrp_instance VI_1 {
    state MASTER                                    #标记主从
    interface ens33                                 #标记监听网卡
    virtual_router_id 51                            #标记虚拟路由id,和7-6的要一样
    priority 100                                    #优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.11.200                              #集群的VIP
    }
}

virtual_server 192.168.11.200 80 {
    delay_loop 6
    lb_algo rr                                      #算法
    lb_kind DR                                      #工作模式
    persistence_timeout 0                           #keepalived软件的keepalive功能保留时间
    protocol TCP

    real_server 192.168.11.130 80 {                 #标记应用服务器1
        weight 1
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
    real_server 192.168.11.140 80 {                 #标记应用服务器2
        weight 1
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
}
[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# tail -n 1 /etc/sysctl.conf
net.ipv4.conf.all.send_redirects=0
[root@localhost ~]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
[root@localhost ~]# systemctl restart keepalived
[root@localhost ~]# systemctl enable keepalived


#7-6
[root@localhost ~]# yum -y install keepalived
[root@localhost ~]# cp -a /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_SLAVE                              #标记路由id
}

vrrp_instance VI_1 {
    state SLAVE                                     #标记主从
    interface ens33                                 #标记监听网卡
    virtual_router_id 51                            #标记虚拟路由id,和7-2的一样
    priority 30                                     #优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.11.200                              #集群VIP
    }
}

virtual_server 192.168.11.200 80 {
    delay_loop 6
    lb_algo rr                                      #算法
    lb_kind DR                                      #工作模式
    persistence_timeout 0                           #keepalived软件的keepalive功能保留时间
    protocol TCP

    real_server 192.168.11.130 80 {                 #应用服务器1
        weight 1
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
    real_server 192.168.11.140 80 {                 #应用服务器2
        weight 1
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
}
[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# tail -n 1 /etc/sysctl.conf
net.ipv4.conf.all.send_redirects=0
[root@localhost ~]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
[root@localhost ~]# systemctl restart keepalived
[root@localhost ~]# systemctl enable keepalived

3)测试

测试1:关闭集中一台负载调度器,测试修复

while true; do curl 192.168.10.110 && date ;done        #客户端一直访问
watch -n 0.01 "ipvsadm -ln"                             #调度器一直查看集群状态

LVS-DR+keepalived实验1

测试2:修复后的主从优先级

​ 修改7-2、7-6 keepalived.conf配置文件中的priority选项优先级(数字越大,优先级高,修复后作为主)c

#7-2
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
[root@localhost ~]# grep "priority" /etc/keepalived/keepalived.conf
    priority 30
[root@localhost ~]# systemctl restart keepalived

#7-6
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
[root@localhost ~]# grep "priority" /etc/keepalived/keepalived.conf
    priority 60
[root@localhost ~]# systemctl restart keepalived

LVS-DR+keepalived实验2