Redhat对象网关指南

Stella981
• 阅读 770

##1.配置 ###更换默认的端口

###从apache迁移到civetweb

一个基于apache的配置类似以下形式:

[client.radosgw.gateway-node1]
host = {hostname}
keyring = /etc/ceph/ceph.client.radosgw.keyring
rgw socket path = ""
log file = /var/log/radosgw/client.radosgw.gateway-node1.log
rgw frontends = fastcgi socket_port=9000 socket_host=0.0.0.0
rgw print continue = false

修改成Civetweb,只需要移除:rgw_socket_path rgw_print_continue 得到:

[client.radosgw.gateway-node1]
host = {hostname}
keyring = /etc/ceph/ceph.client.radosgw.keyring
log file = /var/log/radosgw/client.radosgw.gateway-node1.log
rgw_frontends = civetweb port=80

重启rgw:

systemctl restart ceph-radosgw.service

###Civetweb使用SSL 在v2.0前,基于HAProxy和keepalived上支持Civetweb SSL。在v2.0及以上版本,Civetweb支持OpenSSL库来提供TLS(Transport Layer Security)

#1. 创建一个自签名的认证

#生成rsa密钥
openssl genrsa -des3 -out server.key 1024
    
#生成对应的csr文件
openssl req -new -key server.key -out server.csr    

cp server.key server.key.orig

#去除密钥文件的保护密码
openssl rsa -in server.key.orig -out server.key    

#自签名
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt    

cp server.crt server.pem

cat server.key >> server.pem

注:在做第二步后common name(CN)的设置,可以设置成*.instance01.com

#2. 需要使用如下软连接,否则会出错,可在log_file文件中查看出错信息

ln -s /lib64/libssl.so.1.0.1e /usr/lib64/libssl.so
ln -s /lib64/libcrypto.so.1.0.1e /usr/lib64/libcrypto.so

#3. 配置端口信息

[client.rgw.instance01]
host = ceph02
keyring = /var/lib/ceph/radosgw/ceph-rgw.instance01/keyring
log_file = /var/log/radosgw/ceph-client.rgw.instance01.log
rgw_dns_name = instance01.com
rgw thread pool size=1000
rgw_enable_static_website=true

rgw_frontends = "civetweb port=443s ssl_certificate=/etc/ceph/private/server.pem"
error_log_file=/var/log/radosgw/civetweb.error.log
access_log_file=/var/log/radosgw/civetweb.access.log

#5. 域名加入etc/hosts:

192.168.141.129 website02.instance01.com
192.168.141.129 website01.instance01.com

#6. 直接访问https://website01.instance01.com:(有证书错误提示)

Redhat对象网关指南

#7. 浏览器添加自定义的证书,如这里的server.crt,进行访问

IE为例:

  • 设置->Internet选项->内容->证书
  • 选择“受信任的根证书颁发机构”->导入

Redhat对象网关指南

###导出命名空间到NFS-GANESHA NFS-GANESHA 是一个用户空间服务器,支持NFSv2、NFSv3和NFSv4。它支持的运行平台包括Linux,BSD variants和POSIX-compliant Unixes。

在v2.0发行版中,提供了通过NFS v4.1导出S3对象命名空间。

注:这个功能不常用,只支持S3

桶是NFS中的一个目录,继承S3惯例,支持创建文件或者文件夹。

##2. 管理(CLI)

每个osd上设置最大的pg数,超出会有警告(默认300)

mon_pg_warn_max_per_osd = n

###存储策略 ceph对象网关通过placement targets进行存储桶对象的数据,通过placement target来指定桶和对象的存储池。如果不配置placement targets,桶和对象将会存到网关实例所在zone配置的存储池中(使用默认的target和pools)。

