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