【云原生 | Kubernetes 系列】---Ceph Crush

124 篇文章 19 订阅
11 篇文章 0 订阅

1. Ceph Crush进阶

ceph集群中由mon服务器维护的五种运行图:

  1. Monitor map
  2. OSD Map
  3. Pg Map # pg中有多少个osd,那个osd是主的,那个是备的
  4. Crush Map #可控的,可复制的,可伸缩的一致性hash算法
  5. MDS Map # cephfs metadata map

crush算法针对目的节点的选择,有5种算法来实现:

  1. Uniform
  2. List
  3. Tree
  4. Straw
  5. Straw2

1.1 PG与OSD映射

默认情况下,crush算法自行对创建的pool中的PG分配OSD,但是可以手动基于权重设置crush算法分配数据倾向性,比如1T的磁盘权重是1,2T的是2,推荐使用相同大小的设备

1.1.1 查看当前状态

weight表示设备的容量相对值.weight就是基于磁盘空间分配PG数量,让crush算法尽可能往磁盘空间大的OSD分配PG,往小的OSD分配较少的PG.

Reweight参数目的就是重新平衡ceph的crush算法随机分配的PG,默认的分配时概率上的均衡,即使OSD都是一样的磁盘空间也会产生一些PG分布不均匀的情况.此时可以通过调整reweight参数,让ceph集群立即重新平衡当前磁盘的PG,以达到数据均衡分布的目的.

$ ceph osd df 
ID  CLASS  WEIGHT   REWEIGHT  SIZE      RAW USE  DATA     OMAP    META     AVAIL     %USE  VAR   PGS  STATUS
10    hdd  0.00099   1.00000  1020 MiB   59 MiB   16 MiB     0 B   43 MiB   961 MiB  5.80  1.13   60      up
11    hdd  0.00099   1.00000  1020 MiB   71 MiB   22 MiB     0 B   49 MiB   949 MiB  6.93  1.35   60      up
12    hdd  0.00099   1.00000  1020 MiB   64 MiB   21 MiB     0 B   43 MiB   956 MiB  6.29  1.23   63      up
13    hdd  0.00099   1.00000  1020 MiB   66 MiB   17 MiB     0 B   49 MiB   954 MiB  6.48  1.26   55      up
 2    hdd  0.00099   1.00000  1020 MiB   14 MiB   12 MiB     0 B   37 MiB  1006 MiB  1.35  0.26   54      up
 3    hdd  0.00099   1.00000  1020 MiB   67 MiB   22 MiB     0 B   45 MiB   953 MiB  6.53  1.27   64      up
 4    hdd  0.00099   1.00000  1020 MiB   65 MiB   15 MiB     0 B   50 MiB   955 MiB  6.37  1.24   59      up
 5    hdd  0.00099   1.00000  1020 MiB   79 MiB   23 MiB     0 B   56 MiB   941 MiB  7.70  1.50   59      up
 6    hdd  0.00099   1.00000  1020 MiB   52 MiB   27 MiB   2 KiB   25 MiB   968 MiB  5.05  0.99   56      up
 7    hdd  0.00099   1.00000  1020 MiB   52 MiB   13 MiB   3 KiB   39 MiB   968 MiB  5.09  0.99   68      up
 8    hdd  0.00099   1.00000  1020 MiB   42 MiB   10 MiB   7 KiB   31 MiB   978 MiB  4.08  0.80   50      up
 9    hdd  0.00099   1.00000  1020 MiB   32 MiB   11 MiB   4 KiB   22 MiB   988 MiB  3.18  0.62   54      up
14    hdd  0.00099   1.00000  1020 MiB   44 MiB   19 MiB   3 KiB   25 MiB   976 MiB  4.32  0.84   51      up
15    hdd  0.00099   1.00000  1020 MiB   46 MiB   21 MiB   2 KiB   26 MiB   974 MiB  4.53  0.88   57      up
16    hdd  0.00099   1.00000  1020 MiB   40 MiB   10 MiB   3 KiB   30 MiB   980 MiB  3.96  0.77   50      up
17    hdd  0.00099   1.00000  1020 MiB   45 MiB   13 MiB   3 KiB   32 MiB   975 MiB  4.40  0.86   55      up
                       TOTAL    16 GiB  837 MiB  271 MiB  31 KiB  601 MiB    15 GiB  5.13                   

1.1.2 修改权重

权重高的服务器,会承载更多的数据,实时生效.

# 权重调高,数据优先写入osd.10
$ ceph osd crush reweight osd.10 0.0015
reweighted item id 10 name 'osd.10' to 0.0015 in crush map
$ ceph osd df 
ID  CLASS  WEIGHT   REWEIGHT  SIZE      RAW USE  DATA     OMAP    META     AVAIL     %USE   VAR   PGS  STATUS
10    hdd  0.00150   1.00000  1020 MiB  146 MiB   58 MiB     0 B   88 MiB   874 MiB  14.30  2.11   91      up
11    hdd  0.00099   1.00000  1020 MiB   79 MiB   20 MiB     0 B   60 MiB   941 MiB   7.75  1.14   45      up
12    hdd  0.00099   1.00000  1020 MiB   76 MiB   22 MiB     0 B   54 MiB   944 MiB   7.45  1.10   53      up
13    hdd  0.00099   1.00000  1020 MiB   73 MiB   19 MiB     0 B   54 MiB   947 MiB   7.20  1.06   55      up
 2    hdd  0.00099   1.00000  1020 MiB   15 MiB   14 MiB     0 B   45 MiB  1005 MiB   1.51  0.22   51      up
 3    hdd  0.00099   1.00000  1020 MiB   79 MiB   23 MiB     0 B   55 MiB   941 MiB   7.71  1.14   62      up
 4    hdd  0.00099   1.00000  1020 MiB   76 MiB   17 MiB     0 B   60 MiB   944 MiB   7.50  1.11   53      up
 5    hdd  0.00099   1.00000  1020 MiB   88 MiB   25 MiB     0 B   63 MiB   932 MiB   8.58  1.27   58      up
 6    hdd  0.00099   1.00000  1020 MiB   66 MiB   28 MiB   2 KiB   37 MiB   954 MiB   6.42  0.95   50      up
 7    hdd  0.00099   1.00000  1020 MiB   67 MiB   15 MiB   3 KiB   53 MiB   953 MiB   6.59  0.97   66      up
 8    hdd  0.00099   1.00000  1020 MiB   51 MiB   12 MiB   7 KiB   38 MiB   969 MiB   4.96  0.73   48      up
 9    hdd  0.00099   1.00000  1020 MiB   46 MiB   13 MiB   4 KiB   33 MiB   974 MiB   4.51  0.66   55      up
14    hdd  0.00099   1.00000  1020 MiB   63 MiB   24 MiB   3 KiB   39 MiB   957 MiB   6.19  0.91   52      up
15    hdd  0.00099   1.00000  1020 MiB   61 MiB   22 MiB   2 KiB   39 MiB   959 MiB   5.99  0.88   59      up
16    hdd  0.00099   1.00000  1020 MiB   63 MiB   16 MiB   3 KiB   47 MiB   957 MiB   6.16  0.91   56      up
17    hdd  0.00099   1.00000  1020 MiB   58 MiB   14 MiB   3 KiB   43 MiB   962 MiB   5.64  0.83   60      up
                       TOTAL    16 GiB  1.1 GiB  341 MiB  31 KiB  808 MiB    15 GiB   6.78