存储策略给对象网关提供了一个获得存储策略的权限,比如,指定特殊的存储类型(SSDs,SAS drivers, SATA drivers)

  1. 创建一个新的pool.rgw.buckets.special,这个pool是一个特定的存储策略。比如说,自定义的纠删码、具有一个特殊的crush ruleset、副本数或者pg数。

  2. 获得region配置,导入到文件中

    radosgw-admin region get > region.json

  3. 加入special-placement到placement_target下

    { "name": "default", "api_name": "", "is_master": "true", "endpoints": [], "hostnames": [], "master_zone": "", "zones": [{ "name": "default", "endpoints": [], "log_meta": "false", "log_data": "false", "bucket_index_max_shards": 5 }], "placement_targets": [{ "name": "default-placement", "tags": [] }, { "name": "special-placement", "tags": [] }], "default_placement": "default-placement" }

  4. 获得zone配置

    radosgw-admin zone get > zone.json

  5. 编辑zone文件,加入placement policy key。

    { "domain_root": ".rgw", "control_pool": ".rgw.control", "gc_pool": ".rgw.gc", "log_pool": ".log", "intent_log_pool": ".intent-log", "usage_log_pool": ".usage", "user_keys_pool": ".users", "user_email_pool": ".users.email", "user_swift_pool": ".users.swift", "user_uid_pool": ".users.uid", "system_key": { "access_key": "", "secret_key": "" }, "placement_pools": [{ "key": "default-placement", "val": { "index_pool": ".rgw.buckets.index", "data_pool": ".rgw.buckets", "data_extra_pool": ".rgw.buckets.extra" } }, { "key": "special-placement", "val": { "index_pool": ".rgw.buckets.index", "data_pool": ".rgw.buckets.special", "data_extra_pool": ".rgw.buckets.extra" } }] }

  6. 写入

    radosgw-admin zone set < zone.json

  7. 更新region map

    radosgw-admin regionmap update

  8. 重启rgw

  9. 使用

curl -i http://10.0.0.1/swift/v1/TestContainer/file.txt -X PUT -H "X-Storage-Policy: special-placement" -H "X-Auth-Token: AUTH_rgwtxxxxxx"

###桶的分片

index_pool中存放了桶的索引数据,默认是.rgw.bucket.index。用户可能会存放很多对象(几千万甚至几亿对象)到单个bucket中,如果不用网关管理员接口去设置每个桶的最大配额,那桶的索引会遭受性能降级,当用户存放大量的对象时。

当允许每个桶存储大量的对象时,v1.3可以切片桶目录,来解决性能瓶颈。 rgw_override_bucket_index_max_shards 以上参数是设置每个桶的最大切片数。默认是0(0代表关闭桶的索引切片)。

设置方式 可以在[global]标题下增加,然后重启。

对于联合配置,每个zone都有index_pool配置,可以针对不同区域的网关配置这个参数

radosgw-admin region get > region.json 打开json文件,对不同的zone编辑bucket_index_max_shards 保存重置:

radosgw-admin region set < region.json

更新region map:

radosgw-admin regionmap update --name client.rgw.ceph-client

###Realms 一个realm代表了一个全局的唯一的命名空间,这个命名空间由一个或者多个zonegroup,包含了一个或多个zone,zone里包含了桶,桶里包依次存放了对象。realm使得Ceph对象网关支持多命名空间和配置。

一个realm包含了period的概念(表示一个realm的有效期)。每个period及时地代表了zonegroup的状态和zone的配置。每次需要对zonegroup或者zone做些改变的时候,需要更新周期,然后提交,

为了向后兼容v1.3或者更早期的版本,默认下,Ceph不会创建realm。然而,为了更好的体验,redhat会在新集群上创建realm

###查找孤立对象 在一个健康的集群中,不应该存在任何孤立的对象,但是在一些情况下孤立对象可能发生:

  1. 在某个操作中rgw挂了,这可能使得对象变成孤立的。
  2. 未知的bug

步骤:

  • 创建一个新的log池

    rados mkpool .log

  • 搜索孤立对象

    radosgw-admin orphans find --pool=.rgw.buckets --job-id=abc123

  • 清理搜索出的孤立对象数据

    radosgw-admin orphans finish --job-id=abc123

##3. 多数据中心

一个单zone的配置一般由一个zonegroup组成,这个zonegroup包含一个zone和一个或者多个rgw实例。在这些rgw中可以平衡网关请求。在单zone配置中,一般多网关实例指向了单个ceph集群。然而,redhat对于rgw支持几个多站点配置项

  • 多zone 一个好的配置是由一个zonegroup和多zone组成,每个zone是由一个或者多个rgw组成。每个zone由自身的ceph集群支撑。在一个zone group中,多zone可以提供容灾能力。2.0中每个zone是激活的,可以接受写操作。为了能够容灾,多活zone可以为cdn起到一个基础作用。
  • 多zone group 之前称为region,ceph仍然支持多zone group,每个zone group由一个或多个zone组成。在相同的realm中,在同一个zone group中的对象共享一个全局命名空间,在跨zonegroup和zone中具有唯一的对象ID
  • 多realms 从2.0开始,支持realm的概念。可以是一个zonegroup或者多zonegroup和一个全局唯一的命名空间。多realm提供了支持许多配置和命名空间的能力。

Redhat对象网关指南

从redhat v2.0和以上,可以配置双活zone,意思是能够写入到非主zone。

