CentOS7下搭建Ceph分布式存儲架構


(1).Ceph概述

  Ceph是為了優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統,並且還是一個開源的分布式文件系統。因為其支持塊存儲、對象存儲,所以很自然的被用做雲計算框架openstack或cloudstack整個存儲的后端。當然Ceph也可以單獨作為存儲,例如部署一個集群作為對象存儲、SAN存儲、NAS存儲等。

  Ceph中文開源社區地址:http://ceph.org.cn/

  Ceph官方文檔:http://docs.ceph.org.cn/

  所有Ceph部署都始於Ceph存儲集群。你可以用同一個集群同時運行Ceph RADOS網關、Ceph FS文件系統、和Ceph塊設備。

  Ceph對象存儲使用Ceph對象網關守護進程(radosgw),它是個與Ceph存儲集群交互的FastCGI模塊。因為它提供了與OpenStack Swift和Amazon S3兼容的接口,RADOS要有它自己的用戶管理。Ceph對象網關可與Ceph FS客戶端或Ceph塊設備客戶端共用一個存儲集群。S3 和 Swift接口共用一個通用命名空間,所以你可以用一個接口寫如數據、然后用另一個接口取出數據。具體查看官方文檔:http://docs.ceph.org.cn/radosgw/

  Ceph文件系統(Ceph FS)是個POSIX兼容的文件系統,它使用Ceph存儲集群來存儲數據。Ceph文件系統與Ceph塊設備、同時提供S3和Swift API的Ceph對象存儲、或者原生庫( librados )一樣,都使用着相同的 Ceph 存儲集群系統。Ceph文件系統要求Ceph存儲集群內至少有一個Ceph元數據服務器。具體查看官方文檔:http://docs.ceph.org.cn/cephfs/

  Ceph塊設備是精簡配置的、大小可調且將數據條帶化存儲到集群內的多個OSD。Ceph塊設備利用RADOS的多種能力,如快照、復制和一致性。Ceph的RADOS塊設備(RBD)使用內核模塊或librbd庫與OSD交互。Ceph 塊設備靠無限伸縮性提供了高性能,如向內核模塊、或向 abbr:KVM(kernel virtual machines)(如Qemu、OpenStack和CloudStack等雲計算系統通過libvirt和Qemu可與Ceph塊設備集成)。具體查看官方文檔:http://docs.ceph.org.cn/rbd/rbd/

(2).Ceph優點

  統一存儲。雖然ceph底層是一個分布式文件系統,但Ceph能夠同時提供對象存儲、塊存儲和文件系統存儲三種存儲服務的統一存儲架構,因此能夠滿足不同應用需求前提下的簡化部署和運維,這是Ceph被OpenStack用戶熱衷的最主要原因。

  高擴展性。擴容方便、容量大。能夠管理上千台服務器、EB級的容量。

  可靠性強。支持多份強一致性副本,EC。副本能夠跨主機、機架、機房、數據中心存放。所以安全可靠。存儲節點可以自動管理、自動修復。無單點故障,容錯性強。

  高性能。因為是多個副本,因此在讀寫操作時候能夠做到高度並行化。理論上,節點越多,整個集群的IOPS和吞吐量越高。另外一點ceph客戶端讀寫數據直接與存儲設備(osd) 交互。

(3).Ceph組件

  Ceph OSDs:Ceph OSD守護進程(Ceph OSD)的功能是存儲數據,處理數據的復制、恢復、回填、再均衡,並通過檢查其他OSD 守護進程的心跳來向Ceph Monitors提供一些監控信息。當Ceph存儲集群設定為有2個副本時,至少需要2個OSD守護進程,集群才能達到active+clean狀態(Ceph默認有3個副本,但你可以調整副本數)。

  Monitors:Ceph Monitor維護着展示集群狀態的各種圖表,包括監視器圖、OSD圖、歸置組(PG)圖、和CRUSH圖。Ceph保存着發生在Monitors 、OSD和PG上的每一次狀態變更的歷史信息(稱為epoch)。

  MDSs:Ceph元數據服務器(MDS)為Ceph文件系統存儲元數據(也就是說,Ceph塊設備和Ceph對象存儲不使用MDS)。元數據服務器使得POSIX文件系統的用戶們,可以在不對Ceph存儲集群造成負擔的前提下,執行諸如ls、find等基本命令。

