CEPH RGW多 ZONE的配置
相关的名称解释
Region :可以理解为区域,是基于地理位置的逻辑划分;如:华南,华北之类,包含多个region的Ceph集群必须指定一个master region,一个region可以包含一个或者多个zone
Zone : 可以理解为可用区,它包含一组Ceph rgw实例,一个region必须指定一个master zone用以处理客户端请求。
部署拓扑
本文描述的多可用区部署拓扑如下:
Ceph在
|
SH
/ \
SH-1 SH-2
| |
SH-SH-1 SH-SH-2Ceph集群配置名为SH的Region,在Region下配置名为SH-1及SH-2两个Zone,并将SH-1设置为master,SH-2备用,可以通过radosgw-agent实现数据复制;每个Zone各运行一个rgw实例,分别为SH-SH-1及SH-SH-2
rgw组成要素
rgw作为一个客户端,包含如下基本元素:
rgw实例名, 本文中两个实例分别是SH-SH-1,SH-SH-2rgw实例用户- 存储池
ceph.conf中配置入口rgw实例运行时数据目录- 前端配置文件
配置rgw
创建pools
Ceph rgw需要使用多个pool来存储相关的配置及用户数据。如果后续创建的rgw用户具有相关权限,在rgw实例启动的时候是会自动创建某些存储池的;但是,通常都会建议用户自行创建。为便于区别不同Zone,在各存储池名前冠以.{region-name}-{zone-name}前缀,SH-1及SH-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 path及rgw frontends中的socket_port配置是互斥的并且rgw socket path配置优先,即:如果配置了rgw socket path,rgw实例将启动unix socket监听并忽略socket_port配置,只有在没有配置rgw socket path的情况下,rgw实例才会使用socket_port及socket_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
- 创建两个分别包含zone
SH-1及SH-2信息,名为sh-1.json及sh-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_key及secret_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_key及secret_key分布拷贝到创建Zone那一节创建的两个配置文件sh-1.json及sh-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-agent将master 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} //日志文件
CEPH RGW多 ZONE的配置的更多相关文章
- CEPH集群操作入门--配置
参考文档:CEPH官网集群操作文档 概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...
- ceph rgw java sdk 使用域名访问服务时需要设置s3client的配置项 PathStyleAccess 为true, 负责将报域名异常
Caused by: java.net.UnknownHostException: my-new-bucket.s3.yyclouds.com at java.net.InetAddress.getA ...
- 趣解 ceph rgw multisite data sync 机制
multisite是ceph rgw对象数据异地容灾备份的一个有效方案,笔者希望深入理解该技术,并应用于生产环境中,然而rgw的这部分代码晦涩难懂,笔者多次尝试阅读,仍云里雾里不解其意,最终流着泪咬着 ...
- CEPH RGW集群和bucket的zone group 不一致导致的404异常解决 及 使用radosgw-admin metadata 命令设置bucket metadata 的方法
问题现象: 最近在研究zonegroup的配置操作,发现在配置zonegroup后修改了default zone,导致访问对象报404错误. 问题原因: rgw 日志 报异常'request fo ...
- Ceph RGW 和 niginx 配置要点
cat /etc/nginx/sites-enabled/rgw.conf server { listen 80 default; #server_name .com .com.cn .net .cn ...
- Ceph RGW 的 OSPF负载均衡 + quagga的配置
随着开源技术的发展,以及商业设备价格的不断攀升.大公司总是希望能使用开源的方案来替换过去使用的商业设备.比如之前大家用的很多的F5和A10,现在已经在逐步被LVS替换.传统的单个lvs的性能是比不 ...
- ceph rgw multisite基本用法
Realm: Zonegroup: 理解为数据中心,由一个或多个Zone组成,每个Realm有且仅有 一个Master Zonegroup,用于处理系统变更,其他的称为Slave Zonegroup, ...
- Ceph RGW服务 使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及规避方案
import java.io.File; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile ...
- 010 Ceph RGW对象存储
一.对象存储 1.1 介绍 通过对象存储,将数据存储为对象,每个对象除了包含数据,还包含数据自身的元数据 对象通过Object ID来检索,无法通过普通文件系统操作来直接访问对象,只能通过API来访问 ...
随机推荐
- 西安7月21日「拥抱开源,又见.NET:壹周年Party」线下交流活动
本次活动既是.NET西安社区的第四次线下交流活动,也是.NET西安社区成立一周年庆活动..NET西安社区2018年7月20日成立,经过一年时间的发展,社区共举办过3次大型线下交流活动,社区人数由最初的 ...
- HDU 3065:病毒侵袭持续中(AC自动机)
http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:中文题意. 思路:直接插入然后用一个数组记录id和cnt,因为n只有1000,可以开一个数组判断第几 ...
- Django用户头像上传
1 将文件保存到服务器本地 upload.html ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <!DOCTYPE html> <html ...
- 使用wincc C脚本查找窗口句柄的方法
关于窗口句柄的用法,网上可以搜到很多相关的文章,本文以windows API接口函数为例,简单介绍一下基本使用,主要包括找到此窗体,在找到的窗体写入数据,对窗体进行关闭,最大化,最小化的操作: 1.利 ...
- Java设计模式学习笔记(四) 抽象工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
- Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]
1537: [POI2005]Aut- The Bus Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 264[Submit][S ...
- Dom4J的基本使用
初始化数据 <?xml version="1.0" encoding="UTF-8"?> <RESULT> <VALUE> ...
- 数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)
前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...
- 【小家Spring】老项目迁移问题:@ImportResource导入的xml配置里的Bean能够使用@PropertySource导入的属性值吗?
#### 每篇一句 > 大师都是偏执的,偏执才能产生力量,妥协是没有力量的.你对全世界妥协了你就是空气.所以若没有偏见,哪来的大师呢 #### 相关阅读 [[小家Spring]详解Propert ...
- PCB SQL SERVER 数据库阻塞进程关系以思维导图方式呈现的实现方法
最近公司服务数据库同步机制常发生阻塞,时不时的导致PCB工程系统卡死现象,只有找到阻塞源头并处理掉,才以消除阻塞,但数据库中查看会话阻塞是通过二维表方式展示的父子会话进程ID的,是很难清楚的展示各会话 ...