Ceph 存儲集群 - 搭建存儲集群---教程走到osd激活這一步執行不下去了,報錯


目錄

一、准備機器

本文描述如何在 CentOS 7 下搭建 Ceph 存儲集群(STORAGE CLUSTER)。

一共4台機器,其中1個是管理節點,其他3個是ceph節點:

hostname ip role 描述
admin-node 192.168.0.130 ceph-deploy 管理節點
node1 192.168.0.131 mon.node1 ceph節點,監控節點
node2 192.168.0.132 osd.0 ceph節點,OSD節點
node3 192.168.0.133 osd.1 ceph節點,OSD節點

管理節點:admin-node

ceph節點:node1, node2, node3

所有節點:admin-node, node1, node2, node3

1. 修改主機名,所有節點都需要做

# vi /etc/hostname

2. 修改hosts文件,所有節點都需要做

# vi /etc/hosts
192.168.0.130 admin-node
192.168.0.131 node1
192.168.0.132 node2
192.168.0.133 node3

3. 確保聯通性(管理節點)

用 ping 短主機名( hostname -s )的方式確認網絡聯通性。解決掉可能存在的主機名解析問題。

# ping node1
# ping node2
# ping node3

二、ceph節點安裝

1. 安裝NPT(所有節點)

我們建議在所有 Ceph 節點上安裝 NTP 服務(特別是 Ceph Monitor 節點),以免因時鍾漂移導致故障,詳情見時鍾。

# yum install ntp ntpdate ntp-doc
# systemctl start ntpd

// 同步時間,多操作幾次,確保所有節點時間一致
# ntpdate ntp1.aliyun.com

2. 安裝其他依賴(所有節點)

# yum -y install openssh-server python python-devel python-pip python36 python36-devel python36-pip

3. 創建部署 CEPH 的用戶(所有節點)

ceph-deploy 工具必須以普通用戶登錄 Ceph 節點,且此用戶擁有無密碼使用 sudo 的權限,因為它需要在安裝軟件及配置文件的過程中,不必輸入密碼。
建議在集群內的所有 Ceph 節點上給 ceph-deploy 創建一個特定的用戶,但不要用 “ceph” 這個名字。

  1. 在各 Ceph 節點創建新用戶
# useradd -d /home/zeng -m zeng
# passwd zeng
  1. 確保各 Ceph 節點上新創建的用戶都有 sudo 權限
# echo "zeng ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/zeng
# chmod 0440 /etc/sudoers.d/zeng

4. 允許無密碼SSH登錄(管理節點)

因為 ceph-deploy 不支持輸入密碼,你必須在管理節點上生成 SSH 密鑰並把其公鑰分發到各 Ceph 節點。 ceph-deploy 會嘗試給初始 monitors 生成 SSH 密鑰對。

  1. 生成 SSH 密鑰對

不要用 sudoroot 用戶。提示 “Enter passphrase” 時,直接回車,口令即為空:

//切換用戶,如不特別說明,后續的操作均在該用戶下進行
# su - zeng

//生成密鑰對
$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/zeng/.ssh/id_rsa): 
Created directory '/home/zeng/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/zeng/.ssh/id_rsa.
Your public key has been saved in /home/zeng/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Tb0VpUOZtmh+QBRjUOE0n2Uy3WuoZVgXn6TBBb2SsGk zeng@admin-node
The key's randomart image is:
+---[RSA 2048]----+
|          .+@=OO*|
|           *.BB@=|
|          ..O+Xo+|
|         o E+O.= |
|        S oo=.o  |
|           .. .  |
|             .   |
|                 |
|                 |
+----[SHA256]-----+
  1. 把公鑰拷貝到各 Ceph 節點
$ ssh-copy-id zeng@admin-node
$ ssh-copy-id zeng@node1
$ ssh-copy-id zeng@node2
$ ssh-copy-id zeng@node3

完成后, /home/zeng/.ssh/ 路徑下:

  • admin-node 多了文件 id_rsaid_rsa.pubknown_hosts
  • node1, node2, node3 多了文件authorized_keys
  1. 修改~/.ssh/config 文件

修改 ~/.ssh/config 文件(沒有則新增),這樣 ceph-deploy 就能用你所建的用戶名登錄 Ceph 節點了。

// 必須使用sudo
$ sudo vi ~/.ssh/config
Host admin-node
   Hostname admin-node
   User zeng
Host node1
   Hostname node1
   User zeng
Host node2
   Hostname node2
   User zeng
Host node3
   Hostname node3
   User zeng
  1. 測試ssh能否成功
$ ssh zeng@admin-node
$ exit
$ ssh zeng@node1
$ exit
$ ssh zeng@node2
$ exit
$ ssh zeng@node3
$ exit
  • 問題:如果出現 "Bad owner or permissions on /home/zeng/.ssh/config",執行命令修改文件權限。
$ sudo chmod 644 ~/.ssh/config

5. 引導時聯網(ceph節點)

Ceph 的各 OSD 進程通過網絡互聯並向 Monitors 上報自己的狀態。如果網絡默認為 off ,那么 Ceph 集群在啟動時就不能上線,直到你打開網絡。

$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3

//確保ONBOOT 設置成了 yes 

6. 開放所需端口(ceph節點)

Ceph Monitors 之間默認使用 6789 端口通信, OSD 之間默認用 6800:7300 這個范圍內的端口通信。Ceph OSD 能利用多個網絡連接進行與客戶端、monitors、其他 OSD 間的復制和心跳的通信。

$ sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
// 或者關閉防火牆
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

7. 終端(TTY)(ceph節點)

在 CentOS 和 RHEL 上執行 ceph-deploy 命令時可能會報錯。如果你的 Ceph 節點默認設置了 requiretty ,執行

$ sudo visudo

找到 Defaults requiretty 選項,把它改為 Defaults:ceph !requiretty 或者直接注釋掉,這樣 ceph-deploy 就可以用之前創建的用戶(創建部署 Ceph 的用戶 )連接了。

編輯配置文件 /etc/sudoers 時,必須用 sudo visudo 而不是文本編輯器。

8. 關閉selinux(ceph節點)

$ sudo setenforce 0

要使 SELinux 配置永久生效(如果它的確是問題根源),需修改其配置文件 /etc/selinux/config:

$ sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

即修改 SELINUX=disabled

9. 配置EPEL源(管理節點)

使用阿里雲的yum源

rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum clean all
yum makecache

10. 把軟件包源加入軟件庫(管理節點)

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

把如下內容粘帖進去,保存到 /etc/yum.repos.d/ceph.repo 文件中。

ceph版本可以參考這個:https://www.cnblogs.com/sanduzxcvbnm/p/13553035.html

ceph清華源,首選

[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc
priority=1

注意:
** 以上步驟操作完后重啟所有節點主機**

11. 更新軟件庫並安裝ceph-deploy(管理節點)

$ sudo yum update && sudo yum install ceph-deploy
$ sudo yum install yum-plugin-priorities

時間可能比較久,耐心等待。

三、搭建集群

管理節點 下執行如下步驟:

1. 安裝准備,創建文件夾

在管理節點上創建一個目錄,用於保存 ceph-deploy 生成的配置文件和密鑰對。

$ cd ~
$ mkdir my-cluster
$ cd my-cluster

注:若安裝ceph后遇到麻煩可以使用以下命令進行清除包和配置:

// 刪除安裝包
$ ceph-deploy purge admin-node node1 node2 node3

// 清除配置
$ ceph-deploy purgedata admin-node node1 node2 node3
$ ceph-deploy forgetkeys

2. 創建集群和監控節點

創建集群並初始化監控節點

$ ceph-deploy new {initial-monitor-node(s)}

這里node1是monitor節點,所以執行:

$ ceph-deploy new node1

完成后,my-clster 下多了3個文件:ceph.confceph-deploy-ceph.logceph.mon.keyring

  • 問題:如果出現 "[ceph_deploy][ERROR ] RuntimeError: remote connection got closed, ensure requiretty is disabled for node1",執行 sudo visudo 將 Defaults requiretty 注釋掉。

3. 修改配置文件

$ cat ceph.conf

內容如下:

[global]
fsid = 89933bbb-257c-4f46-9f77-02f44f4cc95c
mon_initial_members = node1
mon_host = 192.168.0.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

把 Ceph 配置文件里的默認副本數從 3 改成 2 ,這樣只有兩個 OSD 也可以達到 active + clean 狀態。把 osd pool default size = 2 加入 [global] 段:

$ sed -i '$a\osd pool default size = 2' ceph.conf

再把 public network 寫入 Ceph 配置文件的 [global] 段:

public_network = {ip-address}/{netmask}
# 比如:public_network = 192.168.0.0/24

最終的文件內容是:

[global]
fsid = 89933bbb-257c-4f46-9f77-02f44f4cc95c
mon_initial_members = node1
mon_host = 192.168.0.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
public_network = 192.168.0.0/24

4. 安裝Ceph

在所有節點上安裝ceph:

$ ceph-deploy install --no-adjust-repos admin-node node1 node2 node3

--no-adjust-repos是直接使用本地源,不生成官方源.(重要)

  • 問題:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install epel-release

解決方法:

sudo yum -y remove epel-release

5. 配置初始 monitor(s)、並收集所有密鑰

$ ceph-deploy mon create-initial

完成上述操作后,當前目錄里應該會出現這些密鑰環:

{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring
{cluster-name}.bootstrap-mds.keyring
{cluster-name}.bootstrap-rgw.keyring

6. 添加2個OSD

  1. 登錄到 Ceph 節點、並給 OSD 守護進程創建一個目錄,並添加權限。
$ ssh node2
$ sudo mkdir /var/local/osd0
$ sudo chmod 777 /var/local/osd0/
$ exit

$ ssh node3
$ sudo mkdir /var/local/osd1
$ sudo chmod 777 /var/local/osd1/
$ exit
  1. 然后,從管理節點執行 ceph-deploy 來准備 OSD 。
$ ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
  1. 最后,激活 OSD 。
$ ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1

7.把配置文件和 admin 密鑰拷貝到管理節點和 Ceph 節點

$ ceph-deploy admin admin-node node1 node2 node3

8. 確保你對 ceph.client.admin.keyring 有正確的操作權限

$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring

9. 檢查集群的健康狀況和OSD節點狀況

[zeng@admin-node my-cluster]$ ceph health
HEALTH_OK

[zeng@admin-node my-cluster]$ ceph -s
    cluster a3dd419e-5c99-4387-b251-58d4eb582995
     health HEALTH_OK
     monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
            election epoch 3, quorum 0 node1
     osdmap e10: 2 osds: 2 up, 2 in
            flags sortbitwise,require_jewel_osds
      pgmap v22: 64 pgs, 1 pools, 0 bytes data, 0 objects
            12956 MB used, 21831 MB / 34788 MB avail
                  64 active+clean
                  
[zeng@admin-node my-cluster]$ ceph osd df
ID WEIGHT  REWEIGHT SIZE   USE    AVAIL  %USE  VAR  PGS 
 0 0.01659  1.00000 17394M  6478M 10915M 37.24 1.00  64 
 1 0.01659  1.00000 17394M  6478M 10915M 37.25 1.00  64 
              TOTAL 34788M 12956M 21831M 37.24          
MIN/MAX VAR: 1.00/1.00  STDDEV: 0

四、擴展集群(擴容)

1. 添加OSD

在 node1 上添加一個 osd.2。

  1. 創建目錄
$ ssh node1
$ sudo mkdir /var/local/osd2
$ sudo chmod 777 /var/local/osd2/
$ exit
  1. 准備OSD
$ ceph-deploy osd prepare node1:/var/local/osd2
  1. 激活OSD
$ ceph-deploy osd activate node1:/var/local/osd2
  1. 檢查集群狀況和OSD節點:
[zeng@admin-node my-cluster]$ ceph -s
    cluster a3dd419e-5c99-4387-b251-58d4eb582995
     health HEALTH_OK
     monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
            election epoch 3, quorum 0 node1
     osdmap e15: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v37: 64 pgs, 1 pools, 0 bytes data, 0 objects
            19450 MB used, 32731 MB / 52182 MB avail
                  64 active+clean

[zeng@admin-node my-cluster]$ ceph osd df
ID WEIGHT  REWEIGHT SIZE   USE    AVAIL  %USE  VAR  PGS 
 0 0.01659  1.00000 17394M  6478M 10915M 37.24 1.00  41 
 1 0.01659  1.00000 17394M  6478M 10915M 37.24 1.00  43 
 2 0.01659  1.00000 17394M  6494M 10899M 37.34 1.00  44 
              TOTAL 52182M 19450M 32731M 37.28          
MIN/MAX VAR: 1.00/1.00  STDDEV: 0.04

2. 添加MONITORS

在 ndoe2 和 node3 添加監控節點。

  1. 修改 mon_initial_membersmon_hostpublic network 配置:
[global]
fsid = a3dd419e-5c99-4387-b251-58d4eb582995
mon_initial_members = node1,node2,node3
mon_host = 192.168.0.131,192.168.0.132,192.168.0.133
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

osd pool default size = 2
public network = 192.168.0.120/24
  1. 推送至其他節點:
$ ceph-deploy --overwrite-conf config push node1 node2 node3
  1. 添加監控節點:
$ ceph-deploy mon add node2 node3
文章轉載自:https://www.cnblogs.com/zengzhihua/p/9829472.html

  1. 查看集群狀態和監控節點:
[zeng@admin-node my-cluster]$ ceph -s
    cluster a3dd419e-5c99-4387-b251-58d4eb582995
     health HEALTH_OK
     monmap e3: 3 mons at {node1=192.168.0.131:6789/0,node2=192.168.0.132:6789/0,node3=192.168.0.133:6789/0}
            election epoch 8, quorum 0,1,2 node1,node2,node3
     osdmap e25: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v3919: 64 pgs, 1 pools, 0 bytes data, 0 objects
            19494 MB used, 32687 MB / 52182 MB avail
                  64 active+clean
                  
[zeng@admin-node my-cluster]$ ceph mon stat
e3: 3 mons at {node1=192.168.0.131:6789/0,node2=192.168.0.132:6789/0,node3=192.168.0.133:6789/0}, election epoch 8, quorum 0,1,2 node1,node2,node3

初始化監控節點,報錯匯總

執行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

修改后繼續執行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
ceph1 ceph2 ceph3都是主機節點

修改后繼續執行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 ceph1
節點二執行:hostnamectl set-hostname ceph2
節點三執行:hostnamectl set-hostname ceph3

修改后繼續執行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)、並收集到了所有密鑰,當前目錄下可以看到下面這些密鑰環

ceph.bootstrap-mds.keyring
ceph.bootstrap-mgr.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-rgw.keyring
ceph.client.admin.keyring


免責聲明!

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



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