(4).實驗環境

youxi1  192.168.5.101  admin,osd,mon

youxi2  192.168.5.102  osd,mds

youxi3  192.168.5.103  osd,mds

youxi4  192.168.5.104  client

(5).實驗

 1)准備工作

  臨時關閉所有主機的防火牆和SELinux,這樣可以更加快捷的配置ceph。

  Ceph默認監聽端口6789,數據傳輸OSD和MDS默認使用端口范圍6800~7300,完成后根據需求選擇關閉防火牆還是將端口號添加到防火牆規則中。

  給youxi1、youxi2、youxi3三台主機添加一塊新硬盤,格式化硬盤,創建osd目錄並掛載

[root@youxi1 ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@youxi1 ~]# mkdir /var/local/osd{0,1,2}
[root@youxi1 ~]# mount /dev/sdb /var/local/osd0/

[root@youxi2 ~]# mkfs.xfs /dev/sdb
[root@youxi2 ~]# mkdir /var/local/osd{0,1,2}
[root@youxi2 ~]# mount /dev/sdb /var/local/osd1/

[root@youxi3 ~]# mkfs.xfs /dev/sdb
[root@youxi3 ~]# mkdir /var/local/osd{0,1,2}
[root@youxi3 ~]# mount /dev/sdb /var/local/osd2/

  上面是臨時掛載,永久掛載需要寫入到/etc/fstab文件中。

  安裝NTP,同步youxi1、youxi2、youxi3的時間

[root@youxi1 ~]# yum -y install ntp
[root@youxi1 ~]# ntpdate ntp1.aliyun.com
25 Jul 14:22:55 ntpdate[1499]: adjust time server 120.25.115.20 offset 0.000847 sec

[root@youxi2 ~]# yum -y install ntp
[root@youxi2 ~]# ntpdate ntp1.aliyun.com
25 Jul 14:22:20 ntpdate[1490]: adjust time server 120.25.115.20 offset -0.001426 sec

[root@youxi3 ~]# yum -y install ntp
[root@youxi3 ~]# ntpdate ntp1.aliyun.com
25 Jul 14:25:54 ntpdate[1519]: adjust time server 120.25.115.20 offset -0.003259 sec

  管理節點youxi1生成密鑰,並發布給所有主機,包括自身

[root@youxi1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:kz3zyP0++2YnGvQpgW8iwDUHQP+1aOdeSIu3Vzmpjjs root@youxi1
The key's randomart image is:
+---[RSA 2048]----+
|     .o..        |
|       . .       |
|        + . .    |
|     . . * + .   |
|      o S O *   o|
|       . + & = =.|
|        . = % =..|
|         . E.B+ +|
|           oB=+Bo|
+----[SHA256]-----+

[root@youxi1 ~]# ssh-copy-id 192.168.5.101
[root@youxi1 ~]# ssh-copy-id 192.168.5.102
[root@youxi1 ~]# ssh-copy-id 192.168.5.103
[root@youxi1 ~]# ssh-copy-id 192.168.5.104

  編輯所有主機的/etc/hosts文件,將IP地址與主機名對應

192.168.5.101 youxi1
192.168.5.102 youxi2
192.168.5.103 youxi3
192.168.5.104 youxi4

 2)在管理節點youxi1安裝ceph-deploy管理工具

  編輯ceph的yum源,這里使用的是阿里雲的yum源。如果yum源相當多,可以先將原本的yum源移出/etc/yum.repos.d/目錄,然后使用命令"wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo"下載基礎源以及使用命令"wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo"下載epel源。

