当前位置: 首页 > news >正文

CEPH RGW多 ZONE的配置

相关的名称解释

Region :可以理解为区域,是基于地理位置的逻辑划分;如:华南,华北之类,包含多个regionCeph集群必须指定一个master region,一个region可以包含一个或者多个zone 
Zone : 可以理解为可用区,它包含一组Ceph rgw实例,一个region必须指定一个master zone用以处理客户端请求。

部署拓扑

本文描述的多可用区部署拓扑如下:

                   Ceph
                     |
                     SH   
                  /      \
             SH-1         SH-2
               |            |
            SH-SH-1     SH-SH-2

Ceph集群配置名为SHRegion,在Region下配置名为SH-1SH-2两个Zone,并将SH-1设置为master, SH-2备用,可以通过radosgw-agent 实现数据复制;每个Zone各运行一个rgw实例,分别为SH-SH-1SH-SH-2


rgw组成要素

rgw作为一个客户端,包含如下基本元素:

  • rgw实例名, 本文中两个实例分别是SH-SH-1,SH-SH-2
  • rgw实例用户
  • 存储池
  • ceph.conf中配置入口
  • rgw实例运行时数据目录
  • 前端配置文件

配置rgw

创建pools

Ceph rgw需要使用多个pool来存储相关的配置及用户数据。如果后续创建的rgw用户具有相关权限,在rgw实例启动的时候是会自动创建某些存储池的;但是,通常都会建议用户自行创建。为便于区别不同Zone,在各存储池名前冠以.{region-name}-{zone-name}前缀,SH-1SH-2的各存储池如下

.SH-SH-1.rgw.root

.SH-SH-1.rgw.control

.SH-SH-1.rgw.gc

.SH-SH-1.rgw.buckets

.SH-SH-1.rgw.buckets.index

.SH-SH-1.rgw.buckets.extra

.SH-SH-1.log

.SH-SH-1.intent-log

.SH-SH-1.usage

.SH-SH-1.users

.SH-SH-1.users.email

.SH-SH-1.users.swift

.SH-SH-1.users.uid

 

 

.SH-SH-2.rgw.root

.SH-SH-2.rgw.control

.SH-SH-2.rgw.gc

.SH-SH-2.rgw.buckets

.SH-SH-2.rgw.buckets.index

.SH-SH-2.rgw.buckets.extra

.SH-SH-2.log

.SH-SH-2.intent-log

.SH-SH-2.usage

.SH-SH-2.users

.SH-SH-2.users.email

.SH-SH-2.users.swift

.SH-SH-2.users.uid

创建存储池的命令如下: ceph osd pool create {pool_name} 128 128

注意:不要忘记存储池名前的’.’,否则在启动rgw实例的时候会失败

创建rgw用户及秘钥

  • 创建秘钥文件

    /etc/ceph/目录下创建秘钥文件并设置执行权限

#ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring

#chmod +r /etc/ceph/ceph.client.radosgw.keyring

  • 创建rgw用户及秘钥

为每个实例生成用户及秘钥,并存储到前述创建的秘钥文件中

#ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.SH-SH-1 --gen-key #ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.SH-SH-2 --gen-key


  • 授权

为前述创建的用户授予合适的权限

#ceph-authtool -n client.radosgw.SH-SH-1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring #ceph-authtool -n client.radosgw.SH-SH-2 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring

  • 注册

将用户添加到Ceph集群

#ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.SH-SH-1 -i /etc/ceph/ceph.client.radosgw.keyring #ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.SH-SH-2 -i /etc/ceph/ceph.client.radosgw.keyring


添加rgw实例信息到配置文件

  • 添加下述信息到ceph.conf配置文件
[global]
rgw region root pool = .SH.rgw.root //用于存储region信息,会自动创建

[client.radosgw.SH-SH-1] //实例名,格式为:{tpye}.{id} rgw region = SH //region名 rgw zone = SH-1 //zone名 rgw zone root pool = .SH-SH-1.rgw.root //根存储池,存储zone信息 keyring = /etc/ceph/ceph.client.radosgw.keyring //秘钥文件 rgw dns name = {hostname} //DNS ;rgw socket path = /var/run/ceph/$name.sock //unix路径 rgw frontends = fastcgi socket_port=9000 socket_host=0.0.0.0 host = {host-name} //主机名,通过`hostname -s`获得 [client.radosgw.SH-SH-2] rgw region = SH rgw zone = SH-2 rgw zone root pool = .SH-SH-2.rgw.root keyring = /etc/ceph/ceph.client.radosgw.keyring rgw dns name = {hostname} rgw frontends = fastcgi socket_port=9000 socket_host=0.0.0.0 host = {host-name}


