第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
globallog         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxydaemonstats socket /var/lib/haproxy/statsdefaultsmode                    httplog                     globaloption                  httplogoption                  dontlognulloption http-server-closeoption forwardfor       except 127.0.0.0/8option                  redispatchretries                 3timeout http-request    10stimeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1mtimeout http-keep-alive 10stimeout check           10smaxconn                 3000frontend  main *:80							#端口号mode http								#协议使用httpdefault_backend rgw_cluster				#关联资源池backend rgw_cluster							#定义资源池balance     roundrobin					#调度算法使用轮询mode http								#类型httpserver  ceph-node-1 192.168.20.20:7480 check			#各节点的地址server  ceph-node-2 192.168.20.21:7480 checkserver  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.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id NGINX_MASTER
}
vrrp_script chk_haproxy {	 	 #健康检查脚本,检测到haproxy异常时优先级降低20,降低20后优先级就会比备用节点低,从而使备用节点升级为主节点script "/etc/keepalived/chk_haproxy.sh"		#当执行脚本的返回状态码大于0则将优先级降低20interval 2								#检查间隔weight -20								#优先级降低20
}vrrp_instance RGW_CLUSTER {state MASTER					#状态为MASTERinterface ens192				#将VIP绑定在哪块网卡上virtual_router_id 51			#实例ID,集群所有节点都要保持一致priority 100					#优先级,255最高advert_int 1					#指定VRRP心跳包通告间隔时间,默认1秒authentication {auth_type PASSauth_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.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id NGINX_MASTER
}
vrrp_script chk_haproxy {	 	 #健康检查脚本,检测到haproxy异常时权重降低20script "/etc/keepalived/chk_haproxy.sh"		interval 2weight -20
}vrrp_instance RGW_CLUSTER {state BACKUP					#状态为BACKUPinterface ens192				#将VIP绑定在哪块网卡上virtual_router_id 51			#实例ID,集群所有节点都要保持一致priority 90					#优先级要比主节点低advert_int 1					#指定VRRP心跳包通告间隔时间,默认1秒authentication {auth_type PASSauth_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 ];thenexit 1
elseexit 0
fichmod 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 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:50:56:b7:aa:0c brd ff:ff:ff:ff:ff:ffinet 192.168.20.20/23 brd 192.168.21.255 scope global noprefixroute ens192valid_lft forever preferred_lft foreverinet 192.168.20.30/23 scope global secondary ens192valid_lft forever preferred_lft foreverinet6 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)s2.验证是否可用正常使用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=QrRc6zzMaDj0ayxwuaFsxnOT8kRYZxfuGBqkQLDu2.验证是否可用正常使用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地址,重新成为集群服务的提供者。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有本HCIE,作用真的不大

在现在内卷的时代&#xff0c;获得专业认证是提升个人职业竞争力的重要途径之一。 获取认证证书是一种常见的提升自身技能和职业竞争力的方法。 然而&#xff0c;仅仅持有一张证书&#xff0c;并不能保证你在实际工作中游刃有余。 真正将其知识转化为技术能力&#xff0c;才…

学会读书并不简单,如何真正学会读书

一、教程描述 读书是要讲究方法的&#xff0c;否则就会事倍功半&#xff0c;比如&#xff0c;在学习书本上的每一个问题每一章节的时候&#xff0c;首先应当不只看到书面上&#xff0c;而且还要看到书背后的东西&#xff0c;在对书中每一个问题都经过细嚼慢咽&#xff0c;其次…

ClickHouse如何整合数据源:MySQL、HDFS...

一、ClickHouse数据源 ClickHouse 作为一个强大的列式数据库管理系统&#xff0c;支持多种数据源&#xff0c;使得用户能够方便地将数据导入 ClickHouse 进行存储和分析。以下是常见的 ClickHouse 数据源&#xff1a; 外部数据源 HDFS&#xff1a; 支持从 Hadoop 分布式文件系…

0基础认识C语言(理论知识)

为了给0基础一个舒服的学习路径&#xff0c;就有了这个专栏希望带大家一起进步。 话不多说&#xff0c;开始正题。 一、C语言的一段小历史 C语言的设计要追溯到20世纪60年代末和70年代初&#xff0c;在那个时代美国有这么一号人叫做丹尼斯.里奇&#xff0c;他和同事肯.汤普逊…

小程序使用Canvas设置文字竖向排列