# 权重调低,数据从osd.7迁出
$ ceph osd crush reweight osd.7 0.00095
reweighted item id 7 name 'osd.7' to 0.00095 in crush map
$ ceph osd df 
ID  CLASS  WEIGHT   REWEIGHT  SIZE      RAW USE  DATA     OMAP    META     AVAIL     %USE   VAR   PGS  STATUS
10    hdd  0.00150   1.00000  1020 MiB  106 MiB   14 MiB     0 B   92 MiB   914 MiB  10.44  1.55   75      up
11    hdd  0.00099   1.00000  1020 MiB   81 MiB   20 MiB     0 B   61 MiB   939 MiB   7.93  1.18   47      up
12    hdd  0.00099   1.00000  1020 MiB   78 MiB   23 MiB     0 B   56 MiB   942 MiB   7.69  1.14   56      up
13    hdd  0.00099   1.00000  1020 MiB   75 MiB   20 MiB     0 B   56 MiB   945 MiB   7.38  1.10   57      up
 2    hdd  0.00099   1.00000  1020 MiB   16 MiB   15 MiB     0 B   47 MiB  1004 MiB   1.58  0.23   49      up
 3    hdd  0.00099   1.00000  1020 MiB   81 MiB   24 MiB     0 B   57 MiB   939 MiB   7.90  1.17   61      up
 4    hdd  0.00099   1.00000  1020 MiB   78 MiB   17 MiB     0 B   61 MiB   942 MiB   7.70  1.14   55      up
 5    hdd  0.00099   1.00000  1020 MiB   85 MiB   21 MiB     0 B   64 MiB   935 MiB   8.37  1.24   57      up
 6    hdd  0.00099   1.00000  1020 MiB   68 MiB   29 MiB   2 KiB   39 MiB   952 MiB   6.65  0.99   53      up
 7    hdd  0.00095   1.00000  1020 MiB   69 MiB   15 MiB   3 KiB   54 MiB   951 MiB   6.79  1.01   66      up
 8    hdd  0.00099   1.00000  1020 MiB   53 MiB   13 MiB   7 KiB   40 MiB   967 MiB   5.17  0.77   49      up
 9    hdd  0.00099   1.00000  1020 MiB   48 MiB   13 MiB   4 KiB   35 MiB   972 MiB   4.69  0.70   52      up
14    hdd  0.00099   1.00000  1020 MiB   66 MiB   25 MiB   3 KiB   41 MiB   954 MiB   6.43  0.96   56      up
15    hdd  0.00099   1.00000  1020 MiB   64 MiB   23 MiB   2 KiB   41 MiB   956 MiB   6.24  0.93   62      up
16    hdd  0.00099   1.00000  1020 MiB   66 MiB   17 MiB   3 KiB   49 MiB   954 MiB   6.47  0.96   57      up
17    hdd  0.00099   1.00000  1020 MiB   64 MiB   19 MiB   3 KiB   45 MiB   956 MiB   6.29  0.93   63      up
                       TOTAL    16 GiB  1.1 GiB  308 MiB  31 KiB  835 MiB    15 GiB   6.73                   
MIN/MAX VAR: 0.23/1.55  STDDEV: 1.86

1.2 crush 运行图管理

1.2.1 导出crush运行图

导出的运行图是二进制格式,无法通过文本编辑器打开,需要使用crushtool工具转换为文本后才能通过vim等工具查看或编辑

# mkdir /ceph/crush -p
# ceph osd getcrushmap -o /ceph/crush/crushmap-202209201501
51

1.2.2 将crush运行图转换成文本

root@ceph-mgr01:~# crushtool -d /ceph/crush/crushmap-202209201501 > /ceph/crush/crushmap-202209201501.txt
root@ceph-mgr01:~# file /ceph/crush/crushmap-202209201501
/ceph/crush/crushmap-202209201501: GLS_BINARY_LSB_FIRST
root@ceph-mgr01:~# file /ceph/crush/crushmap-202209201501.txt
/ceph/crush/crushmap-202209201501.txt: ASCII text
root@ceph-mgr01:~# head /ceph/crush/crushmap-202209201501.txt
# begin crush map
tunable choose_local_tries 0
tunable choose_local_fallback_tries 0
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54

1.2.3 修改配置

