1 核心組件介紹node
Object算法
Ceph最底層的存儲單元是Object對象,每一個Object包含元數據和原始數據。瀏覽器
OSD緩存
OSD全稱Object Storage Device,也就是負責響應客戶端請求返回具體數據的進程。一個Ceph集羣通常都有不少個OSD。bash
PG服務器
PG全稱Placement Grouops,是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層實際上是爲了更好的分配數據和定位數據。cookie
Monitorapp
一個Ceph集羣須要多個Monitor組成的小集羣,它們經過Paxos同步數據,用來保存OSD的元數據。ssh
RADOStcp
RADOS全稱Reliable Autonomic Distributed Object Store,是Ceph集羣的精華,用戶實現數據分配、Failover等集羣操做。
Libradio
Librados是Rados提供庫,由於RADOS是協議很難直接訪問,所以上層的RBD、RGW和CephFS都是經過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。
CRUSH
CRUSH是Ceph使用的數據分佈算法,相似一致性哈希,讓數據分配到預期的地方。
RBD
RBD全稱RADOS block device,是Ceph對外提供的塊設備服務。
RGW
RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。
MDS
MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數據服務。
CephFS
CephFS全稱Ceph File System,是Ceph對外提供的文件系統服務。
2 安裝準備
操做系統:CentOS Linux release 7.4.1708 (Core)
內核版本:3.10.0-693.el7.x86_64
服務器使用規劃
Node |
Host Name |
Ceph Deploy |
Ceph Admin |
Mon |
OSD |
MDS |
MGR |
RGW |
192.168.2.241 |
node1 |
√ |
√ |
√ |
√ |
√ |
||
192.168.2.242 |
node2 |
√ |
√ |
√ |
√ |
|||
192.168.2.243 |
node3 |
√ |
√ |
|||||
192.168.2.244 |
node4 |
√ |
||||||
192.168.2.245 |
node5 |
√ |
存儲準備
node四、node5兩個osd節點單獨掛載一個5G大小的存儲盤
目錄規劃
/install #用來存放安裝文件
建立以上目錄(node1)
mkdir /install
依次修改主機名,xx請替換1-5
hostnamectl set-hostname nodexx
配置免密訪問(管理節點)
ssh-keygen ssh-copy-id node1 ssh-copy-id node2 ssh-copy-id node3 ssh-copy-id node4 ssh-copy-id node5
修改主機hosts配置(管理節點)
vi /etc/hosts 192.168.2.241 node1 192.168.2.242 node2 192.168.2.243 node3 192.168.2.244 node4 192.168.2.245 node5
同步hosts配置到其餘節點
scp /etc/hosts node2:/etc/ scp /etc/hosts node3:/etc/ scp /etc/hosts node4:/etc/ scp /etc/hosts node5:/etc/
關閉防火牆(全部節點)
setenforce 0 systemctl stop firewalld && systemctl disable firewalld
時間同步(全部節點)
yum install ntp ntpdate -y ntpdate cn.pool.ntp.org systemctl enable ntpd systemctl start ntpd
內核優化(node1)
vi /etc/sysctl.conf net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_max_tw_buckets =5000 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_max_orphans = 16384
同步到其餘節點
scp /etc/sysctl.conf node2:/etc scp /etc/sysctl.conf node3:/etc scp /etc/sysctl.conf node4:/etc scp /etc/sysctl.conf node5:/etc vi /etc/security/limits.conf soft nofile 1024000 hard nofile 1024000 root soft nofile 1024000 root hard nofile 1024000
同步到其餘節點
scp /etc/security/limits.conf node2:/etc/security scp /etc/security/limits.conf node3:/etc/security scp /etc/security/limits.conf node4:/etc/security scp /etc/security/limits.conf node5:/etc/security
生效配置(全部節點)
sysctl -p
修改環境配置(全部節點)
echo "ulimit -HSn 102400" >> /etc/profile
添加yum源
cat << EOM > /etc/yum.repos.d/ceph.repo [Ceph-SRPMS] name=Ceph SRPMS packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/ enabled=1 gpgcheck=0 type=rpm-md [Ceph-aarch64] name=Ceph aarch64 packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/aarch64/ enabled=1 gpgcheck=0 type=rpm-md [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ enabled=1 gpgcheck=0 type=rpm-md [Ceph-x86_64] name=Ceph x86_64 packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/ enabled=1 gpgcheck=0 type=rpm-md EOM
同步到其餘節點
scp /etc/yum.repos.d/ceph.repo node2:/etc/yum.repos.d scp /etc/yum.repos.d/ceph.repo node3:/etc/yum.repos.d scp /etc/yum.repos.d/ceph.repo node4:/etc/yum.repos.d scp /etc/yum.repos.d/ceph.repo node5:/etc/yum.repos.d
清理緩存(全部節點)
yum makecache
3 集羣部署
安裝依賴(全部節點)
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
安裝ceph(全部節點)
yum -y install epel-release ceph ceph-radosgw ceph-common deltarpm
安裝ceph-deploy(node1執行)
yum install -y ceph-deploy
建立一個名稱爲mycluster的集羣,若是沒有指定--clster,默認名稱爲ceph,集羣節點(mon)包括node{1,2,3}(node1執行)
cd /install ceph-deploy --cluster mycluster new node{1,2,3}
修改ceph配置文件,增長網段(生產環境以實際爲準,建議public和cluster使用不一樣的段)
vi ceph.conf public network = 192.168.2.0/24 cluster network = 192.168.2.0/24 mon_allow_pool_delete = true osd pool default size = 2 osd pool default min size = 1 osd pool default pg num = 64 osd pool default pgp num = 64
建立和初始化監控節點並收集全部的祕鑰(node1執行)
ceph-deploy mon create-initial
將配置文件和管理祕鑰複製到管理節點和ceph節點(node1執行)
ceph-deploy admin node{1,2,3,4,5}
部署mgr(node1執行)
ceph-deploy mgr create node{1,2}
部署osd(node1執行)
ceph-deploy osd create --data /dev/sdb node4 ceph-deploy osd create --data /dev/sdb node5
4 啓用Dashboard
先查看dashboard狀態
ceph mgr services
啓用dashboard
ceph mgr module enable dashboard
生成自簽名證書
ceph dashboard create-self-signed-cert cd /install openssl req \ -new -nodes \ -x509 \ -subj "/O=IT/CN=ceph-mgr-dashboard" \ -days 3650 \ -keyout dashboard.key \ -out dashboard.crt \ -extensions v3_ca
啓用證書
ceph config-key set mgr mgr/dashboard/crt -i dashboard.crt ceph config-key set mgr mgr/dashboard/key -i dashboard.key
不用證書功能的時候,能夠選擇禁用證書
ceph config set mgr mgr/dashboard/ssl false
注:更換證書後,須要重啓dashboard
ceph mgr module disable dashboard ceph mgr module enable dashboard
配置服務地址、端口(生產環境中,mgr的訪問地址建議使用域名或者負載IP)
ceph config set mgr mgr/dashboard/server_addr 192.168.2.241 ceph config set mgr mgr/dashboard/server_port 8443
建立用戶
ceph dashboard set-login-credentials admin admin
重啓mgr
systemctl restart ceph-mgr@node1
瀏覽器訪問
https://192.168.2.241:8443
5 塊存儲
任意ceph集羣主機執行
建立存儲池,命名爲ec,pg和pgs分配爲64(這裏只是測試,生產環境請按公式計算pg和pgs)
ceph osd pool create ec 64 64
rbd方式啓用該存儲池
ceph osd pool application enable ec rbd
建立用戶client.ec,用於客戶端掛載訪問
ceph auth get-or-create client.ec \ mon 'allow r' \ osd 'allow rwx pool=ec' \ -o /etc/ceph/ceph.client.ec.keyring
遠端客戶端掛載
檢查客戶端內核版本,內核版本建議在2.6.34以上版本
uname -r
檢查當前內核版本是否支持rbd
modprobe rbd && lsmod|grep rbd
在hosts配置添加ceph集羣主機映射
vi /etc/hosts 192.168.2.241 node1 192.168.2.242 node2 192.168.2.243 node3 192.168.2.244 node4 192.168.2.245 node5
考慮到國外下載慢的問題,配置國內鏡像源
cat << EOM > /etc/yum.repos.d/ceph.repo [Ceph-SRPMS] name=Ceph SRPMS packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/ enabled=1 gpgcheck=0 type=rpm-md [Ceph-aarch64] name=Ceph aarch64 packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/aarch64/ enabled=1 gpgcheck=0 type=rpm-md [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ enabled=1 gpgcheck=0 type=rpm-md [Ceph-x86_64] name=Ceph x86_64 packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/ enabled=1 gpgcheck=0 type=rpm-md EOM
清理緩存
yum makecache
安裝依賴
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
安裝ceph客戶端
yum -y install ceph-common
將服務端生成的用戶祕鑰(client.ec)拷貝到客戶端服務器
scp -r /etc/ceph/ceph.client.ec.keyring node5:/etc/ceph
驗證用戶權限,因爲沒有使用admin帳號,因此每次都須要指定訪問用戶
ceph -s --name client.ec
在存儲池ec上建立塊設備(磁盤),命名爲ec,分配最大存儲空間10G
rbd create ec/ec --size 10G --image-format 2 --image-feature layering --name client.ec
查看建立的塊設備
rbd info ec/ec --name client.ec 或 rbd info -p ec ec --name client.ec
將塊設備映射到本地磁盤
rbd map ec/ec --name client.ec
格式化磁盤,能夠選擇格式化成ext4或xfs
mkfs.ext4 /dev/rbd0
建立掛載目錄
mkdir /ecdata
將盤符掛載到該目錄
mount /dev/rbd0 /ecdata
查看掛載狀態
df -h rbd showmapped
擴容
rbd resize --size xxG pool-name/image-name
擴容存儲空間後,在客戶端不會當即生效,須要在客戶端執行以下操做
#針對ext文件系統,rbd0爲映射的本地設備名 blockdev --getsize64 /dev/rbd0 resize2fs /dev/rbd0 #針對xfs文件系統,還須要執行以下命令,mnt爲掛載點 xfs_growfs /mnt
建立快照
rbd snap create ec/ec@ec-snap
回滾快照(出現回滾失敗時,須要先解除掛載和本地映射)
rbd snap rollback ec/ec@ec-snap
克隆快照
rbd snap protect ec/ec@ec-snap rbd snap clone ec/ec@ec-snap new-ec-pool
6 文件存儲
服務端
部署mds(node1執行),啓用文件存儲時建立
ceph-deploy mds create node2
建立存儲池
ceph osd pool create cephfs_data 64 ceph osd pool create cephfs_metadata 64
建立文件系統
ceph fs new cephfs cephfs_metadata cephfs_data
查看MDS服務器狀態
ceph mds stat
建立用戶
ceph auth get-or-create client.cephfs \ mon 'allow r' \ mds 'allow r,allow rw path=/' \ osd 'allow rw pool=cephfs_data' \ -o /etc/ceph/ceph.client.cephfs.keyring
同步key到其餘節點
scp /etc/ceph/ceph.client.cephfs.keyring node2:/etc/ceph scp /etc/ceph/ceph.client.cephfs.keyring node3:/etc/ceph
查看用戶key
ceph auth get-key client.cephfs
客戶端
掛載ceph文件系統(啓用cephx認證後,必須指定受權用戶),其中192.168.2.241爲mon地址
mount -t ceph node1:6789:/ /data -o name=cephfs,secret=AQAHs9RdRVLkOBAAYl1JZqYupcHnORttIo+Udg==
或
echo "AQAHs9RdRVLkOBAAYl1JZqYupcHnORttIo+Udg==" > /etc/ceph/cephfskey mount -t ceph node1:6789:/ /data -o name=cephfs,secretfile=/etc/ceph/cephfskey
寫入數據測試(1G)
dd if=/dev/zero of=/data/file2 bs=1M count=1024
開機自動掛載
echo "node1:6789:/ /data/ ceph name=cephfs,secret=AQAHs9RdRVLkOBAAYl1JZqYupcHnORttIo+Udg==,_netdev,noatime 0 0" >> /etc/fstab
或
echo "node1:6789:/ /data/ ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0" >> /etc/fstab