ceph 相关设置

更改桶中的policy权限
$ cat > examplepol
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"AWS": ["arn:aws:iam::usfolks:user/fred"]},
    "Action": "s3:PutObjectAcl",
    "Resource": [
      "arn:aws:s3:::happybucket/*"
    ]
  }]
}

$ s3cmd setpolicy examplepol s3://happybucket
$ s3cmd delpolicy s3://happybucket
https://docs.ceph.com/docs/master/radosgw/bucketpolicy/

常用命令

  1 ~]$ ceph pg dump pgs    // 查看pg状态
  2 
  3 ~]$ ceph osd pool create <pool name> <pg num> <pgp num> [type]   // 创建存储池,type:指定存储池的类型,有replicated和erasure, 默认为replicated。
  4 
  5 ~]$ ceph osd pool ls
  6 ~]$ ceph osd pool ls detail     // 使用detail可以获取更详细的信息。
  7 
  8 ~]$ ceph osd pool stats     // 获取存储池的统计数据。
  9 ~]$ ceph osd pool stats detail    // 显示存储池的用量信息。
 10 
 11 ~]$ ceph osd pool rename <old name> <new name>   // 重命名
 12 
 13 ~]$ ceph osd pool get <pool name> nodelete   // 防删除,第一个为nodelete标志,该标志的值需要为false才可以删除
 14 ~]$ ceph osd pool set <pool name> nodelete false   // 修改
 15 
 16 ~]$ ceph tell mon.* injectargs --mon_allow_pool_delete=true
 17 上面的命令相当于对mon所有节点注入一个配置mon_allow_pool_delete=true,更改完成后立刻生效。
 18 
 19 ~]$ ceph osd pool rm <pool name> <pool name> --yes-i-really-really-mean-it
 20 需要输入两遍存储池的名称,和--yes-i-really-really-mean-it此选项可删除,删除完成后记得把mon_allow_pool_delete改回去。
 21 
 22 配额
 23 当我们有很多存储池的时候,有些作为公共存储池,这时候就有必要为这些存储池做一些配额,限制可存放的文件数,或者空间大小,以免无限的增大影响到集群的正常运行。
 24 
 25 设置配额。
 26 
 27 ~]$ ceph osd pool set-quota <pool name> max_objects|max_bytes <value>
 28 max_objects:代表对对象个数进行配额。
 29 max_bytes:代表对磁盘大小进行配额。
 30 获取配额。
 31 
 32 ~]$ ceph osd pool get-quota <pool name>
 33 配置参数
 34 对于存储池的配置参数可以通过下面命令获取。
 35 
 36 ~]$ ceph osd pool get <pool name> [key name]
 37 如。
 38 
 39 ~]$ ceph osd pool get <pool name> size
 40 如果不跟个key名称,会输出所有参数,但有个报错。
 41 
 42 设置参数。
 43 
 44 ~]$ ceph osd pool set <pool name> <key> <value>
 45 常用的可用配置参数有。
 46 
 47 size:存储池中的对象副本数
 48 min_size:提供服务所需要的最小副本数,如果定义size为3,min_size也为3,坏掉一个OSD,如果pool池中有副本在此块OSD上面,那么此pool将不提供服务,如果将min_size定义为2,那么还可以提供服务,如果提供为1,表示只要有一块副本都提供服务。
 49 pg_num:定义PG的数量
 50 pgp_num:定义归置时使用的PG数量
 51 crush_ruleset:设置crush算法规则
 52 nodelete:控制是否可删除,默认可以
 53 nopgchange:控制是否可更改存储池的pg num和pgp num
 54 nosizechange:控制是否可以更改存储池的大小
 55 noscrub和nodeep-scrub:控制是否整理或深层整理存储池,可临时解决高I/O问题
 56 scrub_min_interval:集群负载较低时整理存储池的最小时间间隔
 57 scrub_max_interval:整理存储池的最大时间间隔
 58 deep_scrub_interval:深层整理存储池的时间间隔
 59 快照
 60 创建存储池快照需要大量的存储空间,取决于存储池的大小。
 61 
 62 创建快照,以下两条命令都可以 。
 63 
 64 ~]$ ceph osd pool mksnap <pool name> <snap name>
 65 ~]$ rados -p <pool name> mksnap <snap name>
 66 列出快照。
 67 
 68 ~]$ rados -p <pool name> lssnap
 69 回滚至存储池快照。
 70 
 71 ~]$ rados -p <pool name> rollback <snap name>
 72 删除存储池快照,以下两条命令都可以删除。
 73 
 74 ~]$ ceph osd pool rmsnap <pool name> <snap name>
 75 ~]$ rados -p <pool name> rmsnap <snap name>
 76 压缩
 77 如果使用bulestore存储引擎,默认提供数据压缩,以节约磁盘空间。
 78 
 79 启用压缩。
 80 
 81 ~]$ ceph osd pool set <pool name> compression_algorithm snappy
 82 snappy:压缩使用的算法,还有有none、zlib、lz4、zstd和snappy等算法。默认为sanppy。zstd压缩比好,但消耗CPU,lz4和snappy对CPU占用较低,不建议使用zlib。
 83 
 84 ~]$ ceph osd pool set <pool name> compression_mode aggressive
 85 aggressive:压缩的模式,有none、aggressive、passive和force,默认none。表示不压缩,passive表示提示COMPRESSIBLE才压缩,aggressive表示提示INCOMPRESSIBLE不压缩,其它都压缩。force表示始终压缩。
 86 
 87 压缩参数。
 88 
 89 compression_max_blob_size:压缩对象的最大体积,超过此体积不压缩。默认为0。
 90 compression_min_blob_size:压缩对象的最小体积,小于此体积不压缩。默认为0。
 91 全局压缩选项,这些可以配置到ceph.conf配置文件,作用于所有存储池。
 92 
 93 bluestore_compression_algorithm
 94 bluestore_compression_mode
 95 bluestore_compression_required_ratio
 96 bluestore_compression_min_blob_size
 97 bluestore_compression_max_blob_size
 98 bluestore_compression_min_blob_size_ssd
 99 bluestore_compression_max_blob_size_ssd
100 bluestore_compression_min_blob_size_hdd
101 bluestore_compression_max_blob_size_hdd
102 CRUSH运行图
103 在Ceph中有很多的运行图,比如Monitor运行图,OSD运行图,集群运行图,MDS运行图和CRUSH运行图。
104 
105 什么是CRUSH
106 CRUSH是一种类似于一致性hash的算法,用于为RADOS存储集群控制数据分布,全称为:Controlled Replication Under Scalable Hashing
107 
108 CRUSH在Ceph集群中的作用
109 负责数据从PG到OSD的存取。
110 
111 故障域
112 可以把故障域理解为一个单元,这个单元有大有小,成一个倒树。其中最小为OSD,OSD之上为具体的服务器,服务器通常是放置在机架上,所以再者是机架,机排(一排机架),一个配电单元,机房,数据中心,根(root)。
113 
114 正确的设置故障域可以降低数据丢失的风险,如果将故障域设置为OSD,那么同一条数据肯定将分布在不同OSD,一台服务器有可能会有多个OSD,有可能这条数据都在这台服务器上面,如果这台服务器宕机,有可能造成丢失。如果将故障域设置为host,那么一条数据肯定分布在不同的host,那么这时候如果有一台host宕机不会造成数据丢失。
115 
116 Ceph集群中默认的故障域有。
117 
118 osd:硬盘
119 host:服务器
120 chassis:机箱
121 rack:机架(一个机架包含多个机箱)
122 row:机排
123 pdu:配电单元(有可能多个机排共用一个配电单元)
124 pod:多个机排
125 room:机房
126 datacenter:数据中心(有可能多个机房组成一个数据中心)
127 region:区域(华东1,华东2等)
128 root:最顶级,必须存在
129 注意:这些故障域也称之为Bucket,但些Bucket非radowsgw里面的bucket。
130 
131 故障域算法
132 每个故障域都自己的算法,比如可以对每个故障域内的对象设置权重,这时候数据将以权重的大小比例将数据均分。比如硬盘大些的可能权重会高些,而硬盘小些的权重将低些。这样才可以保证数据存放到每个OSD的比例都差不多,而不是占用空间大小差不多。通常这样的过程需要一个算法来支持,一般有下面的一些算法。
133 
134 uniform
135 list
136 tree
137 straw
138 straw2:straw的升级版,也是现在默认使用的版本,也推荐使用这个,其它的作为了解即可。
139 CRUSH算法流程
140 take:这一步选择一个根节点,这个节点不一定是root,这个节点可以是任何一个故障域,从指定选择的这个节点开始执行。
141 select:这里开始选择合适的OSD,如果是副本池那么默认使用firstn的算法,如果是纠删码池默认使用indep算法。
142 emit:返回最终结果。
143 自定义CRUSH运行图
144 获取CRUSH运行图
145 获取运行图。
146 
147 ~]$ ceph osd getcrushmap -o crushmap.bin
148 默认情况下crush运行图是一个二进制文件,还需要将二进制转换为文本,方法如下。
149 
150 ~]$ crushtool -d crushmap.bin -o crushmap.txt
151 CRUSH运行图解读
152 # begin crush map
153 tunable choose_local_tries 0
154 tunable choose_local_fallback_tries 0
155 tunable choose_total_tries 50
156 tunable chooseleaf_descend_once 1
157 tunable chooseleaf_vary_r 1
158 tunable chooseleaf_stable 1
159 tunable straw_calc_version 1
160 tunable allowed_bucket_algs 54
161 
162 # devices
163 device 1 osd.1 class hdd
164 device 2 osd.2 class hdd
165 device 3 osd.3 class hdd
166 device 4 osd.4 class hdd
167 device 5 osd.5 class hdd
168 device 6 osd.6 class hdd
169 device 7 osd.7 class hdd
170 
171 # types
172 type 0 osd
173 type 1 host
174 type 2 chassis
175 type 3 rack
176 type 4 row
177 type 5 pdu
178 type 6 pod
179 type 7 room
180 type 8 datacenter
181 type 9 region
182 type 10 root
183 
184 # buckets
185 host ceph-storage-1 {
186     id -3        # do not change unnecessarily
187     id -4 class hdd        # do not change unnecessarily
188     # weight 0.049
189     alg straw2
190     hash 0    # rjenkins1
191     item osd.1 weight 0.049
192 }
193 host ceph-storage-2 {
194     id -5        # do not change unnecessarily
195     id -6 class hdd        # do not change unnecessarily
196     # weight 0.088
197     alg straw2
198     hash 0    # rjenkins1
199     item osd.2 weight 0.049
200     item osd.3 weight 0.039
201 }
202 host ceph-storage-3 {
203     id -7        # do not change unnecessarily
204     id -8 class hdd        # do not change unnecessarily
205     # weight 0.088
206     alg straw2
207     hash 0    # rjenkins1
208     item osd.4 weight 0.039
209     item osd.5 weight 0.049
210 }
211 host ceph-storage-4 {
212     id -9        # do not change unnecessarily
213     id -10 class hdd        # do not change unnecessarily
214     # weight 0.088
215     alg straw2
216     hash 0    # rjenkins1
217     item osd.6 weight 0.049
218     item osd.7 weight 0.039
219 }
220 root default {
221     id -1        # do not change unnecessarily
222     id -2 class hdd        # do not change unnecessarily
223     # weight 0.312
224     alg straw2
225     hash 0    # rjenkins1
226     item ceph-storage-1 weight 0.049
227     item ceph-storage-2 weight 0.088
228     item ceph-storage-3 weight 0.088
229     item ceph-storage-4 weight 0.088
230 }
231 
232 # rules
233 rule replicated_rule {
234     id 0
235     type replicated
236     min_size 1
237     max_size 10
238     step take default
239     step chooseleaf firstn 0 type host
240     step emit
241 }
242 
243 # end crush map
244 tunable:这里都是一些微调的参数,通常不建议修改,一般得集群规模够大,到了专家级别才会去修改。
245 # devices:这下面将列出集群中的所有OSD基本信息。
246 # types:这里列出集中可用的故障域,可以自定义。
247 # buckets:这里就是定义故障域名。
248 # rules:这里定义的是存储池的规则,type为存储池的类型,replicated代表副本池。如果有纠删码池也会创建出一个默认的配置,这里没有。min_size代表允许的最少副本数,max_size允许的最大副本数。step代表每一个步骤,基本第二步为选择OSD,在选择OSD的时候就定义了需要使用哪种故障域级别,这里定义为host,如果有机房或者其它的,可以将故障域定义为更高的级别。
249 关于buckets定义格式如下。
250 
251 <bucket name> <name> {
252     ……
253 }
254 bucket name:与故障域的某一名称相同。
255 name:自定义名称。
256 buckets里面需要定义算法还有此故障域的子故障域,比如host下面就一定是osd,没有其它的。而pdu下面可以有row、rack、chassis等,根据# types由大到小。root作为最低层是必须有的,因为我们这里没有机房,机排之内的,所以root里面直接就是主机。
257 
258 保存CRUSH运行图
259 通过自定义修改了CRUSH运行图,现在需要将修改保存,首先是将文本转换为二进制,然后再导入到集群中。
260 
261 首先将文本文件保存为二进制文件,然后再将二进制文件导入至集群。
262 
263 ~]$ crushtool -c crushmap.txt -o crushmap-v2.bin
264 ~]$ ceph osd setcrushmap -i crushmap-v2.bin




posted @ 2020-01-06 21:07  ︻◣_蝸犇り~  阅读(234)  评论(0编辑  收藏  举报