Ceph入门到精通-大流量10GB/s支持OSPF(ECMP)-LVS 集群

这篇具有很好参考价值的文章主要介绍了Ceph入门到精通-大流量10GB/s支持OSPF(ECMP)-LVS 集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Keepalived-LVS 能够提高集群的高可用性并增加后端检测功能、简化配置,满足常规需求。但Keepalived-LVS集群中,同一个VIP只能由一台设备进行宣告,为一主多备的架构,不能横向拓展集群的性能,为此我们引入OSPF来解决该问题。

OSPF(ECMP)

ECMP(Equal-CostMultipathRouting)等价多路径,存在多条不同链路到达同一目的地址的网络环境中,如果使用传统的路由技术,发往该目的地址的数据包只能利用其中的一条链路,其它链路处于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间,而等值多路径路由协议可以在该网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路的数据传输。

特点:

  1. 基于流的均衡负载
  2. 最大链路数受设备限制(最高16)
  3. 所有链路都active,故障链路自动剔除

LVS+OSPF(ECMP)

利用ECMP以上特性,可以将LVS集群进行横向拓展,利用quagga启ospf
为模拟集群环境,我们准备了六台虚拟机分别为Client、LVS-1、LVS-2、RealServer1、RealServer2、Router,VIP设为192.168.0.100

  • Router :192.168.0.1 192.168.1.1
  • Client :192.168.1.2
  • LVS-1 :192.168.0.2
  • LVS-2 :192.168.0.3
  • RealServer1 :192.168.0.4
  • RealServer2 :192.168.0.5

Router 配置

LVS-1、LVS-2与Router需处于同一ospf域中,通过 IP 192.168.0.1 与LVS1/LVS2/RealServer1/RealServer2 通讯,IP 192.168.1.1 与 Client通讯