在需要使用的js页面引入js文件,传入对应参数即可 /** * 文本竖向排列 */ function drawTextVertical(context, text, x, y) {var arrText text.split();var arrWidth arrText.map(function (letter) {return 26; // 字体间距,需要自定义可以自己加参数,根据传入参数进行…

计算机网络学习实践:DHCP跨网段动态分配IP

计算机网络学习实践&#xff1a;DHCP跨网段动态分配IP 1.实验准备 实验环境&#xff1a;思科的模拟器 实验设备&#xff1a; 1个服务器&#xff0c;2个二层交换机&#xff08;不是三层的&#xff09;&#xff0c;4个PC机&#xff0c;1个路由器 三个网段 192.168.1.0 255.…

logback删除日志文件和文件夹

​​​​​一&#xff0c;事由和源码 logback版本1.2.11 网上找了很多都是无法删除文件夹的&#xff0c;原先使用的TimeBasedRollingPolicy无法删除日志的文件夹&#xff0c;有很多空的日期文件夹&#xff0c;于是查看TimeBasedRollingPolicy源码发现有校验不删除文件夹&#x…

Docker的网络管理

文章目录 一、Docker容器之间的通信1、直接互联&#xff08;默认Bridge网络&#xff09;1.1、Docker安装后默认的网络配置1.2、创建容器后的网络配置1.2.1、首先创建一个容器1.2.2、ip a 列出网卡变化信息1.2.3、查看新建容器后的桥接状态 1.3、容器内安装常见的工具1.4、容器间…

46、Flink 的 异步 I/O 算子详解

异步 I/O 1.需求 在与外部系统交互&#xff08;用数据库中的数据扩充流数据&#xff09;时&#xff0c;需要考虑与外部系统的通信延迟对整个流处理应用的影响。 同步交互&#xff1a;使用 MapFunction访问外部数据库的数据&#xff0c; MapFunction 向数据库发送一个请求然后…

高级 Go 程序设计:使用 net/http/httputil 包构建高效网络服务

高级 Go 程序设计&#xff1a;使用 net/http/httputil 包构建高效网络服务 介绍ReverseProxy 的使用基本概念实现步骤高级配置实际案例 DumpRequest 的使用功能说明代码示例应用场景NewSingleHostReverseProxy 的特性功能概述 详细教程 注意事项使用 NewChunkedWriter 实现高效…

C语言 带头双向循环链表的基本操作

带头双向循环链表的基本操作 结构体定义初始化创建新节点头插头删尾插尾删查找在指定位置之后插入删除指定位置的值打印 结构体定义 typedef int DataType; typedef struct LinkNode {DataType data;struct LinkNode* prev;struct LinkNode* next; }LNode;初始化 有两种初始化…

远控免杀篇

0x00&#xff1a;前言 随着近两年hvv和红蓝对抗以及国家对于网络安全的重视&#xff0c;国内防护水平都蹭蹭上了一个台阶&#xff0c;不管是内部人员的技术水平提高还是防护设备的层层部署&#xff0c;均给了红队人员想要进一步行动设置了障碍。 通过weblogic的cve-2019-2725获…

MLPerf storage基准测试

MLPerf 基准测试 什么是 MLPerf&#xff1f;MLPerf™ 基准测试由来自学术界、研究实验室和行业的 AI 领导者联盟 MLCommons 开发&#xff0c;旨在对硬件、软件和服务的训练和推理性能进行无偏评估。它们都在规定的条件下进行。为了保持在行业趋势的前沿&#xff0c;MLPerf 不断…

C基础-标准库上

下:http://t.csdnimg.cn/LXa0J C 标准库是一组 C 内置函数、常量和头文件&#xff0c;比如 <stdio.h>、<stdlib.h>、<math.h>&#xff0c;等等。 目录 一. assert.h 二. ctype.h 三. errno.h 四. float.h 五.limits.h 六. locale.h 一. assert.h 源码…

166.二叉树:相同的树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

【机器学习】RLHF:在线方法与离线算法在大模型语言模型校准中的博弈

RLHF&#xff1a;在线方法与离线算法在大型语言模型校准中的博弈 一、引言二、RLHF概述三、在线方法与离线算法的对比四、实验验证与代码实例 一、引言 在人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;的校准已成为一个备受关注的热点。基于人类反馈的强化…

实现spring配置bean类机制

大家好&#xff0c;这里是教授.F 流程说明&#xff1a; 我们自己实现spring配置bean类的机制&#xff0c;要先了解原本是怎么实现的。 原本的机制就是有一个bean配置文件&#xff0c;还有一个ApplicationContext spring文件。bean类写着要扫描的文件信息&#xff0c;spring文…

【Python学习】数据结构+正则表达式

个人主页&#xff1a;Yang-ai-cao 系列专栏&#xff1a;Python学习 博学而日参省乎己&#xff0c;知明而行无过矣 目录 个人主页&#xff1a;Yang-ai-cao 系列专栏&#xff1a;Python学习 博学而日参省乎己&#xff0c;知明而行无过矣 数据结构 一、列表&#xff08;Lis…

风电机组与风力发电机:它们是同一个东西吗?

风电机组与风力发电机&#xff1a;它们是同一个东西吗&#xff1f; 风电机组和风力发电机是两个常见的术语&#xff0c;尤其是在可再生能源领域。虽然这两个术语有时会被混淆使用&#xff0c;但它们实际上指的是不同的设备和系统。为了弄清楚它们之间的关系&#xff0c;本文将…

最近很火的 ChatTTS项目,有大佬做的 ChatTTS-UI 来啦

地址&#xff1a;https://github.com/jianchang512/ChatTTS-ui 》》》更多开源项目 ChatTTS webUI & API 一个简单的本地网页界面&#xff0c;直接在网页使用 ChatTTS 将文字合成为语音&#xff0c;支持中英文、数字混杂&#xff0c;并提供API接口。 Releases中可下载Wi…