概述
本文主要介绍如何配置Ceph RGW的异步复制功能,通过这个功能可以实现跨数据中心的灾备功能。
RGW多活方式是在同一zonegroup的多个zone之间进行,即同一zonegroup中多个zone之间的数据是完全一致的,用户可以通过任意zone读写同一份数据。 但是,对元数据的操作,比如创建桶、创建用户,仍然只能在master zone进行。对数据的操作,比如创建桶中的对象,访问对象等,可以在任意zone中 处理.
环境
实验环境是两个ceph集群,信息如下:
集群ceph101
1 | [root@ceph101 ~]# ceph -s |
集群ceph102
1 | [root@ceph102 ~]# ceph -s |
这两个ceph集群都一个rgw服务,本次实验就通过这两个ceph集群验证rgw multi site的配置,已经功能的验证。
本次实验已第一个集群(ceph101)做为主集群,ceph102作为备集群。
Multi Site 配置
在主集群创建一个名为realm100的realm
1 | [root@ceph101 ~]# radosgw-admin realm create --rgw-realm=realm100 --default |
创建master zonegroup
1 | [root@ceph101 ~]# radosgw-admin zonegroup create --rgw-zonegroup=cn --endpoints=http://172.16.143.201:8080 --rgw-realm=realm100 --master --default |
创建master zone
1 | [root@ceph101 ~]# radosgw-admin zone create --rgw-zonegroup=cn --rgw-zone=shanghai --master --default --endpoints=http://172.16.143.201:8080 |
更新period
1 | [root@ceph101 ~]# radosgw-admin period update --commit |
创建同步用户
1 | [root@ceph101 ~]# radosgw-admin user create --uid="syncuser" --display-name="Synchronization User" --system |
修改zone的key,并更新period
1 | [root@ceph101 ~]# radosgw-admin zone modify --rgw-zone=shanghai --access-key=LPTHGKYO5ULI48Q88AWF --secret=jGFoORTVt72frRYsmcnPOpGXnz652Dl3C2IeBLN8 |
删除默认zone和zonegroup
1 | [root@ceph101 ~]# radosgw-admin zonegroup remove --rgw-zonegroup=default --rgw-zone=default |
删除默认pool
1 | [root@ceph101 ~]# ceph osd pool delete default.rgw.control default.rgw.control --yes-i-really-really-mean-it |
修改rgw配置, 增加rgw_zone = shanghai
1 | [root@ceph101 ~]# vim /etc/ceph/ceph.conf |
重启rgw,并查看pool是否创建
1 | [root@ceph101 ~]# systemctl restart ceph-radosgw@rgw.ceph101 |
在secondy zone节点进行如下配置:
同步realm, 并设置realm100为默认的realm
1 | [root@ceph102 ~]# radosgw-admin realm pull --url=http://172.16.143.201:8080 --access-key=LPTHGKYO5ULI48Q88AWF --secret=jGFoORTVt72frRYsmcnPOpGXnz652Dl3C2IeBLN8 |
更新period
1 | [root@ceph102 ~]# radosgw-admin period pull --url=http://172.16.143.201:8080 --access-key=LPTHGKYO5ULI48Q88AWF --secret=jGFoORTVt72frRYsmcnPOpGXnz652Dl3C2IeBLN8 |
创建secondy zone
1 | [root@ceph102 ~]# radosgw-admin zone create --rgw-zonegroup=cn --rgw-zone=beijing --endpoints=http://172.16.143.202:8080 --access-key=LPTHGKYO5ULI48Q88AWF --secret=jGFoORTVt72frRYsmcnPOpGXnz652Dl3C2IeBLN8 |
删除默认default zone, defaul zonegroup和 default存储池
1 | [root@ceph102 ~]# radosgw-admin zone delete --rgw-zone=default |
修改rgw配置, 增加rgw_zone = beijing
1 | [root@ceph101 ~]# vim /etc/ceph/ceph.conf |
重启rgw,并查看pool是否创建
1 | [root@ceph102 ~]# systemctl restart ceph-radosgw@rgw.ceph102 |
更新period
1 | [root@ceph102 ~]# radosgw-admin period update --commit |
查看同步状态
1 | [root@ceph101 ~]# radosgw-admin sync status |
1 | [root@ceph102 ~]# radosgw-admin sync status |
验证
在master zone 创建一个test用户,在secondy zone 查看信息
1 | [root@ceph101 ~]# radosgw-admin user create --uid test --display-name="test user" |
secondy zone 查看用户
1 | [root@ceph102 ~]# radosgw-admin user list |
在secondy zone 创建一个test2用户,在master zone 查看信息
1 | [root@ceph102 ~]# radosgw-admin user create --uid test@2 --display-name="test2 user" |
在master zone 查看
1 | [root@ceph101 ~]# radosgw-admin user list |
可以看到在master zone创建的用户,在secondy zone也可以看到
而在secondy zone创建的用户,在master zone看不到
通过test用户,在master zone 创建名为bucket1的bucket
1 | [root@ceph101 ~]# s3cmd mb s3://bucket1 |
在secondy zone查看
1 | [root@ceph102 ~]# radosgw-admin bucket list |
通过test用户,在secondy zone 创建名为bucket2的bucket
1 | [root@ceph102 ~]# s3cmd mb s3://bucket2 |
在master zone 查看
1 | [root@ceph101 ~]# radosgw-admin bucket list |
在master zone 上传文件
1 | [root@ceph101 ~]# s3cmd put Python-3.4.9.tgz s3://bucket1/python3.4.9.tgz |
在secondy zone 查看信息
1 | [root@ceph102 ~]# s3cmd ls s3://bucket1 |
在secondy zone 上传文件
1 | [root@ceph102 ~]# s3cmd put anaconda-ks.cfg s3://bucket2/anaconda-ks.cfg |
在master zone 查看
1 | [root@ceph101 tmp]# s3cmd ls s3://bucket2 |
停止master zone的grup,然后在secondy zone上创建存储桶
1 | [root@ceph101 tmp]# systemctl stop ceph-radosgw@rgw.ceph101 |
1 | [root@ceph102 ~]# s3cmd mb s3://bucket4 |
可以看到在secondy zone上并不能创建bucket,之前在secondy zone上创建bucket,也是把请求转到master zone上。
反之,停止secondy zone的rgw,在master zone也是可以创建存储桶
1 | [root@ceph102 ~]# systemctl stop ceph-radosgw@ceph102 |
1 | [root@ceph101 tmp]# s3cmd mb s3://bucket5 |