[root@youxi1 ~]# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1
[root@youxi1 ~]# yum clean all
[root@youxi1 ~]# yum makecache  //使用yum list會更快一點

  安裝ceph-deploy管理工具

[root@youxi1 ~]# yum -y install ceph-deploy

  創建Monitor服務

[root@youxi1 ~]# mkdir /etc/ceph
[root@youxi1 ~]# cd /etc/ceph/
[root@youxi1 ceph]# ls
[root@youxi1 ceph]# ceph-deploy new youxi1
[root@youxi1 ceph]# ls  //以下三個文件分別對應ceph的配置文件、日志文件和monitor密鑰環文件
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

  如果想要修改守護進程數,也就是副本數,可以在ceph.conf配置文件中添加如下行

[root@youxi1 ceph]# vim ceph.conf
osd_pool_default_size = 2  //副本數量

 3)在所有主機上安裝ceph

[root@youxi1 ceph]# ceph-deploy install youxi1 youxi2 youxi3 youxi4

  上面這個命令是去官方服務器下載安裝,相當慢一般不會這樣用。

  之前管理節點youxi1配置過ceph的阿里雲的源,可以直接yum安裝。不過另外三台主機youxi2、youxi3、youxi4需要先配置yum源,再安裝

[root@youxi1 ceph]# yum -y install epel-release
[root@youxi1 ceph]# yum -y install ceph-release
[root@youxi1 ceph]# yum -y install ceph ceph-radosgw

 4)在管理節點上安裝Monitor(監控)

[root@youxi1 ceph]# ceph-deploy mon create youxi1  //創建Monitor(監控)
[root@youxi1 ceph]# ceph-deploy gatherkeys youxi1  //收集keyring(密鑰環)信息
[root@youxi1 ceph]# ls
ceph.bootstrap-mds.keyring  ceph.bootstrap-rgw.keyring  ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring  ceph.client.admin.keyring   ceph.mon.keyring
ceph.bootstrap-osd.keyring  ceph.conf                   rbdmap

 5)創建osd

  前面已經創建過osd目錄並掛載,這里只需要創建osd節點即可

[root@youxi1 ceph]# ceph-deploy osd prepare youxi1:/var/local/osd0 youxi2:/var/local/osd1 youxi3:/var/local/osd2
[root@youxi1 ceph]# ls /var/local/osd0  //在不同的主機上可以看到,對應的節點會生成文件
ceph_fsid fsid magic
[root@youxi1 ceph]# ls /var/local/osd1
[root@youxi1 ceph]# ls /var/local/osd2

 5)激活osd

  在管理節點youxi1上激活各節點的osd

[root@youxi1 ceph]# ceph-deploy osd activate youxi1:/var/local/osd0 youxi2:/var/local/osd1 youxi3:/var/local/osd2

  如果報如下錯誤,需要給三個節點的/var/local/osd{0,1,2}/三個文件夾添加777權限(原來我想先賦權的,但試下來沒用)

 

[root@youxi1 ceph]# chmod 777 -R /var/local/osd{0,1,2}/

[root@youxi2 ~]# chmod 777 -R /var/local/osd{0,1,2}/

[root@youxi3 ~]# chmod 777 -R /var/local/osd{0,1,2}/

  然后重新執行ceph-deploy osd activate youxi1:/var/local/osd0 youxi2:/var/local/osd1 youxi3:/var/local/osd2即可

  激活完成后可以使用命令查看osd

