ceph基礎及部署


一、ceph基礎

       1.1 ceph 簡介

Ceph 是一個開源的分布式存儲系統,同時支持對象存儲、塊設備、文件系統.

ceph 是一個對象(object)式存儲系統,它把每一個待管理的數據流(文件等數據)切分為一到多個固定大小(默認 4 兆)的對象數據,並以其為原子單元(原子是構成元素的最小單元)完成數據的讀寫。

對象數據的底層存儲服務是由多個存儲主機(host)組成的存儲集群,該集群也被稱之為RADOS(reliable automatic distributed object store)存儲集群,即可靠的、自動化的、分布式的對象存儲系統。

librados 是 RADOS 存儲集群的 API,支持 C/C++/JAVA/python/ruby/php/go等編程語言客戶端。

                

 

1.2 ceph 設計思想

   Ceph 的設計旨在實現以下目標: 每一組件皆可擴展

無單點故障

基於軟件(而非專用設備)並且開源(無供應商鎖定) 在現有的廉價硬件上運行

盡可能自動管理,減少用戶干預

 1.3 ceph 集群角色定義

        https://docs.ceph.com/en/latest/start/intro/

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

一個 ceph 集群的組成部分:

若干的 Ceph OSD(對象存儲守護程序)

至少需要一個 Ceph Monitors 監視器(1,3,5,7...)

兩個或以上的 Ceph 管理器 managers,運行 Ceph 文件系統客戶端時還需要高可用的 Ceph Metadata Server(文件系統元數據服務器)。

RADOS cluster:由多台 host 存儲服務器組成的 ceph 集群

OSD(Object Storage Daemon):每台存儲服務器的磁盤組成的存儲空間

Mon(Monitor):ceph 的監視器,維護 OSD 和 PG 的集群狀態,一個 ceph 集群至少要有一個

mon,可以是一三五七等等這樣的奇數個。

Mgr(Manager):負責跟蹤運行時指標和 Ceph 集群的當前狀態,包括存儲利用率,當前性能指標和系統負載等。

        

 

     

1.3.1  Monitor(ceph-mon) ceph 監視器:

在一個主機上運行的一個守護進程,用於維護集群狀態映射(maintains maps of the cluster state),比如 ceph 集群中有多少存儲池、每個存儲池有多少 PG 以及存儲池和 PG 的映射關系等, monitor map, manager map, the OSD map, the MDS map, and the CRUSH map,這些映射是 Ceph 守護程序相互協調所需的關鍵群集狀態,此外監視器還負責管理守護程序和客戶端之間的身份驗證(認證使用 cephX 協議)。通常至少需要三個監視器才能實現冗余和高可用性。

 

 

1.3.2 Managers(ceph-mgr)的功能:

在一個主機上運行的一個守護進程,Ceph Manager 守護程序(ceph-mgr)負責跟蹤運行時指標和 Ceph   集群的當前狀態,包括存儲利用率,當前性能指標和系統負載。Ceph

Manager 守護程序還托管基於 python 的模塊來管理和公開 Ceph 集群信息,包括基於 Web

的 Ceph 儀表板和 REST API。高可用性通常至少需要兩個管理器。

 

1.3.3  Ceph OSDs(對象存儲守護程序 ceph-osd):

提供存儲數據,操作系統上的一個磁盤就是一個 OSD 守護程序,OSD 用於處理 ceph 集群數據復制,恢復,重新平衡,並通過檢查其他 Ceph OSD 守護程序的心跳來向 Ceph 監視器和管理器提供一些監視信息。通常至少需要 3 個 Ceph OSD 才能實現冗余和高可用性。

 

1.3.4 MDS(ceph 元數據服務器 ceph-mds):

代表 ceph 文件系統(NFS/CIFS)存儲元數據,(即 Ceph 塊設備和 Ceph 對象存儲不使用

MDS)

 

1.3.5 Ceph 的管理節點:

1. ceph 的常用管理接口是一組命令行工具程序,例如 rados、ceph、rbd 等命令,ceph 管理員可以從某個特定的 ceph-mon 節點執行管理操作

2. 推薦使用部署專用的管理節點對 ceph 進行配置管理、升級與后期維護,方便后期權限管理,管理節點的權限只對管理人員開放,可以避免一些不必要的誤操作的發生。

 

 

 

1.4  ceph 邏輯組織架構:

Pool:存儲池、分區,存儲池的大小取決於底層的存儲空間。

PG(placement group):一個 pool 內部可以有多個 PG 存在,pool 和 PG 都是抽象的邏輯概念,一個 pool 中有多少個 PG 可以通過公式計算。

OSD(Object Storage Daemon,對象存儲設備):每一塊磁盤都是一個 osd,一個主機由一個或多個 osd 組成.

 

ceph 集群部署好之后,要先創建存儲池才能向 ceph 寫入數據,文件在向 ceph 保存之前要先進行一致性 hash 計算,計算后會把文件保存在某個對應的 PG 的,此文件一定屬於某個

pool 的一個 PG,在通過 PG 保存在 OSD 上。

數據對象在寫到主 OSD 之后再同步對從 OSD 以實現數據的高可用。

 

 

 第一步: 計算文件到對象的映射

計算文件到對象的映射,假如 file 為客戶端要讀寫的文件,得到 oid(object id)   = ino + ono ino:inode number (INO),File 的元數據序列號,File 的唯一 id。

ono:object number (ONO),File 切分產生的某個 object 的序號,默認以 4M 切分一個塊大小。

第二步:通過 hash 算法計算出文件對應的 pool 中的 PG:第一步: 計算文件到對象的映射:

通過一致性 HASH 計算 Object 到 PG, Object -> PG 映射 hash(oid) & mask-> pgid                                                                                                                                       

 

第三步: 通過 CRUSH 把對象映射到 PG 中的 OSD

通過 CRUSH 算法計算 PG 到 OSD,PG -> OSD 映射:[CRUSH(pgid)->(osd1,osd2,osd3)]

 

第四步:PG 中的主 OSD 將對象寫入到硬盤

第五步: 主 OSD 將數據同步給備份 OSD,並等待備份 OSD 返回確認第六步: 主 OSD 將寫入完成返回給客戶端

 

二 、ceph集群部署

 

       2.1 服務器准備

             集群部署至少三台服務器,本次規划如下:

                    cat /etc/hosts

192.168.21.150 deploy.example.local deploy
192.168.21.151 node1.example.local node1
192.168.21.152 node2.example.local node2
192.168.21.153 node3.example.local node3
192.168.21.154 mon1.example.local mon1
192.168.21.155 mon2.example.local mon2
192.168.21.156 mon3.example.local mon3
192.168.21.157 mgr.example.local mgr

cluster 網絡網段為192.168.81.0/24 ,主機位與public網絡相同。其中node節點上均增加3塊20G磁盤

2.2 系統准備

    均安裝Ubuntu 18.04 ,時間同步,關閉防火牆 配置hosts 域名解析

2.3 配置清華大學鏡像源

 

root@deploy:~# cat /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ bionic main
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ bionic main
root@deploy:~#

2.4  創建用戶

                        groupadd -r -g 2023 magedu && useradd -r -m -s /bin/bash -u 2023 -g 2023 magedu && echo magedu:123456 | chpasswd

                        各服務器允許magedu 用戶以sudo用戶執行特權命令

                                 echo "magedu ALL=(ALL)  NOPASSWD: ALL" >>/etc/sudoers

                           

            配置deploy節點免密鑰登錄  其他各節點

                               切換到magedu 用戶 執行ssh-keygen

                       ssh-copy-id magedu@192.168.21.151

ssh-copy-id magedu@192.168.21.152

ssh-copy-id magedu@192.168.21.153

ssh-copy-id magedu@192.168.21.154

ssh-copy-id magedu@192.168.21.155

ssh-copy-id magedu@192.168.21.156

ssh-copy-id magedu@192.168.21.157

2.5  安裝部署工具

  在deploy 節點安裝ceph-deploy 

 

2.6 初始化mon節點

創建ceph-cluster目錄,保存集群初始化信息

 

         Ubuntu 各服務器需要單獨安裝 Python2:

 

建立集群並驗證

