1. 程式人生 > 實用技巧 >三 Ceph叢集搭建

三 Ceph叢集搭建

  Ceph叢集

  叢集元件

  Ceph叢集包括Ceph OSD,Ceph Monitor兩種守護程序。
  Ceph OSD(Object Storage Device): 功能是儲存資料,處理資料的複製、恢復、回填、再均衡,並通過檢查其他OSD守護程序的心跳來向Ceph Monitors提供一些監控資訊。
  Ceph Monitor: 是一個監視器,監視Ceph叢集狀態和維護叢集中的各種關係。
  Ceph儲存叢集至少需要一個Ceph Monitor和兩個 OSD 守護程序。

  叢集環境準備

  叢集圖

  準備工作

  準備四臺伺服器,需要可以上外網,其中三臺作為ceph叢集 一臺作為cehp客戶端,除了client外每臺加一個磁碟(/dev/sdb),無需分割槽

  環境檢視

  配置主機名及hosts(四臺主機主機名不一樣hosts一樣)

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
192.168.1.104 client

  關閉防火牆及selinux

  設定ntpdate時間同步並設定在crontab內

ntpdate time1.aliyun.com

  配置ceph的yum源

yum install epel-release -y

  四臺主機均設定,如果需要設定其他頒佈的yum源可以開啟頁面選擇

  http://mirrors.aliyun.com/ceph

# cat /etc/yum.repos.d/ceph.repo 
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=0
priority=1

  配置ssh免密登入

  以node1位部署節點在node1配置使node1可以免密登入四臺主機

ssh-keygen -t rsa
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
ssh-copy-id client

   在node1上ssh其他主機無需輸入密碼代表配置ssh成功

   在node1上安裝部署工具(其他節點不用安裝)

yum install ceph-deploy -y

  建立一個叢集配置目錄

  注意:後面大部分操作在此目錄進行

mkdir /etc/ceph
cd /etc/ceph

  建立叢集

[root@node1 ~]# ceph-deploy new node1

  會在當前配置檔案目錄生成以下配置檔案

#ls
 ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring 

  說明

說明:
ceph.conf  				叢集配置檔案
ceph-deploy-ceph.log  	使用ceph-deploy部署的日誌記錄
ceph.mon.keyring		mon的驗證key檔案 監控需要的令牌

  叢集節點安裝ceph

  node1 node2 node3 client都需要安裝

yum install ceph ceph-radosgw -y

  檢視版本

# ceph -v
ceph version 13.2.10 (564bdc4ae87418a232fc901524470e1a0f76d641) mimic (stable)

  注意: 如果公網OK,並且網速好的話,可以用`ceph-deploy install node1 node2 node3`命令來安裝,但網速不好的話會比較坑
     所以這裡我們選擇直接用準備好的本地ceph源,然後`yum install ceph ceph-radosgw -y`安裝即可。

  客戶端安裝ceph-common

[root@client ~]# yum install ceph-common -y

  建立mon監控

  解決public網路用於監控

  修改配置檔案在[global]配置端新增下面一句

public network = 192.168.1.0/24

  監控節點初始化,並同步配置到所有節點(node1,node2,node3,不包括client)

ceph-deploy mon create-initial

  檢視監控狀態

[root@node1 ceph]# ceph health
HEALTH_OK

  將配置資訊同步到所有節點

ceph-deploy admin node1 node2 node3

  在node2 node3多了幾個配置檔案

[root@node2 ceph]# ll
總用量 12
-rw------- 1 root root 151 8月   3 14:46 ceph.client.admin.keyring
-rw-r--r-- 1 root root 322 8月   3 14:46 ceph.conf
-rw-r--r-- 1 root root  92 4月  24 01:07 rbdmap
-rw------- 1 root root   0 8月   1 16:46 tmpDX_w1Z

  檢視狀態