[root@youxi1 ceph]# ceph-deploy osd list youxi1  //也可以查看多個節點,中間用空格隔開
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.39): /usr/bin/ceph-deploy osd list youxi1
[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  ]  subcommand                    : list
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f4c649e6fc8>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function osd at 0x7f4c64a3ef50>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  disk                          : [('youxi1', None, None)]
[youxi1][DEBUG ] connected to host: youxi1 
[youxi1][DEBUG ] detect platform information from remote host
[youxi1][DEBUG ] detect machine type
[youxi1][DEBUG ] find the location of an executable
[youxi1][DEBUG ] find the location of an executable
[youxi1][INFO  ] Running command: /bin/ceph --cluster=ceph osd tree --format=json
[youxi1][DEBUG ] connected to host: youxi1 
[youxi1][DEBUG ] detect platform information from remote host
[youxi1][DEBUG ] detect machine type
[youxi1][DEBUG ] find the location of an executable
[youxi1][INFO  ] Running command: /usr/sbin/ceph-disk list
[youxi1][INFO  ] ----------------------------------------
[youxi1][INFO  ] ceph-0
[youxi1][INFO  ] ----------------------------------------
[youxi1][INFO  ] Path           /var/lib/ceph/osd/ceph-0
[youxi1][INFO  ] ID             0
[youxi1][INFO  ] Name           osd.0
[youxi1][INFO  ] Status         up
[youxi1][INFO  ] Reweight       1.0
[youxi1][INFO  ] Active         ok
[youxi1][INFO  ] Magic          ceph osd volume v026
[youxi1][INFO  ] Whoami         0
[youxi1][INFO  ] Journal path   /var/local/osd0/journal
[youxi1][INFO  ] ----------------------------------------

  使用命令將配置文件和admin密鑰同步到各個節點,以便各個節點使用ceph命令時無需指定Monitor地址和ceph.client.admin.keyring密鑰。注意:還需要修改各個節點ceph.client.admin.keyring密鑰的權限

[root@youxi1 ceph]# ceph-deploy admin youxi1 youxi2 youxi3
[root@youxi1 ceph]# chmod +r ceph.client.admin.keyring

[root@youxi2 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring

[root@youxi3 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring

  最后查看osd狀態

[root@youxi1 ceph]# ceph health
HEALTH_OK

 6)部署mds

[root@youxi1 ceph]# ceph-deploy mds create youxi1 youxi2 youxi3
[root@youxi1 ceph]# ceph mds stat
e4:, 3 up:standby

 7)查看集群狀態

[root@youxi1 ceph]# ceph -s
    cluster 8daf7524-b30c-4959-9103-812056c89a63
     health HEALTH_OK
     monmap e1: 1 mons at {youxi1=192.168.5.101:6789/0}
            election epoch 3, quorum 0 youxi1
     osdmap e15: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v33: 64 pgs, 1 pools, 0 bytes data, 0 objects
            327 MB used, 15002 MB / 15330 MB avail
                  64 active+clean

 8)創建ceph文件系統

  在創建之前可以先查看一下文件系統

[root@youxi1 ceph]# ceph fs ls
No filesystems enabled  //可以看到目前是沒有的

  先創建存儲池

[root@youxi1 ceph]# ceph osd pool create cephfs_data 128
pool 'cephfs_data' created
[root@youxi1 ceph]# ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created

  說明:命令最后的128是指定pg_num的值,這個值是不能自動計算的,需要手動賦予。一般來說,少於5個osd時,pg_num可以設置為128;osd在5到10個之間,pg_num可以設置為512;osd在10到50個之間,pg_num可以設置為4096;但是osd一旦超過50個,那么就得自己計算pg_num的取值,也可以借助工具pgcalc計算,網址是https://ceph.com/pgcalc/

  隨着osd數量的增加,正確的pg_num取值變得更加重要,因為它顯著地影響着集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。

  接着創建文件系統

 

[root@youxi1 ceph]# ceph fs new 128 cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1

  此時再回頭查看文件系統,mds節點狀態

[root@youxi1 ceph]# ceph fs ls
name: 128, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@youxi1 ceph]# ceph mds stat
e7: 1/1/1 up {0=youxi3=up:active}, 2 up:standby

  一些可能會用到的命令

