Ubuntu CEPH快速安裝

1、CEPH簡介

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

 

  • 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 存儲集羣可以動態地伸縮、再均衡和修復。node

 

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

Ceph之因此能那麼火,與OpenStack有莫大的關係;OpenStack是目前比較流行的開源雲管理平臺;OpenStack與Ceph的集成已成爲開源雲平臺的標配。linux

 

Ceph中文文檔,請參考連接:算法

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

 

Ceph設計思想

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

     高可用性指的是系統某個組件失效後,系統依然能夠提供正常的服務的功能。能夠採用設備部件和數據冗餘來提升可靠性。在Ceph集羣中可經過數據多副本、糾刪碼這兩種方式提供數據冗餘。bash

   可線性擴展指的是能夠靈活的應對集羣伸縮。這裏能夠指兩方面:服務器

一、指集羣的存儲容量能夠伸縮、能夠任意添加、刪除存儲節點和存儲設備;網絡

二、指系統的性能隨集羣的擴充而線性增長。架構

 

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版本,也稱之爲候選版本!

 

2、環境準備

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

操做系統 主機名 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

 

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臺服務器,都須要執行的!

 

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

 

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同樣操做文件,就能夠了!

 

4、自動部署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基礎知識和基礎架構認識:
http://www.javashuo.com/article/p-tzqhamfq-em.html

 

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

http://www.javashuo.com/article/p-umzisvqf-kh.html

相關文章
相關標籤/搜索