[root@router ~]# echo 1 >  /proc/sys/net/ipv4/ip_forward
// 开启转发
[root@router ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.1  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::20c:29ff:fe6e:d10e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6e:d1:0e  txqueuelen 1000  (Ethernet)
        RX packets 63921  bytes 5978914 (5.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24354  bytes 2334494 (2.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens38: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe6e:d122  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6e:d1:22  txqueuelen 1000  (Ethernet)
        RX packets 60501  bytes 5206254 (4.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 18358  bytes 1432690 (1.3 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 1119  bytes 88568 (86.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1119  bytes 88568 (86.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
// ens33:192.168.0.1 与LVS1/LVS2/RealServer1/RealServer同一子网 , ens38:192.168.1.1 与Client同一子网
[root@LVS1 ~]# yum install quagga.x86_64 -y
[root@router ~]# vi /etc/quagga/zebra.conf
hostname Router
password test
enable password test
log file /var/log/quagga/zebra.log
service password-encryption
interface ens33
interface ens38
access-list 1 permit 127.0.0.1
ip prefix-list ANY seq 5 permit 0.0.0.0/0 le 32
route-map ANY deny 10
  match ip address prefix-list ANY
ip protocol ospf route-map ANY
line vty
  access-class 1
[root@router ~]# vi /etc/quagga/ospfd.conf
hostname Router
password test
log file /var/log/quagga/ospfd.log
log stdout
log syslog
service password-encryption
interface ens33
  ip ospf hello-interval 1
  ip ospf dead-interval 4
  ip ospf priority 1
  ip ospf cost 1
router ospf
  ospf router-id 192.168.0.7
  log-adjacency-changes
  network 192.168.0.0/24 area 0.0.0.0
  network 192.168.1.0/24 area 0.0.0.0
access-list 1 permit 127.0.0.1
line vty
 access-class 1

RealServer 配置

realserver.sh 参考上一章节

[root@RealServer1 ~]# ./realserver.sh start
[root@RealServer1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.4  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::20c:29ff:febd:38da  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:38:da  txqueuelen 1000  (Ethernet)
        RX packets 48635  bytes 4087456 (3.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 46101  bytes 5700308 (5.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 30  bytes 2613 (2.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 30  bytes 2613 (2.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.0.100  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

LVS 配置

由于我们使用ospf来实现高可用,不开启keepalived的vrrp功能(LVS2也同样配置),只是用其后端检测功能。
在keepalived-LVS集群的抢占模式下,Master在网卡上挂VIP并进行ARP广播,此时VIP对应的设备是唯一的。
但在OSPF-LVS集群中,Router根据ospf信息通过修改报文的目的mac地址转发到对应的LVS来实现均衡负载,并不根据VIP对应的ARP信息,所以对应的每台LVS将VIP挂在在lo上。

[root@LVS1 ~]# vi /etc/keepalived/keepalived.conf
global_defs {
        router_id LVS1 #路由器标识
        script_user root
        enable_script_security
}

virtual_server 192.168.0.100 80 {
        delay_loop 5
        lb_algo wrr
        lb_kind DR
        persistence_timeout 60
        persistence_granularity 255.255.255.255
        protocol tcp
        inhibit_on_failure on
        ha_suspend
        sorry_server 127.0.0.1 80
        real_server 192.168.0.4 80 {
            weight 10
                HTTP_GET{
            url{
                path /
                status_code 200
            }
        connect_port 80
            connect_timeout 2
            retry 1
            delay_before_retry 1
        }
        }
        real_server 192.168.0.5 80 {
            weight 10
                HTTP_GET{
            url{
                path /
                status_code 200
            }
        connect_port 80
            connect_timeout 2
            retry 1
            delay_before_retry 1
        }
        }
}
[root@LVS1 ~]# systemctl reload keepalived
[root@LVS1 ~]# 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.0.100:80 wrr persistent 60
  -> 192.168.0.4:80               Route   10     0          0
  -> 192.168.0.5:80               Route   10     0          0
[root@LVS1 ~]# ifconfig lo:0 192.168.0.100 netmask 255.255.255.255 up
//添加VIP到lo
[root@LVS1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.100/32 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:af:6b:f7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feaf:6bf7/64 scope link
       valid_lft forever preferred_lft forever
[root@LVS1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

安装quagga并进行配置

[root@LVS1 ~]# yum install quagga.x86_64 -y
[root@LVS1 ~]# vi /etc/quagga/zebra.conf
hostname LVS1
# HOSTNAME改为IP也可以
password test
enable password test
log file /var/log/quagga/zebra.log
#log syslog
service password-encryption
interface ens33
access-list 1 permit 127.0.0.1
ip prefix-list ANY seq 5 permit 0.0.0.0/0 le 32
route-map ANY deny 10
  match ip address prefix-list ANY
ip protocol ospf route-map ANY
line vty
  access-class 1
[root@LVS1 ~]# vi /etc/quagga/ospfd.conf
hostname LVS1
password test
log file /var/log/quagga/ospfd.log
log stdout
log syslog
service password-encryption
interface ens33
  ip ospf hello-interval 1
  ip ospf dead-interval 4
  ip ospf priority 0
  ip ospf cost 1
router ospf
  ospf router-id 192.168.0.2
  log-adjacency-changes
  network 192.168.0.2/24 area 0.0.0.0
access-list 1 permit 127.0.0.1
line vty
 access-class 1
[root@LVS1 ~]# systemctl  start zebra
[root@LVS1 ~]# systemctl  start ospfd

同理我们配置完LVS2后进行检测ospf状态

[root@LVS1 ~]# vtysh
Hello, this is Quagga (version 0.99.22.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
LVS1# show ip ospf  neighbor

    Neighbor ID Pri State           Dead Time Address         Interface            RXmtL RqstL DBsmL
192.168.0.7       1 Full/DR            3.817s 192.168.0.1     ens33:192.168.0.2        0     0     0
192.168.0.3       0 2-Way/DROther      3.518s 192.168.0.3     ens33:192.168.0.2        0     0     0
LVS1# show ip ospf  route
============ OSPF network routing table ============
N    192.168.0.0/24        [1] area: 0.0.0.0
                           directly attached to ens33
N    192.168.0.100/32      [1] area: 0.0.0.0
                           directly attached to lo
N    192.168.1.0/24        [2] area: 0.0.0.0
                           via 192.168.0.1, ens33

============ OSPF router routing table =============

============ OSPF external routing table ===========

在Route上查看路由

router# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, A - Babel,
       > - selected route, * - FIB route

K>* 0.0.0.0/0 via 192.168.0.10, ens33
C>* 127.0.0.0/8 is directly connected, lo
O   192.168.0.0/24 [110/1] is directly connected, ens33, 00:11:04
C>* 192.168.0.0/24 is directly connected, ens33
O   192.168.0.100/32 [110/2] via 192.168.0.2, ens33 inactive, 00:00:11
                             via 192.168.0.3, ens33 inactive, 00:00:11
O   192.168.1.0/24 [110/1] is directly connected, ens38, 00:12:19
C>* 192.168.1.0/24 is directly connected, ens38
//可以看到 到 192.168.0.100/32 的下一跳分配到 192.168.0.2、192.168.0.3

Client 测试

[root@Client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
[root@Client ~]# traceroute 192.168.0.100
traceroute to 192.168.0.100 (192.168.0.100), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  0.575 ms  0.258 ms  0.478 ms
 2  192.168.0.100 (192.168.0.100)  1.901 ms  1.746 ms  1.370 ms
[root@Client ~]# curl 192.168.0.100
RealServer1 192.168.0.4

自动化

以上是最基础的ospf-Lvs集群配置,在实际生产环境中会有自动化部署、监控、告警等需求,例如quagga的初始化配置文章来源地址https://www.toymoban.com/news/detail-671056.html

quagga 配置

HOSTNAME=`hostname`
PASSWORD=shenyangchangkuan
#获取默认路由对应网卡
NIC=`/sbin/route -n|awk '$1=="default"||$1=="0.0.0.0"{print $NF}'|head -n 1`
if [ -z $NIC ];then
    echo "get NIC err,NIC is null!"
fi
#获取该网卡IP
#centos7改为下面这行
#IP=`/sbin/ifconfig $NIC |grep "inet "|sed 's/:/ /'|awk '{print $2}'`
IP=`/sbin/ifconfig $NIC|grep "inet addr"|sed 's/:/ /'|awk '{print $3}'`
if  [ -z $IP ];then
    echo "get IP err,IP is null!"
    exit 1
fi


#将该网卡及子网卡IP信息写入tmp/lvs_network.tmp
echo "">/tmp/lvs_network.tmp
for cfg in ` ls -l  /etc/sysconfig/network-scripts/ifcfg-${NIC}*|awk '{print $NF}'`
do
  cat $cfg |grep IPADDR=|awk -F "=" '{print $2}' |sed 's/"//g'>>/tmp/lvs_network.tmp
done

到了这里,关于Ceph入门到精通-大流量10GB/s支持OSPF(ECMP)-LVS 集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ceph入门到精通-Ceph版本升级命令

    Cephadm 可以安全地将 Ceph 从一个错误修复版本升级到下一个错误修复版本。为 例如,你可以从v15.2.0(第一个八达通版本)升级到下一个 点发布,v15.2.1。 自动升级过程遵循 Ceph 最佳实践。例如: 升级顺序从管理器、监视器开始,然后是其他守护程序。 每个守护程序仅在 Ce

    2024年02月10日
    浏览(47)
  • Ceph入门到精通-podman 入门实战

    目录 podman安装 podman制作本地镜像 podman(docker)命令回顾 podman快速入门 一入编程深似海,从此节操是路人。 最近使用podman,就想着写一篇总结性的笔记,以备后续参考。就如同写代码,不写注释,过了一段时间可能会想这是我写的吗?不会吧,还要理一下逻辑才能读懂,不利

    2023年04月24日
    浏览(43)
  • Ceph入门到精通-使用 Ceph 编排器管理 OSD

    作为存储管理员,您可以使用 Ceph 编排器来管理红帽 Ceph 存储集群的 OSD。 当红帽 Ceph 存储集群启动并运行时,您可以在运行时将 OSD 添加到存储集群。 Ceph OSD 通常由一个存储驱动器的一个守护进程及其节点中的关联日志组成。如果节点有多个存储驱动器,则为每个驱动器映

    2024年02月05日
    浏览(53)
  • Ceph入门到精通-Ceph PG状态详细介绍(全)

    本文主要介绍PG的各个状态,以及ceph故障过程中PG状态的转变。 Ceph is still creating the placement group. Ceph 仍在创建PG。 activating The placement group is peered but not yet active. PG已经互联,但是还没有active。 active Ceph will process requests to the placement group. Ceph 可处理到此PG的请求。 clean Ceph re

    2024年02月14日
    浏览(36)
  • Ceph入门到精通-ceph故障处理 - osd down处理

    发现osd掉之后,我们首先要确认是哪个主机的哪块盘,来判断是这个盘坏了还是什么原因 来看一下是哪两块 登录对应机器确认下是哪块盘 2.我们发现盘还在,首先尝试能否重启ceph-osd服务 ,这里已经拉起来了 3.如果重启无望或者盘漂移,重新卸载安装 3.1 看看日志 是不是有

    2024年02月01日
    浏览(39)
  • Ceph入门到精通-创建存储桶通知

    在存储桶级别创建存储桶通知。这些需要 与发送存储桶通知的目标一起发布。桶 通知是 S3 操作。 父主题: 存储桶管理 运行 IBM Storage Ceph 集群,带有 Ceph Object Gateway。 正在运行的 HTTP 服务器、RabbitMQ 服务器或 Kafka 服务器。 根级访问。 用户访问密钥和私有密钥。 终结点参数

    2024年02月15日
    浏览(83)
  • Ceph入门到精通-sysctl参数优化

    sysctl.conf  是一个文件,通常用于在 Linux 操作系统中配置内核参数。这些参数可以控制网络、文件系统、内存管理等各方面的行为。 99-xx.yml  可能是一个文件名,其中  99-  是一个特定的命名约定。在  sysctl.conf  文件中,通常会有一个特定的顺序来加载配置项。通常,以 

    2024年02月10日
    浏览(38)
  • Ceph入门到精通-Linux下Ceph源码编译和GDB调试

    Ceph版本:14.2.22 Linux版本:ubuntu-server 18.04     Ceph源码是托管在Github上,由于某些原因,国内访问Github网站很慢,所以需要从其他途径加速获取源码。Github官方给出了几个Github的镜像网站: https://github.com.cnpmjs.org/ https://hub.fastgit.org/ 本地需要修改~/.gitconfig文件,才可以从上面

    2024年02月12日
    浏览(33)
  • Ceph入门到精通-如何编译安装Quagga?

    Quagga Quagga中文翻译斑驴,是一种先进的路由软件包,提供一套基于TCP/IP的路由协议。 – 使得操作系统变成专业的路由 – 使得操作系统具有与传统路由通过路由协议直接对接 – BGP – OSPF – RIP – IS-IS – MPLS – LDP – BFD – PIM-SSM – 传统路由以提供所有路由协议的过程程序的

    2024年02月11日
    浏览(40)
  • Ceph入门到精通-Nginx 大量请求 延迟优化

    优化nginx以处理大量请求并减少延迟可以通过以下几种方法实现: 调整worker_processes和worker_connections参数:增加worker_processes值可以增加nginx的进程数量,提高并发处理能力。增加worker_connections参数的值可以增加每个worker进程可处理的连接数,从而在请求高峰期更好地分配负载。

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包