無論你是想爲雲平臺提供Ceph 對象存儲和/或 Ceph 塊設備,仍是想部署一個 Ceph 文件系統或者把 Ceph 做爲他用,全部 Ceph 存儲集羣的部署都始於部署一個個 Ceph 節點、網絡和 Ceph 存儲集羣。 Ceph 存儲集羣至少須要一個 Ceph Monitor 和兩個 OSD 守護進程。而運行 Ceph 文件系統客戶端時,則必需要有元數據服務器( Metadata Server )。html
Ceph 把客戶端數據保存爲存儲池內的對象。經過使用 CRUSH 算法, Ceph 能夠計算出哪一個歸置組(PG)應該持有指定的對象(Object),而後進一步計算出哪一個 OSD 守護進程持有該歸置組。 CRUSH 算法使得 Ceph 存儲集羣可以動態地伸縮、再均衡和修復。node
Ceph消除了對系統單一中心節點的依賴,從而實現可真正的無中心節點結果的設計思想,這種設計思想是其餘分佈式存儲系統所不能相比的。python
Ceph之因此能那麼火,與OpenStack有莫大的關係;OpenStack是目前比較流行的開源雲管理平臺;OpenStack與Ceph的集成已成爲開源雲平臺的標配。linux
Ceph中文文檔,請參考連接:算法
http://docs.ceph.org.cn/start/intro/ubuntu
高可用性指的是系統某個組件失效後,系統依然能夠提供正常的服務的功能。能夠採用設備部件和數據冗餘來提升可靠性。在Ceph集羣中可經過數據多副本、糾刪碼這兩種方式提供數據冗餘。bash
可線性擴展指的是能夠靈活的應對集羣伸縮。這裏能夠指兩方面:服務器
一、指集羣的存儲容量能夠伸縮、能夠任意添加、刪除存儲節點和存儲設備;網絡
二、指系統的性能隨集羣的擴充而線性增長。架構
Ceph能夠提供對象存儲、塊設備存儲和文件系統存儲,其對象存儲能夠對接網盤應用業務;其塊設備能夠對接IaaS雲平臺軟件。IaaS雲平臺軟件包括:OpenStack、CloudStack、Zstack等;其文件系統存儲目前還未成熟,官方不建議在生產環境中使用。
Ceph正處於持續開發、快速發展中。debian系列,發行了9個版本。分別是firefly,giant,hammer,infernalis,jewel,kraken,luminous,mimic,testing。
訪問下載網站:
就能夠到對應的版本中,下載你須要的軟件包。
本文所使用的是jewel版本,也稱之爲候選版本!
本文所用的環境和具體節點配置以下:
操做系統 | 主機名 | IP地址 | 功能 |
ubuntu-16.04.5-server-amd64 | jqb-node128 | 192.168.91.128 | MDS,MON,OSDS |
ubuntu-16.04.5-server-amd64 | jqb-node129 | 192.168.91.129 | MON,OSDS |
ubuntu-16.04.5-server-amd64 | jqb-node131 | 192.168.91.131 | MON,OSDS |
因爲官方要求:至少須要一個 Ceph Monitor 和兩個 OSD 守護進程。
因此使用了3臺服務器來安裝ceph集羣。
注意mds只有一臺
注意:3臺Ubuntu系統,須要啓動root帳戶登陸。
接下來的操做,都是以root用戶執行的!
這個很是重要,決定ceph搭建成敗就在這裏,務必注意!!!
我踩了不少坑,說多了都是淚...!下面說具體操做!
登陸3臺服務器,查看主機名
cat /etc/hostname
若是輸出不是上面表格中的主機名,請務必修改!
修改完成以後,必需要重啓服務器才行!
因爲這裏並無使用私有的DNS,因此直接用hosts文件來強制解析。
務必保證3臺服務器的hosts文件有以下3條記錄
192.168.91.128 jqb-node128 192.168.91.129 jqb-node129 192.168.91.131 jqb-node131
因爲默認的更新源太慢了,調整爲阿里雲的更新源
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse
添加 release key
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
添加Ceph軟件包源,用Ceph穩定版(如 cuttlefish 、 dumpling 、 emperor 、 firefly 等等)替換掉 {ceph-stable-release}
deb http://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main
ceph-stable-release 我選擇的是jewel版本
那麼在ubuntu服務器上面執行命令
echo "deb http://download.ceph.com/debian-jewel/ $(lsb_release -sc) main"
就能夠獲得結果:
deb http://download.ceph.com/debian-jewel/ xenial main
將這條信息寫入/etc/apt/sources.list中,那麼文件sources.list完整內容以下:
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse deb http://download.ceph.com/debian-jewel/ xenial main
請保證3臺服務器的/etc/apt/sources.list是一致的
更新系統更新源,3臺服務器執行如下命令
apt-get clean
apt-get update
務必保證3臺服務器的時區是同樣的,強制更改時區爲上海,執行如下命令
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime bash -c "echo 'Asia/Shanghai' > /etc/timezone"
安裝ntpdate
apt-get install -y ntpdate
使用阿里雲的時間服務器更新
ntpdate ntp1.aliyun.com
3臺服務器都執行一下,確保時間一致!
Ceph 經過radosgw提供RESTFul HTTP API接口支持對象存儲能力,radosgw本質上是一個客戶端程序,提供FastCGI 服務
apt-get install -y radosgw --allow-unauthenticated
配置apt容許以 HTTPS方式拉取鏡像安裝
apt-get install -y apt-transport-https --allow-unauthenticated
安裝ceph相關包
apt-get install -y ceph-base ceph-common ceph-fs-common ceph-fuse ceph-mds ceph-mon ceph-osd --allow-unauthenticated
以上,都是3臺服務器,都須要執行的!
如下操做都是在jqb-node128進行的,登陸到jqb-node128服務器
安裝 ceph-deploy
apt-get install -y ceph-deploy --allow-unauthenticated
修改https爲http
sed -i -e "28s/https/http/g" /usr/lib/python2.7/dist-packages/ceph_deploy/hosts/debian/install.py
生成祕鑰,並寫入到authorized_keys
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
節點之間的用戶認證,是採用ssh方式的。務必要設置ssh免密登陸!
執行如下3個命令
ssh-copy-id jqb-node128 ssh-copy-id jqb-node129 ssh-copy-id jqb-node131
它會在遠程主機寫入文件 ~/.ssh/authorized_keys
ssh jqb-node128 exit ssh jqb-node129 exit ssh jqb-node131 exit
請確保以上3個命令,不須要輸入密碼
建立配置文件目錄
cd /opt mkdir -p cephinstall cd cephinstall
先定義幾個常量
MDS="jqb-node128" MON="jqb-node128 jqb-node129 jqb-node131" OSDS="jqb-node128 jqb-node129 jqb-node131" INST="$OSDS $MON"
INST表示要安裝的節點
用 ceph-deploy 命令經過定義監控節點 ,建立一個新集羣。
ceph-deploy new $MON
執行以後,它會在當前目錄生成文件ceph.conf
修改配置文件ceph.conf
echo "osd pool default size = 2 osd max object name len = 256 osd max object namespace len = 64 mon_pg_warn_max_per_osd = 2000 mon clock drift allowed = 30 mon clock drift warn backoff = 30 rbd cache writethrough until flush = false" >> ceph.conf
安裝 Ceph 到全部節點
ceph-deploy install $INST
部署監控節點
ceph-deploy mon create-initial
仔細觀察輸出內容,請確保沒有error錯誤!
這裏將/data/ceph/osd目錄,用來存儲數據
for i in $OSDS; do echo $i ssh $i 'mkdir -p /data/ceph/osd' ssh $i 'ln -snf /data/ceph/osd /var/lib/ceph/osd' ceph-deploy osd prepare $i:/data/ceph/osd # success indicator: Host xxx is now ready for osd use done
for i in $OSDS; do echo $i ssh $i 'chown -R ceph:ceph /var/lib/ceph/' ssh $i 'chown -R ceph:ceph /data/ceph/' ceph-deploy osd activate $i:/data/ceph/osd #fix problem "socket /com/ubuntu/upstart: Connection refused" ssh $i 'dpkg-divert --local --rename --add /sbin/initctl' ssh $i 'ln -snf /bin/true /sbin/initctl' ssh $i 'rm -f /etc/apt/sources.list.d/ceph.list' ssh $i 'modprobe ceph' done
部署管理密鑰到全部關聯節點
ceph-deploy admin $MDS
查看節點信息
ssh $MDS "ceph osd tree"
查看驗證祕鑰
ssh $MDS "ceph auth get-key client.admin | base64" ssh $MDS "mkdir -p /var/lib/ceph/mds/ceph-$MDS" ssh $MDS "chown -R ceph:ceph /var/lib/ceph"
一般在建立pool以前,須要覆蓋默認的pg_num
,官方推薦:
ssh $MDS ceph osd pool create fs_db_data 512 ssh $MDS ceph osd pool create fs_db_metadata 512
查看pool
ceph osd lspools
ssh $MDS ceph fs new cephfs fs_db_metadata fs_db_data
查看Cephfs
ssh $MDS ceph fs ls
ceph-deploy --overwrite-conf mds create $MDS
# 掛載須要的驗證祕鑰 MOUNTKEY=`ssh $MDS "ceph auth get-key client.admin"` # 節點ip MONIP=`ssh $MDS cat /etc/ceph/ceph.conf |grep mon_host|cut -d "=" -f2|sed 's?,?:6789,?g'` # 掛載目錄 mkdir /mycephfs # 開始掛載 mount -t ceph $MONIP:6789:/ /mycephfs -o name=admin,secret=$MOUNTKEY
查看掛載狀況
root@jqb-node128:~/cephinstall# df -hT Filesystem Type Size Used Avail Use% Mounted on udev devtmpfs 971M 0 971M 0% /dev tmpfs tmpfs 199M 5.8M 193M 3% /run /dev/sda1 ext4 19G 7.5G 11G 43% / tmpfs tmpfs 992M 0 992M 0% /dev/shm tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs tmpfs 199M 0 199M 0% /run/user/0 192.168.91.128:6789,192.168.91.129:6789,192.168.91.131:6789:/ ceph 56G 26G 31G 46% /mycephfs
注意:掛載的命令很是長,它須要全部節點的ip和端口號
若是須要往ceph中,增長文件。只須要進入/mycephfs目錄,像linux同樣操做文件,就能夠了!
#/bin/bash #前提環境 # 系統必須爲ubuntu-16.04.5-server-amd64,至少有3個節點 # 務必保證每臺主機的hostname和下面的變量設置一致 # 保證主機相互之間能用域名訪問 # 保證每臺主機開啓了root登陸 # 務必使用root用戶運行此腳本 # 請參考連接:https://www.cnblogs.com/xiao987334176/articles/9909039.html set -e ##注意mds和admin只有一臺,請設置好MDS的值 ################################################################ MDS="jqb-node128" MON="jqb-node128 jqb-node129 jqb-node131" OSDS="jqb-node128 jqb-node129 jqb-node131" INST="$OSDS $MON" ################################################################ echo "設置ubuntu更新源" >> /opt/ceph_install.log # 設置ubuntu更新源 echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse deb http://download.ceph.com/debian-jewel/ xenial main" > /etc/apt/sources.list echo "設置時區以及安裝軟件" >> /opt/ceph_install.log # 設置時區以及安裝軟件 ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime bash -c "echo 'Asia/Shanghai' > /etc/timezone" apt-get clean apt-get update apt-get install -y ceph-deploy --allow-unauthenticated sed -i -e "28s/https/http/g" /usr/lib/python2.7/dist-packages/ceph_deploy/hosts/debian/install.py echo "生成ssh祕鑰" >> /opt/ceph_install.log # 生成ssh祕鑰 if [ ! -f ~/.ssh/id_rsa ];then ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys fi echo "ssh免密登陸" >> /opt/ceph_install.log # ssh免密登陸 for i in $INST; do echo $i ssh-copy-id $i done echo "遠程節點環境設置以及軟件安裝" >> /opt/ceph_install.log # 遠程節點環境設置以及軟件安裝 for i in $INST; do # 更新源 ssh $i "echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted deb http://mirrors.aliyun.com/ubuntu xenial-security universe deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse deb http://download.ceph.com/debian-jewel/ xenial main' > /etc/apt/sources.list" # 時區設置 ssh $i ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ssh $i "echo 'Asia/Shanghai' > /etc/timezone" ssh $i apt-get update ssh $i apt-get install -y ntpdate ssh $i /etc/init.d/ntp stop ssh $i ntpdate ntp1.aliyun.com # 更新時間 # ceph相關軟件安裝 ssh $i apt-get install -y apt-transport-https --allow-unauthenticated ssh $i apt-get install -y radosgw --allow-unauthenticated ssh $i apt-get install -y "ceph-base ceph-common ceph-fs-common ceph-fuse ceph-mds ceph-mon ceph-osd" --allow-unauthenticated done echo "建立管理目錄" >> /opt/ceph_install.log # 建立管理目錄 mkdir -p /opt/cephinstall cd /opt/cephinstall echo "過定義監控節點,建立一個新集羣" >> /opt/ceph_install.log # 過定義監控節點,建立一個新集羣 ceph-deploy new $MON echo "修改配置文件" >> /opt/ceph_install.log # 修改配置文件 echo "osd pool default size = 2 osd max object name len = 256 osd max object namespace len = 64 mon_pg_warn_max_per_osd = 2000 mon clock drift allowed = 30 mon clock drift warn backoff = 30 rbd cache writethrough until flush = false" >> ceph.conf echo "安裝 Ceph 到全部節點" >> /opt/ceph_install.log # 安裝 Ceph 到全部節點 ceph-deploy install $INST echo "部署監控節點" >> /opt/ceph_install.log # 部署監控節點 ceph-deploy mon create-initial echo "增長 OSD 到集羣" >> /opt/ceph_install.log # 增長 OSD 到集羣 # 這裏將/data/ceph/osd目錄,用來存儲數據 for i in $OSDS; do echo $i ssh $i 'mkdir -p /data/ceph/osd' ssh $i 'ln -snf /data/ceph/osd /var/lib/ceph/osd' ceph-deploy osd prepare $i:/data/ceph/osd # success indicator: Host xxx is now ready for osd use done echo "激活 OSD節點" >> /opt/ceph_install.log # 激活 OSD節點 for i in $OSDS; do echo $i ssh $i 'chown -R ceph:ceph /var/lib/ceph/' ssh $i 'chown -R ceph:ceph /data/ceph/' ceph-deploy osd activate $i:/data/ceph/osd #fix problem "socket /com/ubuntu/upstart: Connection refused" ssh $i 'dpkg-divert --local --rename --add /sbin/initctl' ssh $i 'ln -snf /bin/true /sbin/initctl' ssh $i 'rm -f /etc/apt/sources.list.d/ceph.list' ssh $i 'modprobe ceph' done echo "部署管理密鑰到全部關聯節點" >> /opt/ceph_install.log # 部署管理密鑰到全部關聯節點 ceph-deploy admin $MDS # 查看節點信息 ssh $MDS "ceph osd tree" echo "查看驗證祕鑰" >> /opt/ceph_install.log # 查看驗證祕鑰 ssh $MDS "ceph auth get-key client.admin | base64" ssh $MDS "mkdir -p /var/lib/ceph/mds/ceph-$MDS" ssh $MDS "chown -R ceph:ceph /var/lib/ceph" echo "建立POOL" >> /opt/ceph_install.log # 建立POOL ssh $MDS ceph osd pool create fs_db_data 512 ssh $MDS ceph osd pool create fs_db_metadata 512 # 查看pool ssh $MDS ceph osd lspools echo "建立Cephfs" >> /opt/ceph_install.log # 建立Cephfs ssh $MDS ceph fs new cephfs fs_db_metadata fs_db_data # 查看pool ssh $MDS ceph fs ls echo "部署MDS" >> /opt/ceph_install.log # 部署MDS ceph-deploy --overwrite-conf mds create $MDS echo "掛載須要的驗證祕鑰" >> /opt/ceph_install.log # 掛載須要的驗證祕鑰 MOUNTKEY=`ssh $MDS "ceph auth get-key client.admin"` # 節點ip MONIP=`ssh $MDS cat /etc/ceph/ceph.conf |grep mon_host|cut -d "=" -f2|sed 's?,?:6789,?g'` # 掛載目錄 mkdir /mycephfs echo "開始掛載" >> /opt/ceph_install.log # 開始掛載 mount -t ceph $MONIP:6789:/ /mycephfs -o name=admin,secret=$MOUNTKEY # 查看磁盤掛載 df -hT echo "掛載完成" >> /opt/ceph_install.log
注意:執行以前,請仔細查看前置環境是否符合
執行以後,查看日誌文件/opt/ceph_install.log輸出:
設置ubuntu更新源
設置時區以及安裝軟件
生成ssh祕鑰
ssh免密登陸
遠程節點環境設置以及軟件安裝
設置ubuntu更新源
設置時區以及安裝軟件
生成ssh祕鑰
ssh免密登陸
遠程節點環境設置以及軟件安裝
建立管理目錄
過定義監控節點,建立一個新集羣
修改配置文件
安裝 Ceph 到全部節點
部署監控節點
增長 OSD 到集羣
激活 OSD節點
部署管理密鑰到全部關聯節點
查看驗證祕鑰
建立POOL
建立Cephfs
部署MDS
掛載須要的驗證祕鑰
開始掛載
掛載完成
如下文章,有興趣的,能夠看一下!
如何在 Ubuntu 16.04 中安裝 Ceph 存儲集羣:
https://linux.cn/article-8182-1.html
Ceph基礎知識和基礎架構認識:
http://www.javashuo.com/article/p-tzqhamfq-em.html
史上最全的Ceph介紹、原理、架構: