分布式存储系统之Ceph集群RadosGW基础使用( 二 )


通过身份认证后,RGW针对用户的每次资源操作请求都会进行授权检查,仅那些能够满足授权定义(ACL)的请求会被允许执行; S3使用bucket acl和object acl分别来控制bucket和object的访问控制权限,一般用于向bucket或object属主之外的其它用户进行授权;Swift API中的权限控制则分为user访问控制列表和bucket访问控制列表两种,前一种针对user进行设定 , 而后一定则专用于bucket及内部的object,且只有read和write两种权限;RadosGW为了支持通用的云存储功能,Ceph在RADOS集群的基础上提供了RGW(RADOS GateWay)数据抽象和管理层,它是原生兼容S3和Swift API的对象存储服务,支持数据压缩和多站点(Multi-Site)多活机制,并支持NFS协议访问接口等特性; S3和Swift是RESTful风格的API,它们基于http/https协议完成通信和数据交换; radosgw的http/https服务由内建的Civeweb提供 , 它同时也能支持多种主流的Web服务程序以代理的形式接收用户请求并转发至ceph-radosgw进程 , 这些Web服务程序包括nginx和haproxy等;
RGW的功能依赖于Ceph对象网关守护进程(ceph-radosgw)实现 , 它负责向客户端提供REST API接口,并将数据操作请求转换为底层RADOS存储集群的相关操作;出于冗余及负载均衡的需要,一个Ceph集群上的ceph-radosgw守护进程通常不止一个,这些支撑同一对象存储服务的守护进程联合起来构成一个zone(区域)用于代表一个独立的存储服务和存储空间; 在容灾设计的架构中,管理员会基于两个或以上的Ceph集群定义出多个zone,这些zone之间通过同步机制实现冗余功能,并组成一个新的父级逻辑组件zonegroup;
多站点(Mutli-Sites)
zonegroup负责定义其下的各个zone之间的合作模式(active/passive或active/active)、调用的数据存储策略和同步机制等,并且能够为一个更大级别的应用通过多个zonegroup完成跨地域的协作 , 实现提升客户端接入的服务质量等功能,这也通常称为多站点(Mutli-Sites);为Ceph存储集群启用radosgw服务之后,它会默认生成一个名为default的zonegroup,其内含一个名为default的zone,管理员可按需扩展使用更多的zone或zonegroup;更进一步地,zonegroup还有其父级组件realm,用于界定跨地理位置进行复制时的边界;
配置Citeweb
自0.80版本起,Ceph放弃了基于apache和fastcgi提供radosgw服务的传统而代之以默认嵌入在ceph-radosgw进程中的Citeweb , 这种新的实现方式更加轻便和简洁,但直到Ceph 11.0.1版本,Citeweb才开始支持SSL协议;Citeweb默认监听于TCP协议的7480端口提供http服务,修改配置需要编辑ceph.conf配置文件,以如下格式进行定义
[client.rgw.<gateway-node>]rgw_host = <hostname OR ipaddr>rgw_frontends = "civetweb port=80"示例:配置rgw监听在ceph-mon01的8080端口
[cephadm@ceph-admin ceph-cluster]$ cat ceph.conf[global]fsid = 7fd4a619-9767-4b46-9cee-78b9dfe88f34mon_initial_members = ceph-mon01mon_host = 192.168.0.71public_network = 192.168.0.0/24cluster_network = 172.16.30.0/24auth_cluster_required = cephxauth_service_required = cephxauth_client_required = cephx[mds.ceph-mon03]mds_standby_replay = truemds_standby_for_name = ceph-mon01[client.rgw.ceph-mon01]rgw_host = ceph-mon01rgw_frontends = "civetweb port=8080"[cephadm@ceph-admin ceph-cluster]$推送配置至ceph-mon01
[cephadm@ceph-admin ceph-cluster]$ ceph-deploy --overwrite-conf config pushceph-mon01[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf[ceph_deploy.cli][INFO] Invoked (2.0.1): /bin/ceph-deploy --overwrite-conf config push ceph-mon01[ceph_deploy.cli][INFO] ceph-deploy options:[ceph_deploy.cli][INFO]username: None[ceph_deploy.cli][INFO]verbose: False[ceph_deploy.cli][INFO]overwrite_conf: True[ceph_deploy.cli][INFO]subcommand: push[ceph_deploy.cli][INFO]quiet: False[ceph_deploy.cli][INFO]cd_conf: <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f327dce58c0>[ceph_deploy.cli][INFO]cluster: ceph[ceph_deploy.cli][INFO]client: ['ceph-mon01'][ceph_deploy.cli][INFO]func: <function config at 0x7f327df14cf8>[ceph_deploy.cli][INFO]ceph_conf: None[ceph_deploy.cli][INFO]default_release: False[ceph_deploy.config][DEBUG ] Pushing config to ceph-mon01[ceph-mon01][DEBUG ] connection detected need for sudo[ceph-mon01][DEBUG ] connected to host: ceph-mon01[ceph-mon01][DEBUG ] detect platform information from remote host[ceph-mon01][DEBUG ] detect machine type[ceph-mon01][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf[cephadm@ceph-admin ceph-cluster]$重启ceph-radosgw@rgw进程生效新配置
[cephadm@ceph-admin ceph-cluster]$ ssh ceph-mon01 'sudo systemctl restart ceph-radosgw@rgw'[cephadm@ceph-admin ceph-cluster]$ ssh ceph-mon01 'sudo ss -tnl|grep 8080'LISTEN0128*:8080*:*[cephadm@ceph-admin ceph-cluster]$

推荐阅读