第24讲:Ceph集群RGW对象存储高可用集群部署与测试

文章目录

    • 1.RGW对象存储高可用集群架构
      • 1.1.环境规划
      • 1.2.高可用集群架构图
    • 2.部署RGW对象存储高可用集群
      • 2.1.在所有的Ceph节点中部署RGW
      • 2.2.部署Haproxy负载均衡服务
      • 2.3.配置Haproxy负载均衡三个节点中的RGW
      • 2.4.配置Keepalived实现RGW高可用集群
      • 2.5.启动Keepalived并观察VIP地址
      • 2.6.使用高可用地址访问RGW对象存储服务
    • 3.配置S3以及Swift客户端连接RGW的高可用地址
      • 3.1.配置S3客户端连接RGW对象存储的地址
      • 3.2.配置Swift客户端连接RGW对象存储的地址
    • 4.RGW高可用集群测试

1.RGW对象存储高可用集群架构

在前面的文章中,讲解了单节点RadosGW的部署与使用,但是随着业务量的不断扩展,单节点很容易产生瓶颈,为了能承载更多的并发使用,需要为RGW对象存储组件部署高可用集群。

1.1.环境规划

由于服务器数量有限,因此将Haproxy和Keepalived组件都部署在了Ceph节点中,如果条件可以,可以将这两个服务单独部署在两台服务器中。

主机名IP地址端口号软件VIP地址
ceph-node-1192.168.20.20Haproxy:80 RGW:7480keepalived+Haproxy+RGW192.168.20.30:80
ceph-node-2192.168.20.21Haproxy:80 RGW:7480keepalived+Haproxy+RGW
ceph-node-3192.168.20.22Haproxy:80 RGW:7480RGW

1.2.高可用集群架构图

我们分布在Ceph的每一个节点中都部署一个RGW组件,一共部署三个RGW组件,通过Haproxy组件将三个RGW组件形成负载均衡,为了实现高可用机制,Haproxy会部署两套,每一套都会去负载均衡三个RGW组件,最后将两个Haproxy配置成高可用集群,提供一个虚拟IP,客户端直接通过这个虚拟IP来访问RGW对象存储。

image-20220410002703789

2.部署RGW对象存储高可用集群

两个keepalive—>两个Haproxy—>三个RGW

2.1.在所有的Ceph节点中部署RGW

1)在所有节点中安装radosgw组件

[root@ceph-node-1 ~]# yum -y install ceph-radosgw
[root@ceph-node-2 ~]# yum -y install ceph-radosgw
[root@ceph-node-3 ~]# yum -y install ceph-radosgw

2)使用ceph-deploy工具配置各个节点中的radosgw组件

端口号无需修改,使用默认的7480就行,因为在后面还会去配置Haproxy充当负载均衡

[root@ceph-node-1 ~]# cd /data/ceph-deploy/
[root@ceph-node-1 ceph-deploy]# ceph-deploy --overwrite-conf rgw create ceph-node-1 ceph-node-2 ceph-node-3

image-20220409220406975

3)重启每个节点的radosgw组件

[root@ceph-node-1 ceph-deploy]# for i in {1..3}; do ssh ceph-node-${i} "systemctl restart ceph-radosgw.target" ; done

4)查看每个节点启动的端口号

[root@ceph-node-1 ceph-deploy]# for i in {1..3}; do ssh ceph-node-${i} "echo ceph-node-${i}: && netstat -lnpt | grep radosgw" ; done
ceph-node-1:
tcp        0      0 0.0.0.0:7480            0.0.0.0:*               LISTEN      79136/radosgw       
tcp6       0      0 :::7480                 :::*                    LISTEN      79136/radosgw       
ceph-node-2:
tcp        0      0 0.0.0.0:7480            0.0.0.0:*               LISTEN      45456/radosgw       
tcp6       0      0 :::7480                 :::*                    LISTEN      45456/radosgw       
ceph-node-3:
tcp        0      0 0.0.0.0:7480            0.0.0.0:*               LISTEN      46969/radosgw       
tcp6       0      0 :::7480                 :::*                    LISTEN      46969/radosgw