# ceph health
HEALTH_OK
[root@node1 ceph]# ceph -s
  cluster:
    id:     134c6247-2fd4-4669-8c19-d0c9200d90c8
    health: HEALTH_OK #健康狀態為OK
 
  services:
    mon: 1 daemons, quorum node1
    mgr: node1(active
    osd: 1 osds: 1 up, 1 in
    rgw: 1 daemon active
 
  data:
    pools:   4 pools, 32 pgs
    objects: 189  objects, 1.5 KiB
    usage:   3.0 GiB used, 45 GiB / 48 GiB avail
    pgs:     32 active+clean

  為了防止mon單點故障,你可以加多個mon節點(建議奇數個,因為有quorum仲裁投票)

ceph-deploy mon add node2
ceph-deploy mon add node3

  再次檢視

# ceph -s
  cluster:
    id:     134c6247-2fd4-4669-8c19-d0c9200d90c8
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3
    mgr: node1(active), standbys: node2, node3
    osd: 3 osds: 3 up, 3 in
    rgw: 1 daemon active
 
  data:
    pools:   4 pools, 32 pgs
    objects: 189  objects, 1.5 KiB
    usage:   3.0 GiB used, 45 GiB / 48 GiB avail
    pgs:     32 active+clean

  #### 監控到時間不同步的解決方法

**ceph叢集對時間同步要求非常高, 即使你已經將ntpd服務開啟,但仍然可能有`clock skew deteted`相關警告**

![1546521667118](ceph圖片/ntpd沒啟動造成叢集不健康.png)

請做如下嘗試:

1, 在ceph叢集所有節點上(`node1`,`node2`,`node3`)不使用ntpd服務,直接使用crontab同步

~~~powershell
# systemctl stop ntpd
# systemctl disable ntpd

# crontab -e
*/10 * * * * ntpdate ntp1.aliyun.com 每5或10分鐘同步1次公網的任意時間伺服器
~~~

2, 調大時間警告的閾值

~~~powershell
[root@node1 ceph]# vim ceph.conf
[global] 在global引數組裡新增以下兩行
......
mon clock drift allowed = 2 # monitor間的時鐘滴答數(預設0.5秒)
mon clock drift warn backoff = 30 # 調大時鐘允許的偏移量(預設為5)

  修改了ceph.conf配置需要同步到所有節點

 ceph-deploy --overwrite-conf admin node1 node2 node3

  前面第1次同步不需要加--overwrite-conf引數
  這次修改ceph.conf再同步就需要加--overwrite-conf引數覆蓋

  所有ceph叢集節點上重啟ceph-mon.target服務

systemctl restart ceph-mon.target

  建立mgr(管理)

  eph luminous版本中新增加了一個元件:Ceph Manager Daemon,簡稱ceph-mgr。

  該元件的主要作用是分擔和擴充套件monitor的部分功能,減輕monitor的負擔,讓更好地管理ceph儲存系統。

ceph-deploy mgr create node1

  檢視

# ceph -s
  cluster:
    id:     134c6247-2fd4-4669-8c19-d0c9200d90c8
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3
    mgr: node1(active), standbys: node2, node3
    osd: 3 osds: 3 up, 3 in
    rgw: 1 daemon active
 
  data:
    pools:   4 pools, 32 pgs
    objects: 189  objects, 1.5 KiB
    usage:   3.0 GiB used, 45 GiB / 48 GiB avail
    pgs:     32 active+clean

  新增多個mgr可以實現HA

ceph-deploy mgr create node2
ceph-deploy mgr create node3

  檢視

[root@node1 ceph]# ceph -s
  cluster:
    id:     134c6247-2fd4-4669-8c19-d0c9200d90c8
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3
    mgr: node1(active), standbys: node2, node3
    osd: 3 osds: 3 up, 3 in
    rgw: 1 daemon active
 
  data:
    pools:   4 pools, 32 pgs
    objects: 189  objects, 1.5 KiB
    usage:   3.0 GiB used, 45 GiB / 48 GiB avail
    pgs:     32 active+clean

  建立OSD(儲存盤)

  檢視幫助

[root@node1 ceph]# ceph-deploy disk --help

[root@node1 ceph]# ceph-deploy osd --help

  zap表示幹掉磁碟上的資料,相當於格式化

[root@node1 ceph]# ceph-deploy disk zap node1 /dev/sdb
[root@node1 ceph]# ceph-deploy disk zap node2 /dev/sdb
[root@node1 ceph]# ceph-deploy disk zap node3 /dev/sdb

  將磁碟建立為osd

[root@node1 ceph]# ceph-deploy osd create --data /dev/sdb node1
[root@node1 ceph]# ceph-deploy osd create --data /dev/sdb node2
[root@node1 ceph]# ceph-deploy osd create --data /dev/sdb node3

  檢視

# ceph -s
  cluster:
    id:     134c6247-2fd4-4669-8c19-d0c9200d90c8
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3
    mgr: node1(active), standbys: node2, node3
    osd: 3 osds: 3 up, 3 in #生成3個OSD
    rgw: 1 daemon active
 
  data:
    pools:   4 pools, 32 pgs
    objects: 189  objects, 1.5 KiB
    usage:   3.0 GiB used, 45 GiB / 48 GiB avail #大小為3個磁碟大小總和
    pgs:     32 active+clean
 

  叢集節點的擴容方法

  假設再加一個新的叢集節點node4

  1, 主機名配置和繫結

  2, 在node4上`yum install ceph ceph-radosgw -y`安裝軟體

  3, 在部署節點node1上同步配置檔案給node4. `ceph-deploy admin node4`

  4, 按需求選擇在node4上新增mon或mgr或osd等
  

  ceph dashboard

  檢視叢集狀態確認mgr的active節點

[root@node1 ceph]# ceph -s
  cluster:
    id:     134c6247-2fd4-4669-8c19-d0c9200d90c8
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3
    mgr: node1(active), standbys: node2, node3 #確認mgr active節點為node1
    osd: 3 osds: 3 up, 3 in
    rgw: 1 daemon active
 
  data:
    pools:   4 pools, 32 pgs
    objects: 189  objects, 1.5 KiB
    usage:   3.0 GiB used, 45 GiB / 48 GiB avail
    pgs:     32 active+clean

  檢視開啟及關閉的模組

[root@node1 mgr-dashboard]# ceph mgr module ls
{
    "enabled_modules": [
        "balancer",
        "crash",
        "dashboard",
        "iostat",
        "restful",
        "status"
    ],
    "disabled_modules": [
        {
            "name": "hello",
            "can_run": true,
            "error_string": ""
        },
        {
            "name": "influx",
            "can_run": false,
            "error_string": "influxdb python module not found"
        },
        {
            "name": "localpool",
            "can_run": true,
            "error_string": ""
        },
        {
            "name": "prometheus",
            "can_run": true,
            "error_string": ""
        },
        {
            "name": "selftest",
            "can_run": true,
            "error_string": ""
        },
        {
            "name": "smart",
            "can_run": true,
            "error_string": ""
        },
        {
            "name": "telegraf",
            "can_run": true,
            "error_string": ""
        },
        {
            "name": "telemetry",
            "can_run": true,
            "error_string": ""
        },
        {
            "name": "zabbix",
            "can_run": true,
            "error_string": ""
        }
    ]
}

  開啟dashboard模組

ceph mgr module enable dashboard

  建立自簽名證書

[root@node1 ceph]# ceph dashboard create-self-signed-cert
Self-signed certificate created

  生成金鑰對,並配置給ceph mgr

[root@node1 ceph]#  mkdir /etc/mgr-dashboard
[root@node1 ceph]#  cd /etc/mgr-dashboard/

  

 openssl req -new -nodes -x509 -subj "/O=IT-ceph/CN=cn" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca

[root@node1 mgr-dashboard]# ls
dashboard.crt  dashboard.key

  在ceph叢集的active mgr節點上(我這裡為node1)配置mgr services

[root@node1 mgr-dashboard]# ceph config set mgr mgr/dashboard/server_addr 192.168.1.101
[root@node1 mgr-dashboard]# ceph config set mgr mgr/dashboard/server_port 8080

  重啟dashboard模組,並檢視訪問地址

  注意:需要重啟不重啟檢視的埠是預設的8443埠無法訪問

     重啟就是先關disable再開啟enable

[root@node1 mgr-dashboard]# ceph mgr module disable dashboard
[root@node1 mgr-dashboard]# ceph mgr module enable dashboard

  檢視mgr service

# ceph mgr services
{
    "dashboard": "https://192.168.1.101:8080/"
}

  設定訪問web頁面使用者名稱和密碼

ceph dashboard set-login-credentials admin admin

  通過本機或其它主機訪問 https://ip:8080

  

  Ceph檔案儲存

  要執行Ceph檔案系統,你必須先裝只是帶一個mds的Ceph儲存叢集

  Ceph.MDS:為Ceph檔案儲存型別存放元資料metadata(也就是說Ceph塊儲存和Ceph物件儲存不使用MDS)

  建立檔案儲存並使用

  第1步 在node1部署節點上修改配置/etc/ceph/ceph.conf 增加配置

mon_allow_pool_delete = true

  同步配置檔案

  注意:修改了配置檔案才需要同步,沒有修改不需要同步配置檔案

ceph-deploy --overwrite-conf admin node1 node2 node3

  建立3個mds

[root@node1 ceph]# ceph-deploy mds create node1 node2 node3

  第2步: 一個Ceph檔案系統需要至少兩個RADOS儲存池,一個用於資料,一個用於元資料。所以我們建立它們

[root@node1 ceph]# ceph osd pool create cephfs_pool 128
pool 'cephfs_pool' created
[root@node1 ceph]# ceph osd pool create cephfs_metadata 64
pool 'cephfs_metadata' created

  檢視

[root@node1 ceph]# ceph osd pool ls |grep cephfs
cephfs_pool
cephfs_metadata

  第3步: 建立Ceph檔案系統,並確認客戶端訪問的節點

[root@node1 ceph]# ceph fs new cephfs cephfs_metadata cephfs_pool
new fs with metadata pool 10 and data pool 9

  檢視

[root@node1 ceph]# ceph osd pool ls
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log
cephfs_pool
cephfs_metadata

  

[root@node1 ceph]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_pool ]

