相关的名称解释

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

部署拓扑

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

  1. Ceph
  2. |
  3. SH
  4. / \
  5. SH-1 SH-2
  6. | |
  7. SH-SH-1 SH-SH-2
  8.  
  9. Ceph集群配置名为SHRegion,在Region下配置名为SH-1SH-2两个Zone,并将SH-1设置为master SH-2备用,可以通过radosgw-agent 实现数据复制;每个Zone各运行一个rgw实例,分别为SH-SH-1SH-SH-2
  10.  

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/目录下创建秘钥文件并设置执行权限

  1. #ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
  2. #chmod +r /etc/ceph/ceph.client.radosgw.keyring
  • 创建rgw用户及秘钥

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

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

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

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

将用户添加到Ceph集群

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

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

  • 添加下述信息到ceph.conf配置文件
  1. [global]
  2. rgw region root pool = .SH.rgw.root //用于存储region信息,会自动创建
  3. [client.radosgw.SH-SH-1] //实例名,格式为:{tpye}.{id}
  4. rgw region = SH //region名
  5. rgw zone = SH-1 //zone名
  6. rgw zone root pool = .SH-SH-1.rgw.root //根存储池,存储zone信息
  7. keyring = /etc/ceph/ceph.client.radosgw.keyring //秘钥文件
  8. rgw dns name = {hostname} //DNS
  9. ;rgw socket path = /var/run/ceph/$name.sock //unix路径
  10. rgw frontends = fastcgi socket_port=9000 socket_host=0.0.0.0
  11. host = {host-name} //主机名,通过`hostname -s`获得
  12. [client.radosgw.SH-SH-2]
  13. rgw region = SH
  14. rgw zone = SH-2
  15. rgw zone root pool = .SH-SH-2.rgw.root
  16. keyring = /etc/ceph/ceph.client.radosgw.keyring
  17. rgw dns name = {hostname}
  18. rgw frontends = fastcgi socket_port=9000 socket_host=0.0.0.0
  19. host = {host-name}
  20.  
  21. 各配置的含义请看上文的注解,这里要说明的一点是: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实例节点

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

创建Region

  • 创建region配置文件

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

  1. { "name": "SH", //region名
  2. "api_name": "SH",
  3. "is_master": "true", //设置为master
  4. "endpoints": "", //region之间的复制地址
  5. "master_zone": "SH-1", //master zone
  6. "zones": [
  7. { "name": "SH-1",
  8. "endpoints": [
  9. "http:\/\/{fqdn}:80\/"], //zone之间的复制地址
  10. "log_meta": "true",
  11. "log_data": "true"},
  12. { "name": "SH-2",
  13. "endpoints": [
  14. "http:\/\/{fqdn}:80\/"],
  15. "log_meta": "true",
  16. "log_data": "true"}],
  17. "placement_targets": [ //可用的位置组,
  18. {
  19. "name": "default-placement",
  20. "tags": []
  21. }
  22. ],
  23. "default_placement": "default-placement"}
  1.  

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

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

  • 创建Region

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

  1. #radosgw-admin region set --infile us.json --name client.radosgw.SH-SH-1
  • 1
  • 设置默认Region
  1. #radosgw-admin region default --rgw-region=SH --name client.radosgw.SH-SH-1
  • 1
  • 更新regionmap
  1. #radosgw-admin regionmap update --name client.radosgw.SH-SH-1
  2. #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):
  1. { "domain_root": ".SH-SH-1.domain.rgw",
  2. "control_pool": ".SH-SH-1.rgw.control",
  3. "gc_pool": ".SH-SH-1.rgw.gc",
  4. "log_pool": ".SH-SH-1.log",
  5. "intent_log_pool": ".SH-SH-1.intent-log",
  6. "usage_log_pool": ".SH-SH-1.usage",
  7. "user_keys_pool": ".SH-SH-1.users",
  8. "user_email_pool": ".SH-SH-1.users.email",
  9. "user_swift_pool": ".SH-SH-1.users.swift",
  10. "user_uid_pool": ".SH-SH-1.users.uid",
  11. "system_key": { "access_key": "", "secret_key": ""},
  12. "placement_pools": [
  13. { "key": "default-placement",
  14. "val": { "index_pool": ".SH-SH-1.rgw.buckets.index",
  15. "data_pool": ".SH-SH-1.rgw.buckets"}
  16. }
  17. ]
  18. }
  • 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
  1. #radosgw-admin zone set --rgw-zone=SH-1 --infile sh-1.json --name client.radosgw.SH-SH-1
  2. #radosgw-admin zone set --rgw-zone=SH-1 --infile sh-1.json --name client.radosgw.SH-SH-1
  • 1
  • 2
  • 创建Zone - SH-2
  1. #radosgw-admin zone set --rgw-zone=SH-2 --infile sh-2.json --name client.radosgw.SH-SH-2
  2. #radosgw-admin zone set --rgw-zone=SH-2 --infile sh-2.json --name client.radosgw.SH-SH-2
  • 1
  • 2
  • 更新regionmap
  1. #radosgw-admin regionmap update --name client.radosgw.SH-SH-1
  2. #radosgw-admin regionmap update --name client.radosgw.SH-SH-2
  • 1
  • 2
  • 3

