Last updated on 9 months ago
ceph部署(mon) 更改的yum源(我这里用的公司的) 1 2 3 4 5 6 7 8 9 10 11 12 [root@node29 ~] [obs-ceph] name=Obs-Ceph-CentOS-$releasever baseurl=http://10.1.31.40/ceph-rpm-centos7-x86_64-basic/ref/v14.2.11-2022071420/$basearch / gpgcheck=0 [obs-ceph-noarch] name=Obs-Ceph-CentOS-$releasever Noarch baseurl=http://10.1.31.40/ceph-rpm-centos7-x86_64-basic/ref/v14.2.11-2022071420/noarch/ gpgcheck=0 You have new mail in /var/spool/mail/root [root@node29 ~]
安装时遇到问题: 提示无法访问 host,后来发现,在yum.repos.d中,有个repo是失效的(用yum安装时会对 yum.repos.d 的源都检查一遍),所以无法通过,通过ip找到对应的rppo文件并移除就可以安装了
安装完成后查看ceph 版本
1 2 [root@node31 tmp] ceph version 14.2.11-2022071420 (cfbcf2f104d05f7d6c69573d275597371890966e) nautilus (stable)
安装mon准备工作 最开始是要先安装一个mon(moniter),mon也是集群最为关键的组件
创建 mon需要三个信息:
集群id
1 2 uuidgen monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap
秘钥环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *' sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r' sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
生成 monmap,使用 monmaptool 可以生成 ,需要结合 节点主机ip,和mon的名字,以及 fsid,可以生成 monmap
ceph中的map 我理解是存放某个功能节点信息的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@node29 bootstrap-osd] usage: monmaptool [--print ] [--create [--clobber] [--fsid uuid]] [--enable-all-features] [--generate] [--set-initial-members] [--add name 1.2.3.4:567] [--rm name] [--feature-list [plain|parseable]] [--feature-set <value> [--optional|--persistent]] [--feature-unset <value> [--optional|--persistent]] [--set-min-mon-release <release-major-number>] <mapfilename> You have new mail in /var/spool/mail/root [root@node29 bootstrap-osd] [root@node29 bootstrap-osd] ??¨gL?.@???^e??? ^e??? mon-node298 mon-node29 [root@node29 bootstrap-osd] monmaptool: monmap file /tmp/monmap epoch 0 fsid e518351f-a867-4ce6-b0c5-2e40a2bfcd1c last_changed 2022-08-10 15:59:26.547689 created 2022-08-10 15:59:26.547689 min_mon_release 0 (unknown) 0: v1:10.1.23.29:6789/0 mon.mon-node29 [root@node29 bootstrap-osd]
创建mon 数据的文件夹
1 2 sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname} [root@node29 bootstrap-osd]
关联 mon进程 和 密钥,并且初始化 mon 数据目录
1 2 3 4 5 6 7 8 9 10 11 12 # ceph-mon -h 可以查看使用命令,不过 官网更为详细 https://docs.ceph.com/en/quincy/man/8/ceph-mon/ sudo -u ceph ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring# --mkfs 初始化 保存mon 数据的目录 # 注意节点名字要和你的集群名字一致 sudo -u ceph ceph-mon --mkfs -i mon-node29 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring# 执行后在 mon 的数据目录里多了 [root@node29 ceph-mon-node29]# ls -rh /var/lib/ceph/mon/ceph-mon-node29 store.db kv_backend keyring# 是个 rocksdb数据库?
最后编辑配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 vi /etc/ceph/ceph.conf [global] fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993 # 用 uuidgen生产的uid mon initial members = mon-node29 mon host = 192.168.0.1 #节点ip public network = 192.168.0.0/24 # 掩码# cephx 是一种验证方式,也可以设置为 none取消认证 auth cluster required = cephx # 各个功能节点(mon,osd,mgr)之间交流 都是否需要验证 auth service required = cephx # 各个功能节点(mon,osd,mgr)和集群之间的验证 auth client required = cephx # 客户端需要验证 osd journal size = 1024 osd pool default size = 3 osd pool default min size = 2 osd pool default pg num = 333 osd pool default pgp num = 500 osd crush chooseleaf type = 1
启动服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 sudo systemctl start ceph-mon@mon-node29 sudo systemctl status ceph-mon@mon-node29# 最后要 ceph -s验证下 [root@node29 ~]# ceph -s cluster: id: 311a4057-0837-4af8-92ab-a8053e4a3a57 health: HEALTH_WARN OSD count 1 < osd_pool_default_size 3 services: mon: 1 daemons, quorum mon-node29 (age 3h) mgr: node29(active, since 3h) osd: 1 osds: 1 up (since 2h), 1 in (since 2h) data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 1.0 GiB used, 299 GiB / 300 GiB avail pgs:
如果服务没有启,可以去 ceph的日志查看,定位问题
添加多个 mon 一般来说,一个集群要三个 mon(选举),现在有三台服务器,每个服务器都安装一个mon
同步配置文件和秘钥 在ceph.conf 添加 节点ip和 mon 名字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 [root@node29 mon] [global] fsid = e518351f-a867-4ce6-b0c5-2e40a2bfcd1c mon initial members = mon-node29,mon-node30,mon-node31 mon host = 10.1.23.29,10.1.23.30,10.1.23.31 public network = 10.1.23.0/24 auth cluster required = cephx auth service required = cephx auth client required = cephx osd journal size = 1024 osd pool default size = 3 osd pool default min size = 2 osd pool default pg num = 333 osd pool default pgp num = 33 [root@node29 mon] ceph.client.admin.keyring 100% 151 189.6KB/s 00:00 ceph.conf 100% 429 1.0MB/s 00:00 You have new mail in /var/spool/mail/root [root@node29 mon] [root@node29 mon] ceph.keyring 100% 129 13.9KB/s 00:00 [root@node29 mon] [root@node29 mon] ceph.mon.keyring 100% 506 668.9KB/s 00:00 [root@node31 lib] [root@node31 mon] exported keyring for mon. [root@node31 ~] got monmap epoch 5 [root@node31 ~] [root@node31 ceph-mon-node31] adding mon.node2 at [v2:10.1.23.31:3300/0,v1:10.1.23.31:6789/0] [root@node31 ceph-mon-node31] [root@node29 ~] cluster: id : e518351f-a867-4ce6-b0c5-2e40a2bfcd1c health: HEALTH_WARN OSD count 2 < osd_pool_default_size 3 clock skew detected on mon.mon-node30 services: mon: 3 daemons, quorum mon-node29,mon-node30,mon-node31 (age 2m) mgr: node29(active, since 9h) osd: 2 osds: 2 up (since 23h), 2 in (since 23h) data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 2.0 GiB used, 148 GiB / 150 GiB avail pgs: [root@node29 ~]
ceph 最开始 是要先创建一个 moniter ,最先创建的用户也是 mon,接下来创建 client,他们各自都有 keyring,上文有个步骤是将 client的 keyring 加入到mon的keyring,mon是有保存 client.admin 的秘钥,用户形成都是这 向下开始;刚才还有一个 bootstrap-osd也加入了 mon的keyring,这个 bootstrap-osd 以后将引导生成 osd用户;
集群启动,mon最先启动,然后才启动osd,mon启动时候是不需要想任何进程进行秘钥验证,其他用户验证操作时候,需要向mon进行验证keyring
添加mgr 节点
eph-mgr 的主要功能是提供外部监测和管理系统的接口
在ceph里各个节点 都要有秘钥进行认证 ,所以 创建 mgr前应该为添加秘钥
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ceph auth get-or-create mgr.node29 mon 'allow *' osd 'allow *' [root@node29 ceph-node29] exported keyring for mgr.node29 [mgr.node29] key = AQBE/OBi5oFENxAAj5QZVDRi7NMOveXQTjathA== caps mon = "allow *" caps osd = "allow *"
创建mgr的数据目录
1 2 # mkdir /var/lib/ceph/mgr/ceph-{hostname}/ mkdir /var/lib/ceph/mgr/ceph-node29
将刚才生成的秘钥导出为 keyring
1 ceph auth get mgr.node29 -o /var/ lib/ceph/mg r/ceph-node29/ keyring
启动mgr
添加osd L版本中 ceph-disk 都被 ceph-volum 取代了,下面都是都使用ceph-volume 创建osd
傻瓜式安装: 用 ceph-volume 添加里面有很多细节,我看安装的日志,好像是执行了很多脚本,这里面具体细节原理,以后再补充(留坑)
1 2 3 4 5 6 7 8 9 10 11 12 [root@node29 ceph] ====== Device report /dev/sdd3 ====== available True rejected reasons path /dev/sdd3 device id QEMU_HARDDISK_drive-scsi0-0-0-1 human readable size 50.00 GB [root@node29 ceph]
用 ceph-volume 创建osd(osd在其他服务器上)
1 2 3 4 5 6 7 sudo ceph-volume lvm create --data /dev/hdd1
激活 osd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # 生产osd 可以查看osd 的id 和fsid [root@node31 ~]# ceph-volume lvm list ====== osd.2 ======= [block] /dev/ceph-ffbb3830-6bbf-4c6a-9e64-4d2817e64965/osd-block-5b5f3d72-caed-4369-91c1-c1667951a5e7 block device /dev/ceph-ffbb3830-6bbf-4c6a-9e64-4d2817e64965/osd-block-5b5f3d72-caed-4369-91c1-c1667951a5e7 block uuid ri9l8O-g17I-s2wn-memc-vJt0-B3E1-B2tSdX cephx lockbox secret cluster fsid 311a4057-0837-4af8-92ab-a8053e4a3a57 cluster name ceph crush device class None encrypted 0 osd fsid 5b5f3d72-caed-4369-91c1-c1667951a5e7 osd id 2 osdspec affinity type block vdo 0 devices /dev/sdb# 同过id 和fsid 激活 osd sudo ceph-volume lvm activate 2 5b5f3d72-caed-4369-91c1-c1667951a5e7# 如果osd 挂掉了 osd tree 里 状态为dowm # 可以使用 systemctl restart重启服务, @后面数字为 osd序号 systemctl restart ceph-osd@3.service
验证
手动安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@node31 ~] [root@node31 ~] 47225359-3e97-4c95-b1ae-992339d44ddc [root@node31 ~] [root@node31 ceph-4] AQCotPVihM3rDBAAJ1ikAGBHtti5ogVSrZ/xRg== [root@node31 ceph-4] ceph osd new $UUID [root@node31 ceph-4] 5mkdir /var/lib/ceph/osd/ceph-$ID mkfs.xfs /dev/sdb mount /dev/sdb /var/lib/ceph/osd/ceph-$ID ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-$ID /keyring \ --name osd.$ID --add-key $OSD_SECRET ceph-osd -i $ID --mkfs --osd-uuid $UUID systemctl start ceph-osd@$ID
改变osd层级 在部署 OSD 时,它们会自动添加到 CRUSH 映射中的主机存储桶下,这个存储桶以运行它们的节点命名,默认是平面节点层次,但实际上为了故障隔离,可以添加不同的 bucket类型 到默认的层级中, 如 osd(device)host,chassis,rack,row,datacenter,zone,region,root等实现 层级可以是 rack -> host -> osd
添加rack
1 2 # 添加rack ceph osd crush add-bucker rack01 rack
改变层级
1 2 3 # 默认是 osd直接在host下的,所以要需要修改host的root # ceph osd crush move 所在层级名 父层级名 ceph osd crush move node31 rack=rack03
改变后效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@node29 ceph-node29]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.87900 root default -9 0.29300 rack rack01 -3 0.29300 host node29 0 hdd 0.29300 osd.0 up 1.00000 1.00000 -10 0.29300 rack rack02 -5 0.29300 host node30 1 hdd 0.29300 osd.1 up 1.00000 1.00000 -11 0.29300 rack rack03 -7 0.29300 host node31 2 hdd 0.29300 osd.2 up 1.00000 1.00000 # weight 是指定osd对应磁盘大小, # REWEIGHT
添加池 Ceph 的池是一个用来存储对象的逻辑分区,每个池中有一定数量pg,通过pg可以吧一定数量的对象映射到不同OSD中,
创建pool
1 2 3 4 5 6 [root@node29 ceph-node29] pool 'pool_A1' created
查看 pool 信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [root@node29 ceph-node29] 2 pool_A1 [root@node29 ceph-node29] pool 2 'pool_A1' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode warn last_change 38 flags hashpspool stripe_width 0 [root@node29 ceph-node29] min_size: 2 [root@node29 ceph-node29] pg_num: 128 [root@node29 ceph-node29] crush_rule: replicated_rule [root@node29 ceph-node29] size: 3 [root@node29 ceph-3] quotas for pool 'pool_A1' : max objects: 1k objects max bytes : 10 GiB [root@node29 ceph-3]
修改 pool 配置信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ceph osd pool set pool_A1 size 3 ceph osd pool set-quota {poolname} max_objects {number} [root@node29 ceph-node29] set-quota max_objects = 1000 for pool pool_A1 ceph osd pool set-quota {poolname} max_bytes {byte number} [root@node29 ceph-node29] set-quota max_bytes = 10737418240 for pool pool_A1 [root@node29 ceph-node29] pool 2 'pool_A1' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode warn last_change 41 flags hashpspool max_bytes 10737418240 max_objects 1000 stripe_width 0
删除pool
1 2 3 4 5 6 ceph osd pool delete {poolname} {poolname} --yes-i-really-really-mean-it Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
rados命令实践 1. 池相关命令 再上一步添加池后,使用 rados命令对池增删数据,当然 rados也可以对创建池
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [root@node29 home] [root@node29 home] obj_A [root@node29 home] pool_A1/obj_A mtime 2022-07-28 17:34:54.000000, size 7943881 [root@node29 home] POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS RD WR_OPS WR USED COMPR UNDER COMPR pool_A1 23 MiB 1 0 3 0 0 0 11 7.6 MiB 5 7.6 MiB 0 B 0 B total_objects 1 total_used 3.0 GiB total_avail 897 GiB total_space 900 GiB [root@node29 home] root 516703 1.2 0.1 16320864 419544 ? Sl 09:15 0:10 python3 /opt/expontech/obs-manager/obs_manager/csm_manager_status.py [root@node29 home]
…..