Ceph 存儲集群 - 搭建存儲集群


一、Ceph分布式存儲

1.1、Ceph文件系統簡述

Ceph是一個統一的分布式存儲系統,設計初衷是提供較好的性能、可靠性和可擴展性。

Ceph項目最早起源於Sage就讀博士期間的工作(最早的成果於2004年發表),並隨后貢獻給開源社區。在經過了數年的發展之后,目前已得到眾多雲計算廠商的支持並被廣泛應用。RedHat及OpenStack都可與Ceph整合以支持虛擬機鏡像的后端存儲。

中文學習網:http://docs.ceph.org.cn/

1.2、Ceph的優點

高性能
a. 摒棄了傳統的集中式存儲元數據尋址的方案,采用CRUSH算法,數據分布均衡,並行度高。
b.考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。
c. 能夠支持上千個存儲節點的規模,支持TB到PB級的數據。
高可用性
a. 副本數可以靈活控制。
b. 支持故障域分隔,數據強一致性。
c. 多種故障場景自動進行修復自愈。
d. 沒有單點故障,自動管理。
高可擴展性
a. 去中心化。
b. 擴展靈活。
c. 隨着節點增加而線性增長。
特性豐富
a. 支持三種存儲接口:塊存儲、文件存儲、對象存儲。
b. 支持自定義接口,支持多種語言驅動
 

二、Ceph架構和名稱解釋

2.1、Ceph架構

 

 

2.2、Ceph核心組件及概念介紹

  • Monitor

一個Ceph集群需要多個Monitor組成的小集群,它們通過Paxos同步數據,用來保存OSD的元數據。

  • OSD

OSD全稱Object Storage Device,也就是負責響應客戶端請求返回具體數據的進程。一個Ceph集群一般都有很多個OSD。

  • MDS

MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數據服務。

  • Object

Ceph最底層的存儲單元是Object對象,每個Object包含元數據和原始數據。

  • PG

PG全稱Placement Grouops,是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層其實是為了更好的分配數據和定位數據。

  • RADOS

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兼容。

  • CephFS

CephFS全稱Ceph File System,是Ceph對外提供的文件系統服務。

三、Ceph的存儲過程

CEPH集群在存儲數據時,都是進行扁平化處理,Object作為集群最小的存儲單位。

 

 

ceph在對象存儲的基礎上提供了更加高級的思想。當對象數量達到了百萬級以上,原生的對象存儲在索引對象時消耗的性能非常大。ceph因此引入了placement group (pg) 的概念。一個PG就是一組對象的集合。

 

 

3.1、Ceph IO流程及數據分布

 

 

3.2、正常IO流程圖

 

 

步驟:

client 創建cluster handler。
client 讀取配置文件。
client 連接上monitor,獲取集群map信息。
client 讀寫io 根據crushmap 算法請求對應的主osd數據節點。
主osd數據節點同時寫入另外兩個副本節點數據。
等待主節點以及另外兩個副本節點寫完數據狀態。
主節點及副本節點寫入狀態都成功后,返回給client,io寫入完成。

四、Ceph搭建過程

我准備了三台centos7虛擬機,ip如下

 

 

4.1、准備工作

      1、機器名稱的修改(三台服務器上都執行),給192.168.32.140取別名ghy1,給192.168.32.141取別名ghy2,給192.168.32.142取別名ghy3

      命令如果下:

hostnamectl set-hostname ghy1

 

 

 

 

 

 

2、修改三台服務器的配置名字解析IP,命令如下(分別在三台服務器上執行)

vi /etc/hosts

執行上面命令后添加如下映射:

192.168.32.140 ghy1
192.168.32.141 ghy2 
192.168.32.142 ghy3

 

 

三個服務器配置完成后保存文件並執行reboot命令重啟三台服務器,重啟完成后可以發現機器名稱已經換成我們自己定義的了

 

 

3、yum源的修改,要在三台服務器都進行修改,因為命令都一樣,我就以一台服務器為例,這里采用的是清華鏡像源,提升加載速度。

命令如果下:

vi /etc/yum.repos.d/ceph.repo

執行完這個命令后添加如下內容

[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
# 清華源
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

4、ceph與ceph-deploy安裝(因為我把140做主服務器,所以這命令在140服務器上執行就行)

更新yum源,並安裝 ceph ceph-deploy ,這個過程非常耗時間,執行如下命令:

yum update && yum -y install ceph ceph-deploy

注意: yum update yum -y install python2-pip 最好在每台機器都更新下yum。

安裝過程中, 如果執行ceph-deploy出現 ImportError: No module named pkg_resources ,則需要安裝python2-pip,執行 yum -y install python2-pip 安裝即可。我在第一次嘗試安裝時就是因為沒有安裝python2搞的我搞了好久。

如果遇到如下錯誤,安裝下epel即可。

 

 

操作命令:(最好先執行該命令) 

yum install epel-release -y 
yum install lttng-ust -y

安裝完了epel記得再次執行yum update && yum -y install ceph ceph-deploy命令

5、NTP時間同步工具(140執行)為了保證時間同步,我們需要安裝NTP時間同步工具:

yum install ntp ntpdate ntp-doc -y

 

 

設為開機啟動:

systemctl enable ntpd

 

 

設置每隔1小時自動校准同步。編輯 vi /etc/rc.d/rc.local 追加:執行命令

vi /etc/rc.d/rc.local

打開文本追加如下一句話

/usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w

 

 

配置定時任務, 執行crontab -e命令 ,命令如下

 

 打開文本后追加如下一段話

0 */1 * * * ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w

如果出現紅框內容表示成功

 

 6、免密配置(在三台服務器上都執行),因為命令都一樣,我以一台服務器為例

官方建議不用系統內置用戶, 創建名為cuser用戶, 密碼也設為cuser:

命令如下

useradd -d /home/cuser -m cuser 
passwd cuser

 

 

設置sudo權限:(免密+只讀權限) 

echo "cuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cuser

再執行如下命令查看是否添加成功

cat /etc/sudoers.d/cuser

 

 

執行如下命令添加只讀權限

sudo chmod 0440 /etc/sudoers.d/cuser

添加完成后用如下命令查看是否添加成功,rr表示只讀

ll /etc/sudoers.d/cuser

 

 

7、生成秘鑰(在140服務器上執行)

執行如下命令切換到cuser用戶上

su cuser

執行如下命令生成RSA密鑰,一直按默認就可以了

ssh-keygen

 

 

分發密鑰至各機器節點

ssh-copy-id cuser@ghy1 
ssh-copy-id cuser@ghy2 
ssh-copy-id cuser@ghy3

 

 接下來修改管理節點上的 ~/.ssh/config (當前用戶目錄下的.ssh/config)文件, 簡化SSH遠程連接時的輸入信息:管理節點是會有root和cuser多個用戶, ssh遠程連接默認會以當前用戶身份進行登陸, 如果我們是root 身份進行遠程連接, 還是需要輸入密碼,我們可以修改配置 使用root遠程連接時也不用輸入密碼。執行下面切換root身份

 

su root

但我多次嘗試都無法通過上面命令切回root帳戶,沒辦法,我是重新再啟動一個連接進入root帳戶的,如果有朋友碰到和我一樣情況解決了可以留言跟我說下怎么解決的。進入root帳戶后用如下命令編輯config

vi ~/.ssh/config

添加如下內容

Host ghy1
   Hostname ghy1 
   User cuser
Host ghy2
   Hostname ghy2 
   User cuser 
Host ghy3 
   Hostname ghy3 
   User cuser

如果保存中報".ssh/config" E212: Can't open file for writing;那么進入他的根目錄,用命令

cd ~

然后用如下命令創建創建目錄

 

 

mkdir .ssh 

 

接着用如下命令進入目錄

cd .ssh

再入如下命令編輯文件

vi config

 

 文件編輯完成后記得保存。接着修改文件權限

chmod 600 ~/.ssh/config

用如下命令查看有什么權限rw表示只有讀寫權限

ll ~/.ssh/config

 

 到了這一步后,接下來就是要禁用SELINUX了,執行下面命令進行禁用

vi /etc/selinux/config

打開文件后在最后一行添加

SELINUX=disabled

 

 

4.2、集群搭建(全部在140服務器上執行)

安裝集群,用root安裝,可以避免很多權限問題。mkdir ljx創建一個目錄,然后cd ljx進入這個目錄

 

 

1.創建集群管理目錄,作為ceph配置信息存儲目錄。-p是表示創建多級目錄命令如果下

 

mkdir -p /usr/local/ljx/cephcluster 

 

然后進入目錄

cd /usr/local/ljx/cephcluster

 

 

2.創建集群

ceph-deploy new ghy1 ghy2 ghy3

 

 

創建成功后, 會生配置文件和秘鑰信息。用ls命令查看

 

 3.修改配置文件

編輯ceph.conf文件 ,用如下命令進行編輯

vi ceph.conf 

打開文件后配置如下內容,網段根據自身情況配置

#對外開放網段 
public network = 192.168.32.0/24 
# 設置pool池默認分配數量 
osd pool default size = 2 
# 容忍更多的時鍾誤差 
mon clock drift allowed = 2 
mon clock drift warn backoff = 30 
# 允許刪除pool 
mon_allow_pool_delete = true 
[mgr] 
# 開啟WEB儀表盤 
mgr modules = dashboard

 

 

注意:Pool是存儲對象的邏輯分區,它規定了數據冗余的類型和對應的副本分布策略。

文件修改后執行安裝,在140上進行安裝,執行如下命令后三台服務器都會執行安裝程序,命令如下

ceph-deploy install ghy1 ghy2 ghy3

 

 安裝完成后頁面如下:

 

 

4.初始化Monitor信息,命令如下

ceph-deploy mon create-initial

 

 

執行成功后頁面如下,下面頁面生成了很多秘鑰文件

5、同步管理信息

ceph-deploy admin ghy1 ghy2 ghy3 

6、安裝mgr(管理守護進程)

ceph-deploy mgr create ghy1 ghy2 ghy3

7、安裝rgw

ceph-deploy rgw create ghy1 ghy2 ghy3

接着執行下面命令安裝mds服務

ceph-deploy mds create ghy1 ghy2 ghy3

如果到現在都沒報錯說明你快成功了,我反正在這些坑中呆了快一個星期了,能記住的錯也都在這里面寫下來了,如果在配置過程任意一個環節安裝失敗了,需要卸載重裝:

ceph-deploy purge ghy1 ghy2 ghy3 
ceph-deploy purgedata ghy1 ghy2 ghy3 
ceph-deploy forgetkeys

同時將三台節點的mon信息也刪除:

rm -rf /var/run/ceph/ 

如果出現錯誤:

ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version

可以在各節點上單獨進行安裝:

yum -y install ceph

8、OSD安裝

OSD服務是對象存儲守護進程, 負責把對象存儲到本地文件系統, 必須要有一塊獨立的磁盤作為存儲。如果沒有獨立磁盤,怎么辦? 可以在Linux下面創建一個虛擬磁盤進行掛載。

 

添加磁盤:

 

執行 fdisk -l 查看磁盤信息如下,我們需要添加一個磁盤

 

 因為我用的是virtualBox,所以我下面截圖就是在virtualBox上怎么添加硬盤,這個操作要在三台服務上都執行。

a.虛擬機關機,打開設置>存儲

 

 

 

 

 

 

 

 

 

 

 這樣就創建完成了。記得保存並且三台服務器上都執行。說多了都是淚。一直點擊下一步,設置磁盤空間大小為10G即可。操作完后重啟虛擬機,並輸入 fdisk -l 查看磁盤信息

如下,明顯多了 /dev/sdb 10G大小。

 

 

執行創建OSD命令:(注意,每條命令都是在140中執行,不要在每台機器中單獨執行)要在cephcluster文件夾中執行

 

ceph-deploy osd create --data /dev/sdb ghy1 
ceph-deploy osd create --data /dev/sdb ghy2 
ceph-deploy osd create --data /dev/sdb ghy3

 

 

 

Monitor查看 /usr/bin 下執行 ./ceph -s 可以查看集群狀態。 也可以在cephcluster中執行ceph -s查看

 

 

執行如下命令同步各個節點的時間(下面這個命令要在三個節點都執行)

ntpdate ntp1.aliyun.com

如果報以下錯執行命令yum -y install ntpdate就可以解決了

 

 

 

 

 4.3、dashboard安裝 (可視化管理頁面)

Ceph 提供了原生的Dashboard功能,通過Dashboard可以獲取Ceph集群的各種基本狀態信息。接下來安裝一下Dashboard,並使用它的功能。

1.開啟dashboard模塊,在140服務器上執行

ceph mgr module enable dashboard

2、生成簽名,在140服務器上執行

ceph dashboard create-self-signed-cert

3、創建目錄,在140服務器上執行

mkdir -p /usr/local/ljx/cephcluster/mgr-dashboard

4、生成密鑰對,在140服務器上執行

openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca 

 

 

5、啟動dashboard ,在140服務器上執行

ceph mgr module disable dashboard 
ceph mgr module enable dashboard

6、設置IP與PORT,在140服務器上執行

ceph config set mgr mgr/dashboard/server_addr 192.168.32.140
ceph config set mgr mgr/dashboard/server_port 8843

7、關閉HTTPS ,在140服務器上執行

ceph config set mgr mgr/dashboard/ssl false

8、查看服務信息,在140服務器上執行

ceph mgr services

9、設置管理員賬號密碼,在140服務器上執行

 

ceph dashboard set-login-credentials admin admin

 

 

 

10、訪問 <https://192.168.32.140:8443/#/dashboard>

 

 

11、RGW訪問

 

訪問 http://192.168.32.140:7480/ 效果如下:

 

 

4.3 Cephfs管理

集群創建完后, 默認沒有文件系統, 我們創建一個Cephfs可以支持對外訪問的文件系統。搭建完成后就能進行文件管理和文件下載操作了

1、創建兩個存儲池, 執行兩條命令: (在140上)

 

ceph osd pool create cephfs_data 128 
ceph osd pool create cephfs_metadata 64

 

少於5個OSD可把pg_num設置為128

OSD數量在5到10,可以設置pg_num為512

OSD數量在10到50,可以設置pg_num為4096

OSD數量大於50,需要計算pg_num的值

通過下面命令可以列出當前創建的存儲池:

ceph osd lspools

 

 

2、創建fs, 名稱為fs_test:(在140上,名稱可以隨便取)

ceph fs new fs_test cephfs_metadata cephfs_data

3、狀態查看, 以下信息代表正常(在140上)

 

ceph fs ls

 

 

 

ceph mds stat

 

 

4、fuse掛載(在140上)

 

先確定ceph-fuse命令能執行, 如果沒有, 則安裝:

 

yum -y install ceph-fuse 

 

創建掛載目錄

mkdir -p /usr/local/ljx/cephfs_directory

掛載cephfs

ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 192.168.32.140:6789 /usr/local/ljx/cephfs_directory 

 

 

5、掛載信息查看

 

 


免責聲明!

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



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