各配置的含义请看上文的注解,这里要说明的一点是:rgw socket pathrgw frontends中的socket_port配置是互斥的并且rgw socket path配置优先,即:如果配置了rgw socket pathrgw实例将启动unix socket监听并忽略socket_port配置,只有在没有配置rgw socket path的情况下,rgw实例才会使用socket_portsocket_host建立socket监听

  • 更新ceph节点的配置信息

通过ceph-deploy推送配置文件到rgw实例节点

#ceph-deploy --overwrite-conf config push {inst-1} {inst-2}


创建Region

  • 创建region配置文件

创建一个包含region信息,名为sh.json的配置文件:

{ "name": "SH",           //region名
  "api_name": "SH", "is_master": "true", //设置为master "endpoints": "", //region之间的复制地址 "master_zone": "SH-1", //master zone "zones": [ { "name": "SH-1", "endpoints": [ "http:\/\/{fqdn}:80\/"], //zone之间的复制地址 "log_meta": "true", "log_data": "true"}, { "name": "SH-2", "endpoints": [ "http:\/\/{fqdn}:80\/"], "log_meta": "true", "log_data": "true"}], "placement_targets": [ //可用的位置组, { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement"}
 
 

endpoints是用于region之间,zone之间的数据复制地址,需设置为rgw实例前端(上例中{fqdn}需设置为主机名)的地址;如果是单region或者单zone配置,该地址可不设置

placement_targets指定可用的位置组,上文中只配置了一个;zone中的placement_pools配置值来源于此,placement_pools用来存储zone的用户数据,如:bucket,bucket_index

  • 创建Region

通过前述的sh.json配置文件创建region(通过一个实例执行即可)

#radosgw-admin region set --infile us.json --name client.radosgw.SH-SH-1
  • 1
  • 设置默认Region
#radosgw-admin region default --rgw-region=SH --name client.radosgw.SH-SH-1
  • 1
  • 更新regionmap
#radosgw-admin regionmap update --name client.radosgw.SH-SH-1 #radosgw-admin regionmap update --name client.radosgw.SH-SH-2
  • 1
  • 2

创建Zone

  • 创建两个分别包含zoneSH-1SH-2信息,名为sh-1.jsonsh-2.json的配置文件,sh-1.json的内容如下(sh-2.json中只是将SH-SH-1替换为SH-SH-2):
{ "domain_root": ".SH-SH-1.domain.rgw",
  "control_pool": ".SH-SH-1.rgw.control", "gc_pool": ".SH-SH-1.rgw.gc", "log_pool": ".SH-SH-1.log", "intent_log_pool": ".SH-SH-1.intent-log", "usage_log_pool": ".SH-SH-1.usage", "user_keys_pool": ".SH-SH-1.users", "user_email_pool": ".SH-SH-1.users.email", "user_swift_pool": ".SH-SH-1.users.swift", "user_uid_pool": ".SH-SH-1.users.uid", "system_key": { "access_key": "", "secret_key": ""}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".SH-SH-1.rgw.buckets.index", "data_pool": ".SH-SH-1.rgw.buckets"} } ] }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注意placement_pools配置,用来存储bucket,bucket index等信息key需要是定义region时placement_target中指定的某个name

  • 创建Zone - SH-1
#radosgw-admin zone set --rgw-zone=SH-1 --infile sh-1.json --name client.radosgw.SH-SH-1 #radosgw-admin zone set --rgw-zone=SH-1 --infile sh-1.json --name client.radosgw.SH-SH-1
  • 1
  • 2
  • 创建Zone - SH-2
#radosgw-admin zone set --rgw-zone=SH-2 --infile sh-2.json --name client.radosgw.SH-SH-2 #radosgw-admin zone set --rgw-zone=SH-2 --infile sh-2.json --name client.radosgw.SH-SH-2
  • 1
  • 2
  • 更新regionmap
#radosgw-admin regionmap update --name client.radosgw.SH-SH-1 #radosgw-admin regionmap update --name client.radosgw.SH-SH-2 
  • 1
  • 2
  • 3

创建Zone - 用户

Zone用户信息存储在Zone的存储池中,所以需要先配置Zone再创建用户;创建用户后,请注意保留access_keysecret_key信息,以便后面更新Zone信息:

#radosgw-admin user create --uid="sh-1" --display-name="Region-SH Zone-SH-1" --name client.radosgw.SH-SH-1 --system #radosgw-admin user create --uid="sh-2" --display-name="Region-SH Zone-SH-2" --name client.radosgw.SH-SH-2 --system
  • 1
  • 2
  • 3

更新 Zone

