--lin.wang 20190310node
環境有三個節點node-1,node-2,node-3,每一個節點三個ssd盤做爲osdlinux
一、添加yum源ceph、base、epelbootstrap
二、全部節點添加互信如:root用戶,及hosts(/etc/hosts)列表centos
三、/etc/ssh/ssh_config中: # StrictHostKeyChecking ask 註釋去掉值改爲noapp
四、關閉firewalld、selinux,或者開放相應端口: mon 678九、osd 6800-8100ssh
五、配置時鐘同步ntpui
六、每一個節點安裝ceph包,yum install ceph -y日誌
mon部署,7-10在node-1執行code
七、uuidgen生一個uuid,用做fsid部署
八、切換到/etc/ceph目錄下,建立ceph.conf,編寫配置文件,以下
[global] fsid = 4f41a244-032c-4d85-b3ff-7cefb2d1ed16 mon_initial_members = node-1,node-2,node-3 mon_host = 192.168.122.94,192.168.122.95,192.168.122.96 public_network = 192.168.122.0/24 cluster_network = 192.168.201.0/24 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd_journal_size = 1024 filestore_xattr_use_omap = true osd_pool_default_size = 3 # Write an object n times. osd_pool_default_min_size = 1 # Allow writing n copy in a degraded state. osd_pool_default_pg_num = 128 osd_pool_default_pgp_num = 128 osd_crush_chooseleaf_type = 1
九、
建立monitor的key用於多個monitor間通訊,保存在/tmp/ceph.mon.keyring
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
生成管理用戶client.admin
及其key,保存在/etc/ceph/ceph.client.admin.keyring
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' #key文件命令規則:{cluster name}-{user-name}.keyring
添加client.admin
的key到ceph.mon.keyring
文件
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
十、建立monitor map
#默認的monitor port是6789 monmaptool --create --add node-1 192.168.122.94 --add node-2 192.168.122.95 --add node-3 192.168.122.96 --fsid 4f41a244-032c-4d85-b3ff-7cefb2d1ed16 /tmp/monmap
monmaptool --print /tmp/monmap能夠查看生成的monmap
ceph auth get mon. 能夠獲取monmap
能夠中止mon服務後使用以下方法導出monmap
ceph-mon -i hostname --extract-monmap /tmp/monmap 從當前節點的/var/lib/ceph/mon/hostname 導出monmap
注入monmap
中止全部節點mon服務
ceph-mon -i mon-id --inject-monmap /tmp/monmap
啓動mon服務
十一、在每一個mon節點上分別建立mon的目錄
sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
node-1> mkdir /var/lib/ceph/mon/ceph-node-1
node-2> mkdir /var/lib/ceph/mon/ceph-node-2
node-3> mkdir /var/lib/ceph/mon/ceph-node-3
十二、初始化monitor
將node-1的
/tmp/monmoap、/tmp/ceph.mon.keyring、/etc/ceph/ceph.conf、/etc/ceph/ceph.client.admin.keyring
部署完畢後,/tmp下的這兩個文件能夠刪除
複製到node-2和node-3的對應目錄
ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
node-1> ceph-mon --mkfs -i node-1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
node-2> ceph-mon --mkfs -i node-2 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
node-3> ceph-mon --mkfs -i node-3 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
此時在每一個節點/var/lib/ceph/mon/{cluster}-{hostname}目錄下生成了store.db和keyring
1三、 在每一個節點的mon目錄下,建立兩個文件:
/var/lib/ceph/mon/{cluster}-{hostname}/{done,sysvinit}
node-1> touch /var/lib/ceph/mon/ceph-node-1/{done,sysvinit}
node-2> touch /var/lib/ceph/mon/ceph-node-2/{done,sysvinit}
node-3> touch /var/lib/ceph/mon/ceph-node-3/{done,sysvinit}
其中done文件表示monitor已經建立完成,能夠啓動使用了。
缺乏sysvinit會報錯。
老版本要求建立upstart已自動啓動,當前版本建立後會起不來。
1四、啓動monitor服務: 每一個mon節點,/etc/init.d/ceph start mon
1五、開機自啓動,chkconfig ceph on
osd部署
1六、建立osd idceph osd create
本次有9個osd,所以建立9個即0-8: for i in $(seq 0 8) ;do ceph osd create;done
新版本支持指定osd id,當前版本不支持
建立完成後,能夠經過ceph osd tree看到全部osd處於down和沒有crush weight的狀態
[root@ceph-1 ~]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0 root default
0 0 osd.0 down 0 1.00000
1 0 osd.1 down 0 1.00000
2 0 osd.2 down 0 1.00000
3 0 osd.3 down 0 1.00000
4 0 osd.4 down 0 1.00000
5 0 osd.5 down 0 1.00000
6 0 osd.6 down 0 1.00000
7 0 osd.7 down 0 1.00000
8 0 osd.8 down 0 1.00000
1七、在每一個節點建立osd的目錄,mkdir /var/lib/ceph/osd/{cluster-name}-{osd-number}
node-1> mkdir /var/lib/ceph/osd/ceph-{0..2}
node-2> mkdir /var/lib/ceph/osd/ceph-{3..5}
node-3> mkdir /var/lib/ceph/osd/ceph-{6..8}
1八、將全部osd磁盤分區並掛載
parted -s /dev/vdb mklabel gpt mkpart primary 2048s 100%
mkfs.xfs /dev/vdb1
[root@ceph-1 osd]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 7.1G 1.2G 6.0G 16% / devtmpfs 2.0G 0 2.0G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 2.0G 8.5M 2.0G 1% /run tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda1 1014M 125M 890M 13% /boot tmpfs 396M 0 396M 0% /run/user/0 /dev/vdb1 10G 33M 10G 1% /var/lib/ceph/osd/ceph-0 /dev/vdc1 10G 33M 10G 1% /var/lib/ceph/osd/ceph-1 /dev/vdd1 10G 33M 10G 1% /var/lib/ceph/osd/ceph-2
1九、各osd節點初始化osd目錄
ceph-osd -i {osd-num} --mkfs --mkkey --osd-uuid [{uuid}]
ceph-osd -i 0 --mkfs --mkkey
加
--mkkey
選項運行ceph-osd
以前,此目錄必須是空的;另外,若是集羣名字不是默認值,還要給ceph-osd
指定--cluster
選項。
20、註冊osd的keyring.
ceph auth add osd.{osd-num} osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/{cluster-name}-{osd-num}/keyring
ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring
路徑內
ceph-{osd-num}
裏的ceph
其含義爲$cluster-$id
,若是你的集羣名字不是ceph
,請指定本身的集羣名對於恢復已有的keyring,可使用ceph auth import -i osd_path/keyring並auth caps賦權:ceph auth caps osd.0 osd 'allow *' mon 'allow profile osd'
2一、將節點加入到crush map,並放置在default根root下。
ceph [--cluster {cluster-name}] osd crush add-bucket {hostname} host
ceph osd crush add-bucket node-1 host
ceph osd crush move node-1 root=default
move到root下先後crush 對比
以前
[root@ceph-1 osd]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-2 0 host node-1
-1 0 root default以後
[root@ceph-1 osd]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0 root default
-2 0 host node-1crush中沒有刪除bucket的命令,只能導出crushmap修改
先mkkey才能mova osd 到bucket下,不然mkkey會報錯
2二、在crushmap把osd添加到host下:
ceph [--cluster {cluster-name}] osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
ceph osd crush add osd.0 1.0 host=node-1
添加後,則osd屬於host下,啓動服務便可接收數據。加入以前和以後對比:
以前
[root@ceph-1 osd]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0 root default
-2 0 host node-1
0 0 osd.0 down 0 1.00000
1 0 osd.1 down 0 1.00000
2 0 osd.2 down 0 1.00000以後
[root@ceph-1 osd]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 3.00000 root default
-2 3.00000 host node-1
0 1.00000 osd.0 down 0 1.00000
1 1.00000 osd.1 down 0 1.00000
2 1.00000 osd.2 down 0 1.00000
2三、給osd建立sysvinit並啓動osd服務
建立sysvinit,在osd的目錄下 touch /var/lib/ceph/osd/{cluster-name}-{osd-num}/sysvinit
touch /var/lib/ceph/osd/ceph-0/sysvinit
2四、添加journal
#清除磁盤全部分區(從新添加時須要) #sgdisk --zap-all --clear --mbrtogpt /dev/vdf
Journal大小的選擇尊循下面的規則:
osd journal size = {2 * (expected throughput * filestore_max_sync_interval)}
filestore_max_sync_interval爲ceph配置,能夠在ceph的config中獲取,默認爲5s
即osd journal的大小應該設置爲(磁盤的帶寬 * 同步時間) 的2倍。
2五、給osd和journal打標籤
數據盤標籤
sgdisk --typecode=1:4fbd7e29-9d25-41b8-afd0-062c0ceff05d /dev/sdx
日誌盤標籤
sgdisk --typecode=1:45b0969e-9b03-4f30-b4c6-b4b80ceff106 /dev/sdx
注:對全部日誌盤和數據盤執行此操做,日誌盤分區與數據盤不一樣 typecode = 1 表明
第一個分區
Other TAG
sgdisk --typecode=1:4fbd7e29-9d25-41b8-afd0-062c0ceff0f9 -- /dev/sdx
刪除舊的journal,把ssd分區的uuid連接到osd目錄爲journal,並把uuid寫入journal_uuid文件
並執行
ceph-osd -i osd_numer --mkjournal
2六、在osd所在節點啓動osd的服務,將osd狀態變爲up
service ceph start osd
osd服務啓動後,會自動up和in到集羣。
依次把全部osd節點的osd完成部署和啓動則集羣部署完成
osd的服務部署有精簡方法:
- 準備:
ceph-disk prepare --cluster {cluster-name} --cluster-uuid {uuid} --fs-type {ext4|xfs|btrfs} {data-path} [{journal-path}]
- 激活:
ceph-disk activate {data-path} [--activate-key {path}]
注: 若是你的 Ceph 節點上沒有
/var/lib/ceph/bootstrap-osd/{cluster}.keyring
,那麼應該外加--activate-key
參數。osd的自動啓動是udev的規則控制,因此須要給osd用sgdisk打上標籤
規則
/usr/lib/udev/rules.d/95-ceph-osd.rules
/usr/lib/udev/rules.d/60-ceph-by-parttypeuuid.rules