阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Keepalived高可用LVS反向代理服务器

455次阅读
没有评论

共计 7147 个字符,预计需要花费 18 分钟才能阅读完成。

Keepalived 是什么?

Keepalived 是 VRRP 在 Linux 上的一种实现,以守护进程方式运行。
能够更具配置文件自动生成 ipvs 规则并对各个 RS 做健康状态监测。

VRRP:Virtual Router Redundancy Protocol,也叫做虚拟路由冗余协议。
他的原理是将多个设备组成一个虚拟路由器。
这些设备之间会通过 VRRP 协议传递心跳信息以检测设备是否已经故障。
他早期用于网络设备冗余,防止单点故障。
其实通俗来说,就是设备的热备份。
在故障产生的时候,可以省去人为地切换,减少故障时间。

使用 Keepalived 之前我们需要掌握的知识

常用实现方案:

主备模型:
将多个服务器配置成 一个虚拟路由器,一主多备。
主主模型:
组成多个虚拟路由器,提供多个服务。
虽然本质上都是一主多备,但是角色分配不一样。

主备之间的工作模式:

抢占模式:优先级。
一开始定义成 Master,优先级低还是会被抢走。
非抢占模式:先到先得
服务器之间不会根据优先度动态竞选成 Master”
除非本王死了,要不然你一辈子都是太子“那种感觉。

Keepalived 中的术语:

VRID: 虚拟路由器的标识。有相同 VRID 的一组路由器构成一个虚拟路由器。
虚拟 MAC 地址: 一个虚拟由器拥有一个虚拟 MAC 地址。
虚拟 MAC 地址的格式为 00-00-5E-00-01-{VRID}。
通常情况下,虚拟路由器回应 ARP 请求使用的是虚拟 MAC 地址,
只有虚拟路由器做特殊配置的时候,才回应接口的真实 MAC 地址。
优先级:VRRP 根据优先级来确定虚拟路由器中每台路由器的地位。
优先级是 0 -255 之间的数值,数字越大优先级越高

VRRP 工作过程:

1. 选出一个主路由器: 看优先级; 优先级一样就看 ip,谁大谁是 Master。
2. 发送 arp 欺骗的 IP 报文,通知其连接的设备,并开始承担报文转发的任务。
3. 周期性发送心跳信息、优先级、还有工作状况。
因为不可能同时将同一个对外的 IP 地址配置在两台路由器上面。
所以要 arp 欺骗报文,告诉对方自己的 MAC 地址给 ARP 表。

配置 Keepalived 高可用 LVS 反向代理后端 Web 服务器

实验拓扑:

KeepAlived
主机名 主机地址 安装组件
node1 192.168.2.201,192.168.2.221 Keepalived
node2 192.168.2.202,192.168.2.222 Keepalived
node3 192.168.2.203 Apache
node4 192.168.2.204 Apache

本文中的服务器使用 CentOS7.1,Keepalived-1.2.13
服务器均关闭 iptables 和 selinux

注意:
这里我们 node1 和 node2 为什么要设置两个 ip?
因为你试想只有一个 ip 的话,当 node1 发生故障,ip 转移到 node2 的时候,我们怎么访问 node1?所以 192.168.2.201 用作固定访问用,实际环境中可以是内网 ip 地址。而 192.168.2.221 则视为 keepalived 可以转移的公网 ip。
(1)node1 和 node2 安装 keepalived 和 ipvsadm
  [root@node1 ~]# yum install ipvsadm keepalived 
  [root@node2 ~]# yum install ipvsadm keepalived