magedu@deploy:~/ceph-cluster$ ceph-deploy new --cluster-network 192.168.81.0/24 --public-network 192.168.21.0/24 mon1.example.local
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/magedu/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy new --cluster-network 192.168.81.0/24 --public-network 192.168.21.0/24 mon1.example.local
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7fd8d148edc0>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] ssh_copykey : True
[ceph_deploy.cli][INFO ] mon : ['mon1.example.local']
[ceph_deploy.cli][INFO ] func : <function new at 0x7fd8ce745ad0>
[ceph_deploy.cli][INFO ] public_network : 192.168.21.0/24
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] cluster_network : 192.168.81.0/24
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] fsid : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO ] making sure passwordless SSH succeeds
[mon1.example.local][DEBUG ] connected to host: deploy
[mon1.example.local][INFO ] Running command: ssh -CT -o BatchMode=yes mon1.example.local
[mon1.example.local][DEBUG ] connection detected need for sudo
[mon1.example.local][DEBUG ] connected to host: mon1.example.local
[mon1.example.local][DEBUG ] detect platform information from remote host
[mon1.example.local][DEBUG ] detect machine type
[mon1.example.local][DEBUG ] find the location of an executable
[mon1.example.local][INFO ] Running command: sudo /bin/ip link show
[mon1.example.local][INFO ] Running command: sudo /bin/ip addr show
[mon1.example.local][DEBUG ] IP addresses found: [u'192.168.81.154', u'192.168.21.154']
[ceph_deploy.new][DEBUG ] Resolving host mon1.example.local
[ceph_deploy.new][DEBUG ] Monitor mon1 at 192.168.21.154
[ceph_deploy.new][DEBUG ] Monitor initial members are ['mon1']
[ceph_deploy.new][DEBUG ] Monitor addrs are [u'192.168.21.154']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...

magedu@deploy:~/ceph-cluster$ ls
bak ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
magedu@deploy:~/ceph-cluster$ cat ceph.conf
[global]
fsid = f8b123bf-1b48-4eda-8b2f-4aff6a69318a
public_network = 192.168.21.0/24
cluster_network = 192.168.81.0/24
mon_initial_members = mon1
mon_host = 192.168.21.154
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

magedu@deploy:~/ceph-cluster$ cat ceph.mon.keyring
[mon.]
key = AQCAZB9hAAAA

 

 

ABAA6TWcbs1Z5mFDbPPRj9yaIw==
caps mon = allow *

 

 初始化存儲節點

 

 

 

 

在mon節點安裝mon

 

初始化mon並驗證

 

 

 

 

 

 

 

 

 

2.7 分發admin密鑰

各節點安裝ceph-common組件

 apt install ceph-common -y 

 

               增加magedu 用戶權限

setfacl -m u:magedu:rw /etc/ceph/ceph.client.admin.keyring && ll /etc/ceph

      

 

   部署mgr節點

   首先在mgr節點安裝mgr  

root@mgr:~# apt install ceph-mgr

在部署節點添加mgr

magedu@deploy:~/ceph-cluster$ ceph-deploy mgr create mgr
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/magedu/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy mgr create mgr
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] mgr : [('mgr', 'mgr')]
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] subcommand : create
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7fccf3ac8f50>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] func : <function mgr at 0x7fccf3f2b150>
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.mgr][DEBUG ] Deploying mgr, cluster ceph hosts mgr:mgr
[mgr][DEBUG ] connection detected need for sudo
Unhandled exception in thread started by
sys.excepthook is missing
lost sys.stderr
[mgr][DEBUG ] connected to host: mgr
[mgr][DEBUG ] detect platform information from remote host
[mgr][DEBUG ] detect machine type
[ceph_deploy.mgr][INFO ] Distro info: Ubuntu 18.04 bionic
[ceph_deploy.mgr][DEBUG ] remote host will use systemd
[ceph_deploy.mgr][DEBUG ] deploying mgr bootstrap to mgr
[mgr][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[mgr][WARNIN] mgr keyring does not exist yet, creating one
[mgr][DEBUG ] create a keyring file
[mgr][DEBUG ] create path recursively if it doesn't exist
[mgr][INFO ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mgr --keyring /var/lib/ceph/bootstrap-mgr/ceph.keyring auth get-or-create mgr.mgr mon allow profile mgr osd allow * mds allow * -o /var/lib/ceph/mgr/ceph-mgr/keyring
[mgr][INFO ] Running command: sudo systemctl enable ceph-mgr@mgr
[mgr][INFO ] Running command: sudo systemctl start ceph-mgr@mgr
[mgr][INFO ] Running command: sudo systemctl enable ceph.target

 

 

 

ceph-deploy 管理ceph集群

 apt install ceph-common  #安裝common組件

ceph-deploy admin deploy #推送密鑰給自己

setfacl -m:u:magedu:rw /etc/ceph/ceph.client.admin.keyring #授權

ceph -s、

、 

 ceph config set mon auth_allow_insecure_global_id_reclaim false   #消除mon告警

 

 

 

 

  准備 OSD 節點:

  OSD 節點安裝運行環境:

 

 

 

 

 

 

 擦除各個存儲節點的磁盤

 

 

 

     創建各個存儲節點數據盤 

 

 

 設置 OSD 服務自啟動:

 

systemctl enable ceph-osd@0

systemctl enable ceph-osd@1

systemctl enable ceph-osd@2

依次設置其他節點

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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