多站点配置保存在一个容器中,叫realm,realm包含zone group, zone和period,period是由多个epoch组成,epoch是用来追踪配置的变化。

这个指南上,假设分别有rgw1,rgw2,rgw3,rgw4。多站点配置要求一个主的zone group和一个主zone。另外,每个zone group要求一个主zone。zone groups可能有一个或多个非主zones

  • rgw1是主zone groups中的主zone,
  • rgw2是主zone groups中的非主zone
  • rgw3是非主zone groups的主zone
  • rgw4是非主zone groups的非主zone

###pools 对于zone的pool的名字{zone-name}.pool-name,比如,一个zone叫us-east。可以这样命名pool:

  • .rgw.root
  • us-east.rgw.control
  • us-east.rgw.data.root
  • us-east.rgw.gc
  • us-east.rgw.log
  • us-east.rgw.intent-log
  • us-east.rgw.usage
  • us-east.rgw.users.keys
  • us-east.rgw.users.email
  • us-east.rgw.users.swift
  • us-east.rgw.users.uid
  • us-east.rgw.buckets.index
  • us-east.rgw.buckets.data
  • us-east.rgw.meta

###更新对象网关 redhat推荐首先重启主zonegroup和主zone。接着是非主

###配置一个主zone

  1. 创建一个realm 一个realm包含了zone groups和zones的多站点配置,也用来在所在的领域中实行一个全局唯一的命名空间。

    radosgw-admin realm create --rgw-realm={realm-name} [--default]

  2. 创建一个主zone group

    radosgw-admin zonegroup create --rgw-zonegroup={name} --endpoints={url} [--rgw-realm={realm-name}|--realm-id={realm-id}] --master --default

  3. 创建一个主zone

    radosgw-admin zone create --rgw-zonegroup={zone-group-name}
    --rgw-zone={zone-name}
    --master --default
    --endpoints={http://fqdn}[,{http://fqdn}

  4. 创建一个系统用户

  5. 更新period

  6. 更新ceph配置文件 在主zone上,增加rgw_zone配置项,以及zone的实例入口。

    [client.rgw.{instance-name}] ... rgw_zone={zone-name}

  7. 重启rgw

###配置非主zone

  1. pull realm

    radosgw-admin realm pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}

  2. pull period

    radosgw-admin period pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}

  3. 创建一个非主zone 在v2.0或以上版本,所有的zone默认都是使用双活配置:对象客户端可以向任何一个zone写数据。这个被写入数据的zone将会复制所有的数据到同一个zone group的其他的zone。如果非主zone不接受写操作,需要在创建zone时,使用参数--read-only标签来创建主备配置,这个是在主zone和非主zone之间的,另外需要使用系统用户的access key和secret key。

    radosgw-admin zone create --rgw-zonegroup={zone-group-name}\

                           --rgw-zone={zone-name} --endpoints={url} \
                           --access-key={system-key} --secret={secret}\
                           --endpoints=http://{fqdn}:80 \
                           [--read-only]
    
  4. 更新ceph配置文件 在非主zone的主机上更新ceph配置文件

    [client.rgw.rgw2] host = rgw2 rgw frontends = "civetweb port=80" rgw_zone=us-west

  5. 更新period

  6. 启动网关

###故障恢复

  1. 使得非主zone成为主zone,并且为的默认zone

    radosgw-admin zone modify --rgw-zone={zone-name} --master --default

默认情况下,ceph是双活配置,如果集群是主备,非主zone是只读的。移除--read-only状态来获得写操作。

  1. 更新period生效
  2. 重启rgw

如果原主zone已恢复

  1. 从恢复的zone中拉取当前的主zone的period。
  2. 使得恢复的zone成为主,并且是默认的zone
  3. 更新period
  4. 主zone上重启rgw
  5. 如果非主zone需要成为只读,则进行配置
  6. 更新period
  7. 在非主zone上重启rgw

###从单数据中心迁移到多数据中心

  1. 创建realm,

  2. 重命名默认的zone和zonegroup

  3. 配置主zonegroup,加入到realm

    radosgw-admin zonegroup modify --rgw-realm= --rgw-zonegroup= --endpoints http://:80 --master --default

  4. 配置主zone

    radosgw-admin zone modify --rgw-realm= --rgw-zonegroup= \

                            --rgw-zone=<name> --endpoints http://<fqdn>:80 \
                            --access-key=<access-key> --secret=<secret-key> \
                            --master --default
    
  5. 创建系统用户

    radosgw-admin user create --uid= --display-name=""\

                            --access-key=<access-key> --secret=<secret-key> --system
    
  6. 提交更新配置

  7. 重启rgw

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这