[root@node1 ceph]# ceph mds stat
cephfs-1/1/1 up  {0=node3=up:active}, 2 up:standby #這裡看到node3為up狀態

  metadata儲存在node3上

  客戶端準備驗證key檔案

  說明: ceph預設啟用了cephx認證, 所以客戶端的掛載必須要驗證(ceph.conf預設配置檔案開啟)

  在叢集節點(node1,node2,node3)上任意一臺檢視金鑰字串

cat /etc/ceph/ceph.client.admin.keyring

  輸出

 ceph-authtool -p /etc/ceph/ceph.client.admin.keyring >admin.key

  把這個檔案放在客戶端client /root/admin.key

  注意:直接把key複製編輯admin.key文件可能會在掛載時報錯

  客戶端client安裝

yum -y install ceph-fuse

  客戶端掛載

  可以使用其他node主機名進行掛載,例如node3

 mount -t ceph node1:6789:/ /mnt -o name=admin,secretfile=/root/admin.key

  檢視

  注意:如果使用檔案掛載報錯可以使用引數secret=祕鑰進行掛載

  可以使用兩個客戶端, 同時掛載此檔案儲存,可實現同讀同寫

  往掛載的硬碟寫資料可以在dashboard檢視讀寫監控狀態

dd if=/dev/zero of=/mnt/file1 bs=10M count=1000