(2)修改网络配置
[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

TYPE=Ethernet
BOOTPROTO="static"
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=eno16777736
DEVICE=eno16777736
ONBOOT=yes
IPADDR="192.168.2.201"
NETMASK="255.255.255.0"
DNS1="192.168.2.1"
GATEWAY="192.168.2.1"

[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736:0

TYPE=Ethernet
BOOTPROTO="static"
NAME=eno16777736:0
ONBOOT=yes
IPADDR="192.168.2.211"
NETMASK="255.255.255.0"
DNS1="192.168.2.1"
GATEWAY="192.168.2.1"
ONPARENT=yes

[root@node1 ~]# service network restart

[root@node1 ~]# ifconfig 
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.201  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::250:56ff:fe3c:d757  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:3c:d7:57  txqueuelen 1000  (Ethernet)
        RX packets 125436  bytes 31500491 (30.0 MiB)
        RX errors 0  dropped 6  overruns 0  frame 0
        TX packets 234981  bytes 17023789 (16.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.211  netmask 255.255.255.0  broadcast 192.168.2.255
        ether 00:50:56:3c:d7:57  txqueuelen 1000  (Ethernet)
(3)修改 keepalived 配置(全局配置段和主机配置段)
[root@node1 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {root@localhost}
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_HOST1
}

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {192.168.2.221/24 dev eno16777736 label eno16777736:1
    }
}


vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {192.168.2.222/24 dev eno16777736 label eno16777736:2
    }
}
注意:1.node2 的配置中
  将 VI_1 的改为 priority 99,state BACKUP,将 VI_2 的改为 priority 100,state MASTER!!!也就是说,VI_1 中,node1 的优先度是 100 的 MASTER,node2 则是优先度 99 的 BACKUP
  VI_2 中,node1 的优先度是 99 的 BACKUP,node2 则是优先度是 100 的 MASTER
2. 这里一个 VI 就是一个虚拟路由器,所以这里有两个 VI,所以组成了两个虚拟路由器。这样是为了可以实现双主,不会让备份主机处于空闲而造成浪费。

在这一步完成之后,我们就可以先保存一下,然后重启 Keepalived 服务了。
因为是第一次,我们先分开来配置,不用到时候配置了 LVS 的参数再重启。
这样更加容易排错。要不然,lvs 的配置有错误,这里的配置也有错误,就很混乱。

此时检验 keepalived 是否工作正常的方法:
通过关闭 node1 上面的 keepalived,看看 192.168.2.221 会不会转移到 node2 上面。
同样,关闭 node2 上面的 keepalived,看看 node2 的 ip192.168.2.222 会不会转移到 node1 上。

(3)还是同一个配置文件, 这次修改 LVS 相关配置(LVS 配置段)。
virtual_server 192.168.2.221 80 {delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    sorry_server 127.0.0.1 80

    real_server 192.168.2.203 80 {weight 1
        TCP_CHECK {connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

    real_server 192.168.2.204 80 {weight 1
        TCP_CHECK {connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

virtual_server 192.168.2.222 80 {delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    sorry_server 127.0.0.1 80

    real_server 192.168.2.203 80 {weight 1
        TCP_CHECK {connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

    real_server 192.168.2.204 80 {weight 1
        TCP_CHECK {connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

这个配置主要用于自动生成 lvs 规则。
这里定义了两个 lvs 的 Director 规则,每个 VirtualServer 后面都定义 RealServer。
这里我们做了一个双主的模型,也就是 lvs1 和 lvs2 都工作。
假如 lvs1 故障,lvs1 的 ip 就会转移到 lvs2 上。
假如 lvs2 故障,lvs1 的 ip 就会转移到 lvs1 上。

重启 keepalived 之后查看效果(node1)
[root@bc ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.221:80 rr 
  -> 192.168.2.203:80             Route   1      0          0         
  -> 192.168.2.204:80             Route   1      0          0         
TCP  192.168.2.222:80 rr 
  -> 192.168.2.203:80             Route   1      0          0         
  -> 192.168.2.204:80             Route   1      0          0

此时 node1 只有 192.168.2.221 的 ip,所以只有上面的生效。

(4)node3 和 node4 的配置

我们将它写成一个脚本,目标是为了将 LVS1 的 VIP 和 LVS2 的 VIP 分别配置在 lo:0 和 lo:1 上面
接受 start 参数的时候,做 arp 限制;接受 stop 参数的时候,取消限制。
这样做是为了,当两个 VIP 都切换过来的时候,可以进行响应。

[root@node3 ~]# vim RealServer.sh 

#!/bin/bash

usage(){
        echo "This Script is design for setting the arp argument for lvs-dr RealServer"
        echo "Usage:`basename $0` start|stop"
}

case $1 in
        start)
                echo "1" > /proc/sys/net/ipv4/ip_forward
                echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
                echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
                echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
                ifconfig lo:0 192.168.2.221/32 broadcast 192.168.2.221 up
                ifconfig lo:1 192.168.2.222/32 broadcast 192.168.2.222 up
                route add -host 192.168.2.221 dev lo:0
                route add -host 192.168.2.222 dev lo:1
                ;;
        stop)
                echo "0" > /proc/sys/net/ipv4/ip_forward
                echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
                echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
                ifconfig lo:0 192.168.2.221/32 broadcast 192.168.2.221 down
                ifconfig lo:1 192.168.2.222/32 broadcast 192.168.2.222 down
                route del -host 192.168.2.221 dev lo:0
                route del -host 192.168.2.222 dev lo:1
                ;;
        *)
                usage
                ;;
esac
(5)测试方法

由于这一步十分难做演示,所以说一下主要的步骤。
当 node1 使用 systemctl stop keepalived.service 的时候,
使用 192.168.2.221 会转移到 node2,浏览器依然可以使用 192.168.2.221 访问 node3 和 node4
同时使用 192.168.2.222 依然可以访问 node3 和 node4,不影响 node2 的正常运作。

当 node2 使用 systemctl stop keepalived.service 的时候,
使用 192.168.2.221 依然可以访问 node3 和 node4,不影响 node1 的正常运作。
同时 192.168.2.222 此时会转移到 node1,浏览器依然可以使用 192.168.2.221 访问 node3 和 node4

所以你怎么刷,或者关掉任意一个 LVS,都可以用 192.168.2.221 和 192.168.2.222 这两个 ip 访问后端两台主机。

注意:
因为这里为了显示效果,使用了 IP 访问。使用 IP 访问的时候,假如有多台虚拟主机,一定会默认访问第一个。
上面的 Keepalived 配置的 ACTIVE/ACTIVE 模式,一般是 httpd 配置放两个虚拟主机网站。

这样用域名访问网站的时候,假如指向同一个 IP 的时候,也能显示不同的网站。

一些关于 Keepalived 相关教程集合

CentOS 7 下 Keepalived + HAProxy 搭建配置详解  http://www.linuxidc.com/Linux/2017-03/141593.htm

Keepalived 高可用集群应用场景与配置 http://www.linuxidc.com/Linux/2017-03/141866.htm

Nginx+Keepalived 实现站点高可用  http://www.linuxidc.com/Linux/2016-12/137883.htm

Nginx+Keepalived 实现站点高可用(负载均衡)  http://www.linuxidc.com/Linux/2016-12/138221.htm

构建高可用集群 Keepalived+Haproxy 负载均衡 http://www.linuxidc.com/Linux/2016-12/138917.htm

CentOS6.5 下 Keepalived 高可用服务单实例配置 http://www.linuxidc.com/Linux/2016-12/138110.htm

Keepalived 安装与配置 http://www.linuxidc.com/Linux/2017-02/140421.htm

Nginx 之 Keepalived 高可用  http://www.linuxidc.com/Linux/2017-05/143708.htm

Linux 下 Keepalived 服务安装文档  http://www.linuxidc.com/Linux/2017-03/141441.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147594.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计7147字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7988305
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...