# types		# 当前支持的bucket类型
type 0 osd	#osd守护进程,对应到一个磁盘设备
type 1 host	#一个主机
type 2 chassis#刀片服务器的机箱
type 3 rack#一个机柜
type 4 row#一列
type 5 pdu#一个电源pdu
type 6 pod#一个机房区域
type 7 room#一个房间
type 8 datacenter#一个dc
type 9 zone#一个区域
type 10 region#一个地域
type 11 root#bucket分层最顶部
# buckets
host ceph-node01 {  # 类型host名字是ceph-node01
	id -3		# do not change unnecessarily 不要修改
	id -4 class hdd		# do not change unnecessarily 不要修改
	# weight 0.004
	alg straw2		# crush算法,管理OSD角色
	hash 0	# rjenkins1   hash算法 0表示选择rjenkins1算法
	item osd.10 weight 0.001   # osd10权重比,crush会自动根据磁盘空间进行计算,不同磁盘的空间不同权重也不同.
	item osd.11 weight 0.001
	item osd.12 weight 0.001
	item osd.13 weight 0.001
}
root default {  # 根的配置
	id -1		# do not change unnecessarily
	id -2 class hdd		# do not change unnecessarily
	# weight 0.016
	alg straw2
	hash 0	# rjenkins1
	item ceph-node01 weight 0.004
	item ceph-node02 weight 0.004
	item ceph-node03 weight 0.004
	item ceph-node04 weight 0.004
}
# rules
rule replicated_rule {  #副本池的默认配置
	id 0
	type replicated
	min_size 1
	max_size 10  # 默认最大副本为10   <----将这个值改为20
	step take default  # 基于default定义的主机分配OSD
	step chooseleaf firstn 0 type host # 选择主机,故障域类型为主机
	step emit  # 弹出配置即返回客户端
}

1.2.4 文本转crush格式

修改文本配置,改完后将文本转回二进制

# crushtool -c /ceph/crush/crushmap-202209201501.txt -o /ceph/crush/crushmap-202209201501-2

1.2.5 导入新的crush

导入运行图会立即覆盖原有的运行图并立即生效

# ceph osd setcrushmap -i /ceph/crush/crushmap-202209201501-2
52

1.2.5 确认修改是否成功

# ceph osd crush rule dump 
[
    {
        "rule_id": 0,
        "rule_name": "replicated_rule",
        "ruleset": 0,
        "type": 1,
        "min_size": 1,
        "max_size": 20,   # <---刚才修改的值
        "steps": [
            {
                "op": "take",
                "item": -1,
                "item_name": "default"
            },
            {
                "op": "chooseleaf_firstn",
                "num": 0,
                "type": "host"
            },
            {
                "op": "emit"
            }
        ]
    }
]

1.3 crush数据分类管理

ceph crush 算法分配的PG的时候可以将PG分配到不同主机的OSD上,以实现以主机为单位的高可用,这也是默认机制,但是无法保证不同PG位于不同机柜或者机房的主机,如果要事先基于机柜或者是更高级的IDC等方式的数据高可用,而且也不能实现A项目的数据在SSD,B项目的数据在机械盘,如果想要实现此功能需要导出crush运行图,进行手工编辑之后再导入覆盖原有crush运行图.

1.3.1 导出crush运行图并编辑