将上述创建的两个用户的access_keysecret_key分布拷贝到创建Zone那一节创建的两个配置文件sh-1.jsonsh-2.json中,并执行下面的命令更新Zone配置:

#radosgw-admin zone set --rgw-zone=SH-1 --infile sh-1.json --name client.radosgw.SH-SH-1 #radosgw-admin zone set --rgw-zone=SH-1 --infile sh-1.json --name client.radosgw.SH-SH-1 #radosgw-admin zone set --rgw-zone=SH-2 --infile sh-2.json --name client.radosgw.SH-SH-2 #radosgw-admin zone set --rgw-zone=SH-2 --infile sh-2.json --name client.radosgw.SH-SH-2
  • 1
  • 2
  • 3
  • 4
  • 5

配置前端

  • 生成rgw配置

Apache,Nignx及civetweb都可以作为rgw前端,在这之前,曾写过一篇有关rgw各前端配置的文章,有需要的读者可以前往阅读。下面,给出本文中的apache配置(/etc/httpd/cond.d/rgw.conf):

<VirtualHost *:80>
ServerName {fqdn}
DocumentRoot /var/www/html

ErrorLog /var/log/httpd/rgw_error.log
CustomLog /var/log/httpd/rgw_access.log combined # LogLevel debug RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] SetEnv proxy-nokeepalive 1 #ProxyPass / unix:///var/run/ceph/ceph-client.radosgw.SH-SH-1.asok ProxyPass / fcgi://{fqdn}:9000/ </VirtualHost> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

{fqdn}需替换为所在节点的主机名,ProxyPass需要根据ceph.conf文件中的rgw实例配置来设置

  • 创建数据目录

在实例节点上分别为rgw实例创建数据目录,目录格式:{type}.{id}:

#mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.SH-SH-1 #mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.SH-SH-2
  • 1
  • 2
  • 3

启动实例

在两个实例节点上分别启动实例及前端

#radosgw -c /etc/ceph/ceph.conf -n client.radosgw.SH-SH-1 #systemctl restart httpd.service #radosgw -c /etc/ceph/ceph.conf -n client.radosgw.SH-SH-2 #systemctl restart httpd.service 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

主备复制

rgw配好后,可以通过radosgw-agentmaster zone - SH-1中的数据复制到slave zone - SH-1,实现提高可用性及读性能的目的

配置

创建cluster-data-sync.conf文件,并填充如下内容:

src_access_key: {source-access-key} //master zone用户的秘钥信息
src_secret_key: {source-secret-key} destination: https://{fqdn}:port //这里是slave zone的endpoints地址 dest_access_key: {destination-access-key} //slave zone用户的秘钥信息 dest_secret_key: {destination-secret-key} log_file: {log.filename} //日志文件

 

转载于:https://www.cnblogs.com/damizhou/p/5824157.html

相关文章:

  • 【每天读一点英文】gnuhpc:The World As I See It(节选)
  • Java学习随笔之1: Java 语言概述和开发环境
  • iPad - 开发(Universal Applications)
  • Muduo 网络编程示例之一:五个简单 TCP 协议
  • 常用加密算法的Java实现总结(二) ——对称加密算法DES、3DES和AES
  • 继续玩转喷墨打印机
  • cookies,sessionStorage和localStorage的区别
  • 51nod 1103【鸽巢原理】
  • 从零实现3D图像引擎:(2)画2D直线不简单
  • Muduo 网络编程示例之二:Boost.Asio 的聊天服务器
  • XDOJ-1060-坑爹的杜神
  • 【每天读一点英文】gnuhpc注释版:Love Your Life
  • redis在ubuntu安装使用
  • 【每天读一点英文】gnuhpc注释版:The Road to Happiness
  • Android 中this、getContext()、getApplicationContext()、getApplication()、getBaseContext() 之间的区别...
  • gf框架之分页模块(五) - 自定义分页
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript 基础知识 - 入门篇(一)
  • SSH 免密登录
  • windows-nginx-https-本地配置
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于webpack 的 vue 多页架构
  • 解析带emoji和链接的聊天系统消息
  • 京东美团研发面经
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前言-如何学习区块链
  • 使用 @font-face
  • 推荐一个React的管理后台框架
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (1)STL算法之遍历容器
  • (python)数据结构---字典
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • .Net Remoting常用部署结构
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net6 webapi log4net完整配置使用流程
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET处理HTTP请求
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • 。Net下Windows服务程序开发疑惑
  • /etc/skel 目录作用
  • @AliasFor注解
  • @SentinelResource详解
  • [.NET]桃源网络硬盘 v7.4
  • [<MySQL优化总结>]
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [ffmpeg] 定制滤波器
  • [Godot] 3D拾取
  • [Java开发之路](14)反射机制