5)测试rgw是否可用

curl 127.0.0.1:7480
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>

2.2.部署Haproxy负载均衡服务

在ceph-node-1和ceph-node-2节点中部署,部署两套Haproxy负载均衡,最后由Keepalived形成高可用集群。

直接使用yum部署即可。

[root@ceph-node-1 ~]# yum -y install haproxy

2.3.配置Haproxy负载均衡三个节点中的RGW

分别将两个Haproxy配置负载均衡三个节点的RGW组件。

1)编写配置文件

[root@ceph-node-1 ~]# cat /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  main *:80							#端口号
    mode http								#协议使用http
    default_backend rgw_cluster				#关联资源池

backend rgw_cluster							#定义资源池
    balance     roundrobin					#调度算法使用轮询
    mode http								#类型http
    server  ceph-node-1 192.168.20.20:7480 check			#各节点的地址
    server  ceph-node-2 192.168.20.21:7480 check
    server  ceph-node-3 192.168.20.22:7480 check

2)将配置文件拷贝至另外的Haproxy中

[root@ceph-node-1 ~]# scp /etc/haproxy/haproxy.cfg root@192.168.20.21:/etc/haproxy/
haproxy.cfg 

3)重启所有的Haproxy服务

[root@ceph-node-1 ~]# systemctl start haproxy && systemctl enable haproxy
[root@ceph-node-2 ~]# systemctl start haproxy && systemctl enable haproxy

4)测试是否可以访问到RGW

curl 127.0.0.1
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>

2.4.配置Keepalived实现RGW高可用集群

1)在两台服务器中部署Keepalived

[root@ceph-node-1 ~]# yum -y install keepalived
[root@ceph-node-2 ~]# yum -y install keepalived

2)将ceph-node-1节点的Keepalived配置成Master节点

ceph-node-1节点设置为主Keepalived,当主keepalived挂掉之后,再由ceph-node-2节点的备用keepalived升级为主节点。

[root@ceph-node-2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER
}
vrrp_script chk_haproxy {	 	 #健康检查脚本,检测到haproxy异常时优先级降低20,降低20后优先级就会比备用节点低,从而使备用节点升级为主节点
   script "/etc/keepalived/chk_haproxy.sh"		#当执行脚本的返回状态码大于0则将优先级降低20
   interval 2								#检查间隔
   weight -20								#优先级降低20
}

vrrp_instance RGW_CLUSTER {
    state MASTER					#状态为MASTER
    interface ens192				#将VIP绑定在哪块网卡上
    virtual_router_id 51			#实例ID,集群所有节点都要保持一致
    priority 100					#优先级,255最高
    advert_int 1					#指定VRRP心跳包通告间隔时间,默认1秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.20.30/23					#定义VIP地址
    }
    track_script {
    	chk_haproxy 	 	 	 	 #健康检查脚本
	}    
}

3)将ceph-node-2节点的Keepalived配置成BACKUP节点

ceph-node-2节点设置为备用Keepalived,当主keepalived挂掉之后,由ceph-node-2节点的备用keepalived升级为主节点。

[root@ceph-node-2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER
}
vrrp_script chk_haproxy {	 	 #健康检查脚本,检测到haproxy异常时权重降低20
   script "/etc/keepalived/chk_haproxy.sh"		
   interval 2
   weight -20
}

vrrp_instance RGW_CLUSTER {
    state BACKUP					#状态为BACKUP
    interface ens192				#将VIP绑定在哪块网卡上
    virtual_router_id 51			#实例ID,集群所有节点都要保持一致
    priority 90					#优先级要比主节点低
    advert_int 1					#指定VRRP心跳包通告间隔时间,默认1秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.20.30/23					#定义VIP地址
    }
    
    track_script {
    	chk_haproxy 	 	 	 	 #健康检查脚本
	}
}

3)检测Haproxy组件运行状态的脚本

