Ubuntu CEPH快速安裝


一、CEPH簡介

不管你是想為雲平台提供Ceph 對象存儲和/或 Ceph 塊設備,還是想部署一個 Ceph 文件系統或者把 Ceph 作為他用,所有 Ceph 存儲集群的部署都始於部署一個個 Ceph 節點、網絡和 Ceph 存儲集群。 Ceph 存儲集群至少需要一個 Ceph Monitor 和兩個 OSD 守護進程。而運行 Ceph 文件系統客戶端時,則必須要有元數據服務器( Metadata Server )。

 

  • Ceph OSDsCeph OSD 守護進程( Ceph OSD )的功能是存儲數據,處理數據的復制、恢復、回填、再均衡,並通過檢查其他OSD 守護進程的心跳來向 Ceph Monitors 提供一些監控信息。當 Ceph 存儲集群設定為有2個副本時,至少需要2個 OSD 守護進程,集群才能達到 active+clean 狀態( Ceph 默認有3個副本,但你可以調整副本數)。
  • MonitorsCeph Monitor維護着展示集群狀態的各種圖表,包括監視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。 Ceph 保存着發生在Monitors 、 OSD 和 PG上的每一次狀態變更的歷史信息(稱為 epoch )。
  • MDSsCeph 元數據服務器( MDS )為 Ceph 文件系統存儲元數據(也就是說,Ceph 塊設備和 Ceph 對象存儲不使用MDS )。元數據服務器使得 POSIX 文件系統的用戶們,可以在不對 Ceph 存儲集群造成負擔的前提下,執行諸如 lsfind 等基本命令。

 

Ceph 把客戶端數據保存為存儲池內的對象。通過使用 CRUSH 算法, Ceph 可以計算出哪個歸置組(PG)應該持有指定的對象(Object),然后進一步計算出哪個 OSD 守護進程持有該歸置組。 CRUSH 算法使得 Ceph 存儲集群能夠動態地伸縮、再均衡和修復。

 

Ceph消除了對系統單一中心節點的依賴,從而實現可真正的無中心節點結果的設計思想,這種設計思想是其他分布式存儲系統所不能相比的。

Ceph之所以能那么火,與OpenStack有莫大的關系;OpenStack是目前比較流行的開源雲管理平台;OpenStack與Ceph的集成已成為開源雲平台的標配。

 

Ceph中文文檔,請參考鏈接:

http://docs.ceph.org.cn/start/intro/

 

Ceph設計思想

  • 每個組件可線性擴展
  • 無任何單點故障
  • 解決方案必須是基於軟件的、開源的、適應性強的
  • 運行在現有商業硬件之上,商業硬件一般是指x86服務器
  • 每個組件必須盡可能擁有自我管理和自我修復功能

     高可用性指的是系統某個組件失效后,系統依然可以提供正常的服務的功能。可以采用設備部件和數據冗余來提高可靠性。在Ceph集群中可通過數據多副本、糾刪碼這兩種方式提供數據冗余。

   可線性擴展指的是可以靈活的應對集群伸縮。這里可以指兩方面:

1、指集群的存儲容量可以伸縮、可以任意添加、刪除存儲節點和存儲設備;

2、指系統的性能隨集群的擴充而線性增加。

 

Ceph應用場景

Ceph可以提供對象存儲、塊設備存儲和文件系統存儲,其對象存儲可以對接網盤應用業務;其塊設備可以對接IaaS雲平台軟件。IaaS雲平台軟件包括:OpenStack、CloudStack、Zstack等;其文件系統存儲目前還未成熟,官方不建議在生產環境中使用。

 

Ceph發行版本

Ceph正處於持續開發、快速發展中。debian系列,發行了9個版本。分別是firefly,giant,hammer,infernalis,jewel,kraken,luminous,mimic,testing。

訪問下載網站:

http://download.ceph.com/

就可以到對應的版本中,下載你需要的軟件包。

本文所使用的是jewel版本,也稱之為候選版本!

 

二、環境准備

本文所用的環境和具體節點配置如下:

操作系統 主機名 IP地址 功能 ceph版本
ubuntu-16.04.5-server-amd64 jqb-node128 192.168.91.128 MDS,MON,OSDS 10.2.10
ubuntu-16.04.5-server-amd64 jqb-node129 192.168.91.129 MON,OSDS 10.2.10
ubuntu-16.04.5-server-amd64 jqb-node131 192.168.91.131 MON,OSDS 10.2.10

 

 

 

 

 

由於官方要求:至少需要一個 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

 

ceph更新源

添加 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
View Code

請保證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台服務器,都需要執行的!

 請確保版本為10.2.10,否則下面的步驟可能會不成功!!!

 

三、主節點操作

以下操作都是在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

 

ssh免密登錄

生成秘鑰,並寫入到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免密登錄

ssh jqb-node128
exit

ssh jqb-node129
exit

ssh jqb-node131
exit

 

請確保以上3個命令,不需要輸入密碼

 

創建配置文件目錄

cd /opt
mkdir -p cephinstall
cd cephinstall

 

安裝ceph節點

先定義幾個常量

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錯誤!

 

增加 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

 

激活 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

 

部署管理密鑰到所有關聯節點

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

通常在創建pool之前,需要覆蓋默認的pg_num,官方推薦:

  • 若少於5個OSD, 設置pg_num為128。
  • 5~10個OSD,設置pg_num為512。
  • 10~50個OSD,設置pg_num為4096。
  • 超過50個OSD,可以參考pgcalc計算。

 

ssh $MDS ceph osd pool create fs_db_data 512 
ssh $MDS ceph osd pool create fs_db_metadata 512

 

查看pool

ceph osd lspools

 

創建Cephfs

ssh $MDS ceph fs new cephfs fs_db_metadata fs_db_data

查看Cephfs

ssh $MDS ceph fs ls

 

部署MDS

ceph-deploy --overwrite-conf mds create $MDS

 

掛載ceph

# 掛載需要的驗證秘鑰
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一樣操作文件,就可以了!

 

四、自動部署ceph腳本

ceph_install.sh

#/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
View Code

 

注意:執行之前,請仔細查看前置環境是否符合

 

執行之后,查看日志文件/opt/ceph_install.log輸出:

設置ubuntu更新源
設置時區以及安裝軟件
生成ssh秘鑰
ssh免密登錄
遠程節點環境設置以及軟件安裝
設置ubuntu更新源
設置時區以及安裝軟件
生成ssh秘鑰
ssh免密登錄
遠程節點環境設置以及軟件安裝
創建管理目錄
過定義監控節點,創建一個新集群
修改配置文件
安裝 Ceph 到所有節點
部署監控節點
增加 OSD 到集群
激活 OSD節點
部署管理密鑰到所有關聯節點
查看驗證秘鑰
創建POOL
創建Cephfs
部署MDS
掛載需要的驗證秘鑰
開始掛載
掛載完成
View Code

 

 

以下文章,有興趣的,可以看一下!

 

如何在 Ubuntu 16.04 中安裝 Ceph 存儲集群:
https://linux.cn/article-8182-1.html

 

Ceph基礎知識和基礎架構認識:
https://www.cnblogs.com/luohaixian/p/8087591.html

 

史上最全的Ceph介紹、原理、架構:

https://blog.csdn.net/uxiAD7442KMy1X86DtM3/article/details/81059215


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM