ceph搭建方法(一起學習ceph-02-ceph集群搭建)
2023-09-21 04:12:58
一起學習ceph系列:
一起來學習ceph--01-ceph簡介
一起學習ceph-02-ceph集群搭建
一起學習ceph-03-dashboard安裝
一起學習ceph-04-ceph日常維護
一、簡介
Ceph 存儲集群至少需要一個 Ceph Monitor 和兩個 OSD 守護進程。而運行 Ceph 文件系統客戶端時,則必須要有元數據伺服器( Metadata Server )。
官網文檔地址:
Ceph OSDs: ( Ceph OSD )的功能是存儲數據,處理數據的複製、恢復、回填、再均衡,並通過檢查其他OSD 守護進程的心跳來向 Ceph Monitors 提供一些監控信息。當 Ceph 存儲集群設定為有2個副本時,至少需要2個 OSD 守護進程,集群才能達到 active clean 狀態( Ceph 默認有3個副本,但你可以調整副本數)。
Monitors: 維護著展示集群狀態的各種圖表,包括監視器圖、 OSD 圖、歸置組( PG )圖、和 CRUSH 圖。 Ceph 保存著發生在Monitors 、 OSD 和 PG上的每一次狀態變更的歷史信息(稱為 epoch )。
MDSs: ( MDS )為 存儲元數據(也就是說,Ceph 塊設備和 Ceph 對象存儲不使用MDS )。元數據伺服器使得 POSIX 文件系統的用戶們,可以在不對 Ceph 存儲集群造成負擔的前提下,執行諸如 ls、find 等基本命令。
Ceph 把客戶端數據保存為存儲池內的對象。通過使用 CRUSH 算法, Ceph 可以計算出哪個歸置組(PG)應該持有指定的對象(Object),然後進一步計算出哪個 OSD 守護進程持有該歸置組。 CRUSH 算法使得 Ceph 存儲集群能夠動態地伸縮、再均衡和修復。
二、機器準備
1、我們這裡準備4臺機器,如下表:
2、架構圖如下:
3、配置hosts
192.168.200.168ceph-admin
192.168.200.159node01
192.168.200.191node02
192.168.200.166node03
4、配置ntp
[root@ip-192-168-200-168 ~]# cat /etc/cron.daily/ntp.sh
#!/bin/bash
ntplog=/tmp/wmbak.log
ntpdate ntp.**.com 2>&1 >>$ntplog
clock --systohc
5、配置yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
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
yum makecache
編輯ceph源
vi /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
gpgcheck=0
priority=1
防火牆檢查(firewall和selinux)
systemctl status firewalld
如果未關閉,請關閉
systemctl stop firewalld
systemctl disable firewalld
每臺機器均關閉selinux
setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
1、創建部署 CEPH 的用戶(所有節點)
ceph-deploy 工具必須以普通用戶登錄 Ceph 節點,且此用戶擁有無密碼使用 sudo 的權限,因為它需要在安裝軟體及配置文件的過程中,不必輸入密碼。較新版的 ceph-deploy 支持用 --username 選項提供可無密碼使用 sudo 的用戶名(包括 root ,雖然不建議這樣做)。建議在集群內的所有 Ceph 節點上給 ceph-deploy 創建一個特定的用戶,但不要用 "ceph" 這個名字。
useradd -d /home/stadmin -m stadmin
echo "LAOlang@478%"|passwd --stdin stadmin
echo "stadmin ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/stadmin
chmod 0440 /etc/sudoers.d/stadmin
節點到普通節點免密配置
# su - stadmin
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/stadmin/.ssh/id_rsa):
Created directory '/home/stadmin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/stadmin/.ssh/id_rsa.
Your public key has been saved in /home/stadmin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:BNaDgb2ipjYbjb4CN1E1AiAbaHYVbdnEFANZQbBd9Fc stadmin@ip-192-168-200-168
The key's randomart image is:
---[RSA 2048]----
|=...o*O*%O o E|
|o= .oooB=oo . .|
| .. .o.o . . |
| . . .. . |
| o . S |
|. B |
|.* o |
| o. |
|o |
----[SHA256]-----
分發到各個node節點
ssh-copy-id stadmin@node01
ssh-copy-id stadmin@node02
ssh-copy-id stadmin@node03
測試
[stadmin@ip-192-168-200-168 ~]$ ssh node01
[stadmin@ip-192-168-200-159 ~]$ exit
Connection to node01 closed.
[stadmin@ip-192-168-200-168 ~]$ ssh node02
[stadmin@ip-192-168-200-191 ~]$ exit
Connection to node02 closed.
[stadmin@ip-192-168-200-168 ~]$ ssh node03
[stadmin@ip-192-168-200-166 ~]$ exit
sudo yum install ceph-deploy -y
三、安裝集群準備
cd /data
mkdir cluster
cd cluster
ceph-deploy new ceph-admin(發現報錯)
sudo yum install python-setuptools -y 解決報錯
ceph-deploy new ceph-admin
我這裡搞錯目錄了,重新來
清理一下
註:若安裝ceph後遇到麻煩可以使用以下命令進行清除包和配置:
// 刪除安裝包
$ ceph-deploy purge admin-node node01 node02 node03
// 清除配置
$ ceph-deploy purgedata admin-node node01 node02 node03
$ ceph-deploy forgetkeys
ceph-deploy new ceph-admin
修改vi ceph.conf
[global]
fsid = 523b24a7-9a44-4f04-b98b-c59c1b02a43d
mon_initial_members = ceph-admin
mon_host = 192.168.200.168
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
增加以下內容:
osd pool default size = 2 (默認是3個副本)
public network = 192.168.200.0/24
所有節點上安裝ceph
ceph-deploy install ceph-admin node01 node02 node03 --no-adjust-repos
--no-adjust-repos參數可以在ceph-deploy其它節點安裝ceph時不會修改ceph.repo文件
這裡等的時間較長(看屏幕發現是串行安裝)
這裡看到了node03,完成,版本是ceph version 14.2.11
6. 配置初始 monitor
ceph-deploy mon create-initial
[ceph_deploy.gatherkeys][INFO ] Storing ceph.client.admin.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mds.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mgr.keyring
[ceph_deploy.gatherkeys][INFO ] keyring 'ceph.mon.keyring' already exists
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-osd.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-rgw.keyring
[ceph_deploy.gatherkeys][INFO ] Destroy temp directory /tmp/tmpckrjJa
7、秘鑰copy
目的:每次執行 Ceph 命令行時就無需指定 monitor 地址和 ceph.client.admin.keyring 了
ceph-deploy admin ceph-admin node01 node02 node03
8、檢查節點的磁碟
ceph-deploy disk list node01 node02 node03
查看集群狀態
sudo chmod r /etc/ceph/ceph.client.admin.keyring
ceph -s
9、osd 創建
ceph-deploy osd create --data /dev/sdb node01
ceph-deploy osd create --data /dev/sdb node02
ceph-deploy osd create --data /dev/sdb node03
這裡要注意:我最開始是使用lvm上的一個分區,一直報錯
在查看集群狀態(發現已經有3個osd了)
ceph -s
10、創建mgr
ceph-deploy mgr create ceph-admin
再查看集群狀態(已經ok了)
四、報錯處理
配置初始化monitor報錯,按照網上這位仁兄的處理,完美。
由於官方文檔沒有特別說明,網上大部分ceph配置文章丟三落四。導致配置ceph初始monitor(s)時,各種報錯,本文提供了幾種解決的辦法可供參考。
1、執行ceph-deploy mon create-initial
報錯部分內容如下:
[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory[ceph2][WARNIN] monitor: mon.ceph2, might not be running yet[ceph2][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph2.asok mon_status[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory[ceph2][WARNIN] monitor ceph2 does not exist in monmap[ceph2][WARNIN] neither public_addr nor public_network keys are defined for monitors[ceph2][WARNIN] monitors may not be able to form quorum
注意報錯中public_network,這是由於沒有在ceph.conf中配置
解決辦法:
修改ceph.conf配置文件(此IP段根據個人情況設定),添加public_network = 192.168.1.0/24
2、修改後繼續執行ceph-deploy mon create-initial後,發現依舊報錯,報錯部分內容如下
[ceph3][WARNIN] provided hostname must match remote hostname[ceph3][WARNIN] provided hostname: ceph3[ceph3][WARNIN] remote hostname: localhost[ceph3][WARNIN] monitors may not reach quorum and create-keys will not complete[ceph3][WARNIN] ********************************************************************************[ceph3][DEBUG ] deploying mon to ceph3[ceph3][DEBUG ] get remote short hostname[ceph3][DEBUG ] remote hostname: localhost[ceph3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf[ceph_deploy.mon][ERROR ] RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite[ceph_deploy][ERROR ] GenericError: Failed to create 3 monitors
這裡看到錯誤提示/etc/ceph/ceph.conf內容不同,使用--overwrite-conf來覆蓋
命令如下:
ceph-deploy --overwrite-conf config push ceph1 ceph2 ceph3
3、修改後繼續執行ceph-deploy mon create-initial,發現報錯還是存在,報錯部分內容如下
[ceph3][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph3.asok mon_status[ceph3][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory[ceph_deploy.mon][WARNIN] mon.ceph3 monitor is not yet in quorum, tries left: 1[ceph_deploy.mon][WARNIN] waiting 20 seconds before retrying[ceph_deploy.mon][ERROR ] Some monitors have still not reached quorum:[ceph_deploy.mon][ERROR ] ceph1[ceph_deploy.mon][ERROR ] ceph3[ceph_deploy.mon][ERROR ] ceph2
經過排查發現節點的hostname與/etc/hosts不符
解決辦法:修改節點hostname名稱,使其與/etc/hosts相符
hostnamectl set-hostname ceph-admin
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
4、修改後繼續執行ceph-deploy mon create-initial,mmp發現還是報錯,報錯內容又不一樣了,中間部分報錯內容如下
[ceph2][ERROR ] no valid command found; 10 closest matches:[ceph2][ERROR ] perf dump {} {}[ceph2][ERROR ] log reopen[ceph2][ERROR ] help[ceph2][ERROR ] git_version[ceph2][ERROR ] log flush[ceph2][ERROR ] log dump[ceph2][ERROR ] config unset [ceph2][ERROR ] config show[ceph2][ERROR ] get_command_descriptions[ceph2][ERROR ] dump_mempools[ceph2][ERROR ] admin_socket: invalid command[ceph_deploy.mon][WARNIN] mon.ceph2 monitor is not yet in quorum, tries left: 5[ceph_deploy.mon][WARNIN] waiting 5 seconds before retrying[ceph2][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph2.asok mon_status[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
解決辦法:在各個節點上執行sudo pkill ceph,然後再在deploy節點執行ceph-deploy mon create-initial
然後發現ERROR報錯消失了,配置初始monitor(s)、並收集到了所有密鑰,當前目錄下可以看到下面這些密鑰環
######################################
5、ceph磁碟問題
[stadmin@ceph-admin cluster]$ ceph-deploy osd prepare node01:/ceph/osd0
usage: ceph-deploy osd [-h] {list,create} ...
ceph-deploy osd: error: argument subcommand: invalid choice: 'prepare' (choose from 'list', 'create')
官網上有如下說明:
Be sure that the device is not currently in use and does not contain any important data.
意思是說必須要用未使用的磁碟做OSD節點嗎?同一個磁碟下通過指定不同目錄弄多個OSD節點現在的部署方式官網未給出,是不是不支持了呢?以後再研究了。
以上幾個問題我都遇到了,特別是最後一個問題,我重裝了系統,重新做了raid。
,