## 1.导出配置
# ceph osd getcrushmap -o /ceph/crush/crushmap-202209201601
# crushtool -d /ceph/crush/crushmap-202209201601 > /ceph/crush/crushmap-202209201601.txt
## 2.修改配置
## 编辑/ceph/crush/crushmap-202209201601.txt追加以下内容
# vi /ceph/crush/crushmap-202209201601.txt
host ceph-ssdnode01 {
        id -103           # do not change unnecessarily
        id -104 class hdd         # do not change unnecessarily
        # weight 0.004
        alg straw2
        hash 0  # rjenkins1
        item osd.10 weight 0.001
}
host ceph-ssdnode02 {
        id -105           # do not change unnecessarily
        id -106 class hdd         # do not change unnecessarily
        # weight 0.004
        alg straw2
        hash 0  # rjenkins1
        item osd.2 weight 0.001
}
host ceph-ssdnode03 {
        id -107           # do not change unnecessarily
        id -108 class hdd         # do not change unnecessarily
        alg straw2
        hash 0  # rjenkins1
        item osd.14 weight 0.001
}
root ssd {
        id -110           # do not change unnecessarily
        id -200 class hdd         # do not change unnecessarily
        # weight 0.016
        alg straw2
        hash 0  # rjenkins1
        item ceph-ssdnode01 weight 0.004
        item ceph-ssdnode02 weight 0.004
        item ceph-ssdnode03 weight 0.004
}
rule ssd_rule {
        id 100
        type replicated
        min_size 1
        max_size 10
        step take ssd		## 这个类型调用ssd中的主机创建PG
        step chooseleaf firstn 0 type host
        step emit
}

## 3. 导入配置
## 转成2进制
# crushtool -c /ceph/crush/crushmap-202209201601.txt -o /ceph/crush/crushmap-202209201601-2
## 导入2进制
# ceph osd setcrushmap -i /ceph/crush/crushmap-202209201601-2
53

1.3.2 查看规则是否生成

# ceph osd crush rule dump
[
    {
        "rule_id": 0,
        "rule_name": "replicated_rule",
        "ruleset": 0,
        "type": 1,
        "min_size": 1,
        "max_size": 20,
        "steps": [
            {
                "op": "take",
                "item": -1,
                "item_name": "default"
            },
            {
                "op": "chooseleaf_firstn",
                "num": 0,
                "type": "host"
            },
            {
                "op": "emit"
            }
        ]
    },
    {
        "rule_id": 100,
        "rule_name": "ssd_rule",
        "ruleset": 100,
        "type": 1,
        "min_size": 1,
        "max_size": 10,
        "steps": [
            {
                "op": "take",
                "item": -110,
                "item_name": "ssd"
            },
            {
                "op": "chooseleaf_firstn",
                "num": 0,
                "type": "host"
            },
            {
                "op": "emit"
            }
        ]
    }
]

1.3.3 使用ssd规则创建pool

固态盘分别是osd.10,osd.2,osd.14 可以看到下面创建的pg中的osd范围只在这3个盘之上.

# ceph osd pool create sap-ssd-pool 32 32 ssd_rule
pool 'sap-ssd-pool' created
# ceph pg ls-by-pool sap-ssd-pool|awk '{print $1,$2,$15}'
PG OBJECTS ACTING
15.0 0 [14,2,10]p14
15.1 0 [14,10,2]p14
15.2 0 [10,2,14]p10
15.3 0 [14,10,2]p14
15.4 0 [2,14,10]p2
15.5 0 [10,2,14]p10
15.6 0 [2,14,10]p2
15.7 0 [14,10,2]p14
15.8 0 [14,2,10]p14
15.9 0 [10,14,2]p10
15.a 0 [14,2,10]p14
15.b 0 [10,14,2]p10
15.c 0 [10,14,2]p10
15.d 0 [14,10,2]p14
15.e 0 [14,2,10]p14
15.f 0 [14,10,2]p14
15.10 0 [10,2,14]p10
15.11 0 [14,2,10]p14
15.12 0 [10,2,14]p10
15.13 0 [10,14,2]p10
15.14 0 [2,14,10]p2
15.15 0 [14,2,10]p14
15.16 0 [10,2,14]p10
15.17 0 [2,14,10]p2
15.18 0 [10,14,2]p10
15.19 0 [2,14,10]p2
15.1a 0 [14,2,10]p14
15.1b 0 [2,14,10]p2
15.1c 0 [14,2,10]p14
15.1d 0 [14,10,2]p14
15.1e 0 [14,10,2]p14
15.1f 0 [14,10,2]p14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值