创建Zone - 用户

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

  1. #radosgw-admin user create --uid="sh-1" --display-name="Region-SH Zone-SH-1" --name client.radosgw.SH-SH-1 --system
  2. #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配置:

  1. #radosgw-admin zone set --rgw-zone=SH-1 --infile sh-1.json --name client.radosgw.SH-SH-1
  2. #radosgw-admin zone set --rgw-zone=SH-1 --infile sh-1.json --name client.radosgw.SH-SH-1
  3. #radosgw-admin zone set --rgw-zone=SH-2 --infile sh-2.json --name client.radosgw.SH-SH-2
  4. #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):

  1. <VirtualHost *:80>
  2. ServerName {fqdn}
  3. DocumentRoot /var/www/html
  4. ErrorLog /var/log/httpd/rgw_error.log
  5. CustomLog /var/log/httpd/rgw_access.log combined
  6. # LogLevel debug
  7. RewriteEngine On
  8. RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
  9. SetEnv proxy-nokeepalive 1
  10. #ProxyPass / unix:///var/run/ceph/ceph-client.radosgw.SH-SH-1.asok
  11. ProxyPass / fcgi://{fqdn}:9000/
  12. </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}:

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

启动实例

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

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

主备复制

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

配置

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

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

CEPH RGW多 ZONE的配置的更多相关文章

  1. CEPH集群操作入门--配置

      参考文档:CEPH官网集群操作文档   概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...

  2. ceph rgw java sdk 使用域名访问服务时需要设置s3client的配置项 PathStyleAccess 为true, 负责将报域名异常

    Caused by: java.net.UnknownHostException: my-new-bucket.s3.yyclouds.com at java.net.InetAddress.getA ...

  3. 趣解 ceph rgw multisite data sync 机制

    multisite是ceph rgw对象数据异地容灾备份的一个有效方案,笔者希望深入理解该技术,并应用于生产环境中,然而rgw的这部分代码晦涩难懂,笔者多次尝试阅读,仍云里雾里不解其意,最终流着泪咬着 ...

  4. CEPH RGW集群和bucket的zone group 不一致导致的404异常解决 及 使用radosgw-admin metadata 命令设置bucket metadata 的方法

      问题现象: 最近在研究zonegroup的配置操作,发现在配置zonegroup后修改了default zone,导致访问对象报404错误. 问题原因: rgw 日志 报异常'request fo ...

  5. Ceph RGW 和 niginx 配置要点

    cat /etc/nginx/sites-enabled/rgw.conf server { listen 80 default; #server_name .com .com.cn .net .cn ...

  6. Ceph RGW 的 OSPF负载均衡 + quagga的配置

      随着开源技术的发展,以及商业设备价格的不断攀升.大公司总是希望能使用开源的方案来替换过去使用的商业设备.比如之前大家用的很多的F5和A10,现在已经在逐步被LVS替换.传统的单个lvs的性能是比不 ...

  7. ceph rgw multisite基本用法

    Realm: Zonegroup: 理解为数据中心,由一个或多个Zone组成,每个Realm有且仅有 一个Master Zonegroup,用于处理系统变更,其他的称为Slave Zonegroup, ...

  8. Ceph RGW服务 使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及规避方案

    import java.io.File;   import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile ...

  9. 010 Ceph RGW对象存储

    一.对象存储 1.1 介绍 通过对象存储,将数据存储为对象,每个对象除了包含数据,还包含数据自身的元数据 对象通过Object ID来检索,无法通过普通文件系统操作来直接访问对象,只能通过API来访问 ...

随机推荐

  1. Linux下编译PHP常见错误及解决方法

    1.configure: error: xml2-config not found. Please check your libxml2 installation.yum install libxml ...

  2. sys_init

    #!/bin/bash yum install -y wget && \ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyu ...

  3. 生产力工具:shell 与 Bash 脚本

    生产力工具:shell 与 Bash 脚本 作者:吴甜甜 个人博客网站: wutiantian.github.io 注意:本文只是我个人总结的学习笔记,不适合0基础人士观看. 参考内容: 王顶老师 l ...

  4. SQL高度优化

      受同事dd之托,优化一条boss看的报表SQL.dd写复杂疑难SQL无数,如何写出优雅的SQL自有一番心得体会.能将一条7表含inner join,left join并含有关联子查询的.返回结果集 ...

  5. POJ 2778:DNA Sequence(AC自动机构造矩阵)

    http://poj.org/problem?id=2778 题意:有m个病毒DNA,问构造一个长度为n的不带病毒DNA的字符串可以有多少种. 思路:看到这题有点懵,想了挺久题解的思路. 使用AC自动 ...

  6. Codeforces 730A:Toda 2(multiset模拟)

    http://codeforces.com/problemset/problem/730/A 题意:有n个人打天梯,想让这n个人的分数相同,每场比赛必须有2-5个人参赛,参赛的人会降低一分,问一个合理 ...

  7. spring的context:exclude-filter 与 context:include-filter

    1 在主容器中(applicationContext.xml),将Controller的注解打消掉 <context:component-scan base-package="com& ...

  8. 新手上路—Java的"瑞士军刀"

    “ Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大!这在我们的日常开发工作中,无疑是如虎添翼,事半功倍. Jodd = Tools + IoC + MVC ...

  9. web安全测试必须注意的五个方面

    随着互联网的飞速发展,web应用在软件开发中所扮演的角色变得越来越重要,同时,web应用遭受着格外多的安全攻击,其原因在于,现在的网站以及在网站上运行的应用在某种意义上来说,它是所有公司或者组织的虚拟 ...

  10. 各类最短路算法基本模板-C++

    原文转自:https://blog.csdn.net/changjiale110/article/details/77394650 感谢. #define Max 0x3f3f3f3f #define ...