vim /etc/keepalived/chk_haproxy.sh
haproxy_process_count=`ps aux | grep haproxy.cfg | grep -v grep | wc -l`
if [ $haproxy_process_count -eq 0 ];then
	exit 1
else
	exit 0
fi

chmod a+x /etc/keepalived/chk_haproxy.sh

2.5.启动Keepalived并观察VIP地址

1)启动Keepalived服务

[root@ceph-node-1 ~]# systemctl start keepalived && systemctl enable keepalived
[root@ceph-node-2 ~]# systemctl start keepalived && systemctl enable keepalived

2)观察Keepalived生成的虚拟地址

ceph-node-1节点是Keepalived的主节点,虚拟地址也会生成在这个节点中,通过这个虚拟地址来充当服务的高可用入口。

[root@ceph-node-1 ~]# 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:b7:aa:0c brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.20/23 brd 192.168.21.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
    inet 192.168.20.30/23 scope global secondary ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:feb7:aa0c/64 scope link 

2.6.使用高可用地址访问RGW对象存储服务

浏览器访问虚拟IP测试能否访问到RGW对象存储服务。

image-20220409230529071

3.配置S3以及Swift客户端连接RGW的高可用地址

RGW高可用集群已经搭建完成,下面配置S3以及Swift这两个客户端连接RGW的地址,修改成RGW的高可用地址。

3.1.配置S3客户端连接RGW对象存储的地址

1.在s3的配置文件中修改连接RGW对象存储的地址
[root@ceph-node-1 ~]# vim .s3cfg 
host_base = 192.168.20.30
host_bucket = 192.168.20.30/%(bucket)s

2.验证是否可用正常使用RGW对象存储
#查看对象存储中的Bucket
[root@ceph-node-1 ~]# s3cmd ls
2022-04-03 01:51  s3://cephrgw-s3-bucket
2022-04-03 02:43  s3://s3cmd-test-data

#创建一个Bucket
[root@ceph-node-1 ~]# s3cmd mb s3://test-bucket-1
Bucket 's3://test-bucket-1/' created

#删除Bucket
[root@ceph-node-1 ~]# s3cmd rb s3://test-bucket-1
Bucket 's3://test-bucket-1/' removed

3.2.配置Swift客户端连接RGW对象存储的地址

1.在swift的环境变量中修改连接RGW对象存储的地址
[root@ceph-node-1 ~]# vim /etc/profile
export ST_AUTH=http://192.168.20.30/auth
export ST_USER=cephrgw-swift-user:swift
export ST_KEY=QrRc6zzMaDj0ayxwuaFsxnOT8kRYZxfuGBqkQLDu

2.验证是否可用正常使用RGW对象存储
#查看对象存储中的Bucket
[root@ceph-node-1 ~]# swift list
bucket-2

#创建一个Bucket
[root@ceph-node-1 ~]# swift post test-bucket

#删除Bucket
[root@ceph-node-1 ~]# swift delete test-bucket
test-bucket

4.RGW高可用集群测试

我们停掉一个节点的Haproxy来测试RGW集群的高可用性,观察当一个节点的Haproxy挂掉后,Keepalived是否会自动切换主备模式,让正常的Haproxy来提供服务。

1)停掉ceph-node-1节点的Haproxy服务。

[root@ceph-node-1 ~]# systemctl stop haproxy

停掉ceph-node-1节点的Haproxy服务后,Keepalived随之就检测到Haproxy的服务异常了,并且自动将优先级下降20,原本主节点keepalived的优先级为100,备用节点的keepalived优先级的为90,主节点下降20后,优先级变成了80,优先级比备用节点低,此时备用节点就认为自己是主节点,从而抢占了主节点的VIP地址,并将自己升级为了主节点,此时的主节点也知道优先级比它低,故而放弃主节点和VIP地址。

image-20220409235228352

这个切换速度是非常快的,用户几乎无感知。

2)观察RGW服务可用继续提供服务,高可用测试通过。

image-20220409235524442

