基本簡介
Ceph是一種爲優秀的性能、可靠性和可擴展性而設計的統一的、分佈式文件系統。
由來
其命名和UCSC(Ceph 的誕生地)的吉祥物有關,這個吉祥物是 “Sammy”,一個香蕉色的蛞蝓,就是頭足類中無殼的軟體動物。這些有多觸角的頭足類動物,是對一個分佈式文件系統高度並行的形象比喻。
Ceph 最初是一項關於存儲系統的 PhD 研究項目,由 Sage Weil 在 University of California, SantaCruz(UCSC)實施。
開發目標
簡單定義爲以下3項:
- 可輕鬆擴展到數 PB 容量
- 支持多種工作負載的高性能(每秒輸入/輸出操作[IOPS]和帶寬)
- 高可靠性
但是,這些目標之間會互相競爭(例如,可擴展性會降低或者抑制性能或者影響可靠性)。Ceph 的設計還包括保護單一點故障的容錯功能,它假設大規模(PB 級存儲)存儲故障是常見現象而不是例外情況。
它的設計並沒有假設某種特殊工作負載,但包括了適應變化的工作負載,並提供最佳性能的能力。它利用 POSIX 的兼容性完成所有這些任務,允許它對當前依賴 POSIX 語義(通過以 Ceph 爲目標的改進)的應用進行透明的部署。
系統架構
Ceph 生態系統架構可以劃分爲四部分: - Clients:客戶端(數據用戶)
- cmds:Metadata server cluster,元數據服務器(緩存和同步分佈式元數據)
- cosd:Object storage cluster,對象存儲集羣(將數據和元數據作爲對象存儲,執行其他關鍵職能)
-
cmon:Cluster monitors,集羣監視器(執行監視功能)
內容源自百科:https://baike.baidu.com/item/CEPH/1882855
操作過程
CEPH環境配置
192.168.27.210 master(ceph-deploy)
192.168.27.211 client1 osd0 mds1、mon1
192.168.27.212 client2 osd1 mds2、mon2
192.168.27.213 client3 osd2 mds3、mon3
主機名
hostnamectl set-hostname master
hostnamectl set-hostname client1
hostnamectl set-hostname client2
hostnamectl set-hostname client3
映射主機名:
192.168.27.210 master
192.168.27.211 client1
192.168.27.212 client2
192.168.27.213 client3
確認節點間映射關係的聯通性:
ping -c 3 master
ping -c 3 client1
ping -c 3 client2
ping -c 3 client3
提示:由於提前做了SSH免登陸,這裏把步驟省了,新裝需要每臺都需要做一次。
每個節點關閉防火牆和selinux
#systemctl stop firewalld
#systemctl disable firewalld
#sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#setenforce 0每個節點安裝和配置NTP(官方推薦的是集羣的所有節點全部安裝並配置 NTP,需要保證各節點的系統時間一致。沒有自己部署ntp服務器,就在線同步NTP)
#yum install ntp ntpdate ntp-doc -y
#systemctl restart ntpd
systemctl status ntpd
每個節點準備yum源
刪除默認的源,國外的比較慢
#yum clean all
#mkdir /mnt/bak
#mv /etc/yum.repos.d/* /mnt/bak/
下載阿里雲的base源和epel源
#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
添加ceph源
#vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1
準備磁盤(實際操作也可以省,只要磁盤沒問題直接安裝都沒問題無需要此步驟)
fdisk /dev/sdb
parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
mkfs.xfs /dev/sdb –f
blkid /dev/sdb #用ansible直觀的看下
部署階段(admin節點上使用ceph-deploy快速部署)
安裝ceph-deploy
sudo yum update -y && sudo yum install ceph-deploy -y
創建cluster目錄
[root@master ~]# mkdir -pv /data/idc-cluster
mkdir: 已創建目錄 "/data/idc-cluster"
創建集羣(後面跟集羣成員節點名稱,這裏master節點只做CEPH-DEPLOY使用)
[root@master idc-cluster]# ceph-deploy new client1 client2 client3
在ceph.conf文件中添加紅色項並保存
[root@client2 ceph]# cat ceph.conf
[global]
fsid = d5a5f367-97d2-45a5-8b6b-b462bd65fe3d
mon_initial_members = client1, client2, client3
mon_host = 192.168.27.211,192.168.27.212,192.168.27.213
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size= 3
public_network = 192.168.27.0/22
重新推送配置信息到各結點:
[root@master idc-cluster]# ceph-deploy --overwrite-conf config push master client1 client2 client3
初始化集羣:
ceph-deploy mon create-initial
添加OSD到集羣
準備OSD(使用prepare命令)
[root@master idc-cluster]# ceph-deploy osd prepare client1:/dev/sdb client2:/dev/sdb client3:/dev/sdb
激活OSD(注意由於ceph對磁盤進行了分區,/dev/sdb磁盤分區爲/dev/sdb1)
[root@master idc-cluster]# ceph-deploy osd activate client1:/dev/sdb1 client2:/dev/sdb1 client3:/dev/sdb1
[root@master idc-cluster]# ceph-deploy admin master client1 client2 client3
創建文件系統
先查看管理節點狀態,默認是沒有管理節點的。
[root@master idc-cluster]# ceph mds stat
e1:
[root@master idc-cluster]#
創建管理節點(master結點作爲管理節點)
[root@master idc-cluster]# ceph-deploy mds create master
再次查看管理節點狀態,發現已經在啓動中
[root@master idc-cluster]# ceph mds stat
e2:, 1 up:standby
創建pool,pool是ceph存儲數據時的邏輯分區,它起到namespace的作用
先查看下:
ceph osd lspools
新創建的ceph集羣只有rdb一個pool。這時需要創建一個新的pool
[root@master idc-cluster]# ceph osd pool create cephfs_data 128 #後面的數字是PG的數量
pool 'cephfs_data' created
再查看下有了:
[root@master idc-cluster]# ceph osd pool create cephfs_metadata 128 #創建pool的元數據
pool 'cephfs_metadata' created
再次查看pool狀態:
ceph fs new myceph cephfs_metadata cephfs_data
檢查mds管理節點狀態
[root@master idc-cluster]# ceph mds stat
查看集羣狀態有警報:
解決方案
在配置文件中,調大集羣的此選項的告警閥值;方法如下,在mon節點的ceph.conf(/etc/ceph/ceph.conf)配置文件中添加:
vi /etc/ceph/ceph.conf
[global]
.......
mon_pg_warn_max_per_osd = 666
推送配置
重啓monitor服務:
systemctl restart ceph-mon.target
1、客戶端掛載使用cephfs:
[root@BDDB ceph]# ceph-fuse -m 192.168.27.211:6789 /ceph/cephsys
2、使用內核驅動程序掛載CephFs
[root@BDDB ~]# mount -t ceph 192.168.27.213:6789:/ /ceph/cephsys/ -o name=admin,secretfile=/etc/ceph/admin.secret
存放文件效果: