Radosgw-agent 使用

介绍

radosgw-agent 同步的数据分为 metasync 和 datasync

radosgw-agent 数据同步场景有两个:

  • 同一个 region 中,同步 Master zone 的数据到 Secondary zone* region 之间,同步 Master region 的数据到 Secondary region,且只能是 metasync

zone 之间的 radosgw-agent 部署注意

  • 在 region set 和 regionmap update 之后,需要重启 ceph-radosgw,否则通过 api 获得的 region map 是未被更新的。
  • 在未成功配置 zone 的 master 和 slave 之前创建的 user、bucket、object 等都不能被 radosgw-agent 同步。

服务启动

1.手动启动,显示的指定配置文件,运行的输出也会打印带屏幕

1
# radosgw-agent -c <config_file>

2.服务的方式启动,默认的配置文件是在/etc/ceph/radosgw-agent/default.conf,手动创建并启动

1
# /etc/init.d/radosgw-agent start

配置文件

配置文件demo

1
2
3
4
5
6
7
8
9
10
11
src_access_key: NDOO5JZAAM2Z6WA9FIXG
src_secret_key: 4rWHptoevPLPlOwDITljxPuJTqoMQCMM9ICBjGgv
#source: http://cd-1:80
#src_zone: cd-center1
dest_access_key: FLDVEMPT8PKY1F2UD3F7
dest_secret_key: 8HnGUZIveuHAWePuGXEDXYTR985m7voSUuQDGPkx
destination: http://cd-2:80
log_file: /var/log/radosgw/radosgw-sync-cd-center1-center2.log
#verbose: True/False
#versioned: True/False
#sync_scope: full/incremental
  • verbose:是否打开 debug
  • versioned:集群是否开启对象的多版本
  • sync_scope:同步方式,full(完全),incremental(增量)

问题

在 radosgw-agent 启动的时候有日志输出:

1
2
3
[radosgw_agent][INFO ] http://cd-1:80 endpoint does not support versioning
[radosgw_agent][WARNIN] encountered issues reaching to endpoint http://cd-1:80
[radosgw_agent][WARNIN] HTTP Error 403:

对应代码:
radosgw-agent/cli.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def check_versioning(endpoint):
date = time.asctime(time.gmtime())
signed_string = sign_string(endpoint.secret_key, date=date)
url = str(endpoint) + ‘/?versions’
headers = {
‘Authorization’: ‘AWS ‘ + endpoint.access_key + ‘:’ + signed_string,
‘Date’: date
}
data = None
req = urllib2.Request(url, data, headers)
try:
response = urllib2.urlopen(req)
response.read()
log.debug(‘%s endpoint supports versioning’ % endpoint)
return True
except HTTPError as error:
if error.code == 403:
log.info(‘%s endpoint does not support versioning’ % endpoint)
log.warning(‘encountered issues reaching to endpoint %s’ % endpoint)
log.warning(error)
except URLError as error:
log.error(“was unable to connect to %s” % url)
log.error(error)
return False

因为我们没有在配置文件中配置versioned,则会调用方法check_versioning,当前版本的 radosgw 不支持 versioning,所以这个报错是正常的。
修改配置文件项

1
versioned: False