3)当ceph-node-1节点中的Haproxy正常运行后,原本为Master节点的Keepalived会再次增加优先级,故而抢占备用节点上的VIP地址,重新成为集群服务的提供者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674329.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于域环境

一.什么是域 Windows域是计算机网络的一种形式&#xff0c;其中所有用户帐户&#xff0c;计算机&#xff0c;打印机和其他安全主体都向位于一个或多个中央计算机群集&#xff08;域控制器&#xff09;上的中央数据库注册。通过域用户登录域内主机&#xff0c;需要通过域控制器…

升级你的工作流:集成钉钉企微的可道云teamOS网盘体验全攻略,办公体验瞬间升级

我们知道&#xff0c;企业微信、钉钉扫码登录已经成为现代企业高效办公的标配。 然而&#xff0c;市面上绝大多数企业网盘产品&#xff0c;都无法对接企业微信和钉钉&#xff0c;这无疑给企业的工作流程带来一定困扰。 今天给大家介绍一下&#xff0c;集成了钉钉和企微的企业…

动态规划1:1137. 第 N 个泰波那契数

动态规划解题步骤&#xff1a; 1.确定状态表示&#xff1a;dp[i]是什么 2.确定状态转移方程&#xff1a;dp[i]等于什么 3.初始化&#xff1a;确保状态转移方程不越界 4.确定填表顺序&#xff1a;根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接&#xff1a;1137…

格式化数据恢复指南:从备份到实战,3个技巧一网打尽

朋友们&#xff01;你们有没有遇到过那种“啊&#xff0c;我的文件呢&#xff1f;”的尴尬时刻&#xff1f;无论是因为手滑、电脑抽风还是其他原因&#xff0c;数据丢失都可能会让我们抓狂&#xff0c;甚至有时候&#xff0c;我们可能一不小心就把存储设备格式化了&#xff0c;…

第二证券:A股年内首家非ST股面值退市!这类ST股数量逐年增加

A股出清残次上市公司的速度正在加速。 年内首家非ST退市股“诞生” 5月30日晚间&#xff0c;正源股份公告称已收到买卖所下发的《关于拟停止正源控股股份有限公司股票上市的事前奉告书》&#xff0c;2024年4月30日至2024年5月30日&#xff0c;公司股票接连20个买卖日的每日股…

强达电路营收下滑净利润急剧放缓:周转率骤降,2次因环保被罚

《港湾商业观察》施子夫 自2022年6月向深交所创业板递交招股书起&#xff0c;深圳市强达电路股份有限公司&#xff08;以下简称&#xff0c;强达电路&#xff09;已收到深交所下发的两轮审核问询函&#xff0c;并且公司已于2023年3月31日顺利过会。但由于迟迟未提交注册申请&a…

用SNMP模仿Zabbix读取设备接口流量

正文共&#xff1a;666 字 11 图&#xff0c;预估阅读时间&#xff1a;1 分钟 前文&#xff08;通过SNMP统计网络资产&#xff09;介绍了SNMPWALK的安装及简单使用。SNMP的功能还是十分强大的&#xff0c;几乎所有设备上支持查看的信息通过SNMP协议都能读取到&#xff0c;甚至有…

API开放平台项目细节

1.前端如何区分用户权限的&#xff0c;是管理员还是普通用户&#xff1f; Ant Design Pro内置了一套权限管理机制&#xff0c;通过access.ts页面实现。它会去取到全局初始化状态&#xff08;InitialState&#xff09;的loginUser&#xff0c;根据当前登录用户判断是否有管理员…

建设智慧校园,需要哪些步骤?

智慧校园作为校园信息化的载体&#xff0c;涵盖了校园事务的各个方面。由于涉及系统过多&#xff0c;构建一个数字化校园是一个复杂的过程&#xff0c;因为智慧校园不是单独存在的&#xff0c;而是需要作为数据中心与业务枢纽连接学校的各个业务系统。 因此&#xff0c;有步骤&…

C# MQTTNET 服务端+客户端 实现 源码示例