ceph osd pool get [存儲池名稱] size  //查看存儲池副本數
ceph osd pool set [存儲池名稱] size 3  //修改存儲池副本數
ceph osd lspools  //打印存儲池列表
ceph osd pool create [存儲池名稱] [pg_num的取值]  //創建存儲池
ceph osd pool rename [舊的存儲池名稱] [新的存儲池名稱]  //存儲池重命名
ceph osd pool get [存儲池名稱] pg_num  //查看存儲池的pg_num
ceph osd pool get [存儲池名稱] pgp_num  //查看存儲池的pgp_num
ceph osd pool set [存儲池名稱] pg_num [pg_num的取值]  //修改存儲池的pg_num值
ceph osd pool set [存儲池名稱] pgp_num [pgp_num的取值]  //修改存儲池的pgp_num值
[root@youxi1 ceph]# ceph osd pool get-quota cephfs_metadata  //查看存儲池配額
quotas for pool 'cephfs_metadata':
max objects: N/A
max bytes : N/A

 9)客戶端youxi4上掛載使用

  第一種、內核驅動掛載ceph文件系統

[root@youxi4 ~]# mkdir /ceph  //創建掛載點
[root@youxi4 ~]# cat /etc/ceph/ceph.client.admin.keyring  //獲取存儲密鑰,如果沒有前往管理節點重新復制
[client.admin]
        key = AQBnbTpdmuOaIhAAb41IjqTno5irVAbPviRUWw==
[root@youxi4 ~]# vim /etc/ceph/admin.secret  //將存儲密鑰保存到/etc/ceph/admin.secret文件中
AQBnbTpdmuOaIhAAb41IjqTno5irVAbPviRUWw==
//如果想開機掛載可以寫入/etc/rc.d/rc.local文件中
[root@youxi4 ~]# mount -t ceph 192.168.5.101:6789:/ /ceph -o name=admin,secretfile=/etc/ceph/admin.secret
[root@youxi4 ~]# df -h
文件系統              容量  已用  可用 已用% 掛載點
/dev/mapper/vg1-root   17G  1.4G   16G    9% /
devtmpfs              476M     0  476M    0% /dev
tmpfs                 488M     0  488M    0% /dev/shm
tmpfs                 488M  7.6M  480M    2% /run
tmpfs                 488M     0  488M    0% /sys/fs/cgroup
/dev/sda1            1014M  130M  885M   13% /boot
tmpfs                  98M     0   98M    0% /run/user/0
192.168.5.101:6789:/   15G  352M   15G    3% /ceph
[root@youxi4 ~]# umount /ceph  //卸載
[root@youxi4 ~]# df -h       
文件系統              容量  已用  可用 已用% 掛載點
/dev/mapper/vg1-root   17G  1.4G   16G    9% /
devtmpfs              476M     0  476M    0% /dev
tmpfs                 488M     0  488M    0% /dev/shm
tmpfs                 488M  7.6M  480M    2% /run
tmpfs                 488M     0  488M    0% /sys/fs/cgroup
/dev/sda1            1014M  130M  885M   13% /boot
tmpfs                  98M     0   98M    0% /run/user/0

  第二種、用戶控件掛載ceph文件系統

   這個方法需要安裝ceph-fuse

[root@youxi4 ~]# yum install -y ceph-fuse
[root@youxi4 ~]# ceph-fuse -m 192.168.5.101:6789 /ceph  //掛載
ceph-fuse[1655]: starting ceph client
2019-07-26 16:59:34.477805 7fb5248a9f00 -1 init, newargv = 0x562910f74780 newargc=11
ceph-fuse[1655]: starting fuse
[root@youxi4 ~]# fusermount -u /ceph  //卸載

(6).其他

清理機器上的ceph相關配置:

  停止所有進程: stop ceph-all

  卸載所有ceph程序:ceph-deploy uninstall [{ceph-node}]

  刪除ceph相關的安裝包:ceph-deploy purge {ceph-node} [{ceph-data}]

  刪除ceph相關的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]

  刪除key:ceph-deploy forgetkeys

  卸載ceph-deploy管理:yum -y remove ceph-deploy

 

 

參考:https://www.cnblogs.com/happy1983/p/9246379.html


免責聲明!

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



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