目录 1.演示效果 2.源码下载 3.服务端介绍 4.客户端介绍 1.演示效果 2.源码下载 下载地址&#xff1a;https://download.csdn.net/download/rotion135/89385802 3.服务端介绍 服务端用的控制台程序进行设计&#xff0c;实际使用可以套一层Windows服务的皮&#xff0c;进…

015、列表_应用场景

1.消息队列 如图所示,Redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性。 2.文章列表 每个用户有属于自己的文章列表,现…

CSAPP Lab07——Malloc Lab完成思路

等不到天黑 烟火不会太完美 回忆烧成灰 还是等不到结尾 ——她说 完整代码见&#xff1a;CSAPP/malloclab-handout at main SnowLegend-star/CSAPP (github.com) Malloc Lab 按照惯例&#xff0c;我先是上来就把mm.c编译了一番&#xff0c;结果产生如下报错。搜索过后看样子应…

Matlab进阶绘图第58期—带填充纹理的横向堆叠图

带填充纹理的横向堆叠图是通过在原始横向堆叠图的基础上添加不同的纹理得到的&#xff0c;可以很好地解决由于颜色区分不够而导致的对象识别困难问题。 由于Matlab中未收录提供填充纹理选项&#xff0c;因此需要大家自行设法解决。 本文使用hatchfill2工具&#xff08;Kesh I…

一些智能音箱类的软硬件方案

主要参考资料 Rabbit R1: https://www.rabbit.tech/rabbit-r1 mediatek-helio-p35: https://www.mediatek.com/products/smartphones-2/mediatek-helio-p35 NSdisplay: https://www.nsdisplay.com/ai-holobox-mini/ai-holobox-mini.html RK3566: https://www.rock-chips.com/a/…

I2C总线上拉电阻计算

I2C 总线上拉电阻计算 I2C接口的上拉电阻计算是一个常见问题。本文介绍如何使用简单的方程式进行计算。 1 介绍 I2C通信标准是当今电子系统中应用最广泛的芯片间通信标准。它是一种漏极开路/集电极开路通信标准&#xff0c;这意味着可以连接具有不同电源轨的集成电路 &#…

java jar包后台运行方式

在实际工作中&#xff0c;java开发的spring boot等通过jar包部署需要一直运行的程序部署到服务器上时&#xff0c;都希望后台运行&#xff0c;方便管理程序服务、防止被误操作关闭&#xff0c;本文结合自己工作经验讲解jar包后台运行的两种方式&#xff0c;分别是按操作系统支持…

LeetCode 两两交换链表中的节点

原题链接24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff0c;请看图片的过程模拟&#xff0c;这里添加了一个哨兵节点0&#xff0c;目的是为了方便操作&#xff0c;得到指向1节点的指针。 class Solution {public:ListNode* swapPairs(ListNod…

17、matlab实现均值滤波、中值滤波、Butterworth滤波和线性相位FIR滤波

1、创建信号 1&#xff09;创建正余弦信号、噪声信号和混合信号 原始正余弦信号公式&#xff1a;Signal1 sin(2*pi*20* t) sin(2*pi*40* t) sin(2*pi*60* t) 高斯分布的白噪声&#xff1a;NoiseGauss [randn(1,2000)] 均匀分布的白噪声&#xff1a;[rand(1,2000)] 正余弦…

AD软件底层丝印反转

快捷键VB&#xff0c;翻转后底部视图所有显示就正常了&#xff0c;当底层确认之后再按VB就回到正常状态。 否则你就看到一个镜像的丝印。 快捷键VB后 注意&#xff0c;经过VB反转BOTTOM后TOP层的丝印变镜像翻转了。 设计完毕后调整过来即可。

物质的量质量,它们可不是一个概念

物质的量&质量&#xff0c;它们可不是一个概念。 物质的量&质量 乍一听物质的量&#xff0c;还以为是和质量有什么关系&#xff0c;是不是&#xff1f;其实物质的量和质量没什么直接的联系。 物质的量是国际单位制中7个基本物理量之一&#xff0c;其符号为n&#xf…