目錄node
本文描述如何在 CentOS 7 下搭建 Ceph 存儲集羣(STORAGE CLUSTER)。linux
一共4臺機器,其中1個是管理節點,其餘3個是ceph節點:bootstrap
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, node3dom
全部節點:admin-node, node1, node2, node3ssh
# vi /etc/hostname
# vi /etc/hosts
192.168.0.130 admin-node 192.168.0.131 node1 192.168.0.132 node2 192.168.0.133 node3
用 ping 短主機名( hostname -s )的方式確認網絡聯通性。解決掉可能存在的主機名解析問題。tcp
$ ping node1 $ ping node2 $ ping node3
咱們建議在全部 Ceph 節點上安裝 NTP 服務(特別是 Ceph Monitor 節點),以避免因時鐘漂移致使故障,詳情見時鐘。編輯器
# sudo yum install ntp ntpdate ntp-doc
# sudo yum install openssh-server
ceph-deploy 工具必須以普通用戶登陸 Ceph 節點,且此用戶擁有無密碼使用 sudo 的權限,由於它須要在安裝軟件及配置文件的過程當中,沒必要輸入密碼。
建議在集羣內的全部 Ceph 節點上給 ceph-deploy 建立一個特定的用戶,但不要用 「ceph」 這個名字。ide
1) 在各 Ceph 節點建立新用戶工具
# sudo useradd -d /home/zeng -m zeng # sudo passwd zeng
2) 確保各 Ceph 節點上新建立的用戶都有 sudo 權限
# echo "zeng ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/zeng # sudo chmod 0440 /etc/sudoers.d/zeng
由於 ceph-deploy 不支持輸入密碼,你必須在管理節點上生成 SSH 密鑰並把其公鑰分發到各 Ceph 節點。 ceph-deploy 會嘗試給初始 monitors 生成 SSH 密鑰對。
1) 生成 SSH 密鑰對
不要用 sudo 或 root 用戶。提示 「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]-----+
2) 把公鑰拷貝到各 Ceph 節點
$ ssh-copy-id zeng@node1 $ ssh-copy-id zeng@node2 $ ssh-copy-id zeng@node3
完成後, /home/zeng/.ssh/ 路徑下:
id_rsa
、id_rsa.pub
和 known_hosts
;authorized_keys
。3) 修改~/.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
4) 測試ssh可否成功
$ 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
Ceph 的各 OSD 進程經過網絡互聯並向 Monitors 上報本身的狀態。若是網絡默認爲 off ,那麼 Ceph 集羣在啓動時就不能上線,直到你打開網絡。
$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 //確保ONBOOT 設置成了 yes
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
在 CentOS 和 RHEL 上執行 ceph-deploy 命令時可能會報錯。若是你的 Ceph 節點默認設置了 requiretty ,執行
$ sudo visudo
找到 Defaults requiretty 選項,把它改成 Defaults:ceph !requiretty 或者直接註釋掉,這樣 ceph-deploy 就能夠用以前建立的用戶(建立部署 Ceph 的用戶 )鏈接了。
編輯配置文件 /etc/sudoers 時,必須用 sudo visudo 而不是文本編輯器。
$ sudo setenforce 0
要使 SELinux 配置永久生效(若是它的確是問題根源),需修改其配置文件 /etc/selinux/config:
$ sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
即修改 SELINUX=disabled。
$ sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
$ sudo vi /etc/yum.repos.d/ceph.repo
把以下內容粘帖進去,保存到 /etc/yum.repos.d/ceph.repo 文件中。
[Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/ enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/ enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1
$ sudo yum update && sudo yum install ceph-deploy $ sudo yum install yum-plugin-priorities
時間可能比較久,耐心等待。
在 管理節點 下執行以下步驟:
在管理節點上建立一個目錄,用於保存 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
建立集羣並初始化監控節點:
$ ceph-deploy new {initial-monitor-node(s)}
這裏node1是monitor節點,因此執行:
$ ceph-deploy new node1
完成後,my-clster 下多了3個文件:ceph.conf
、ceph-deploy-ceph.log
和 ceph.mon.keyring
。
- 問題:若是出現 "[ceph_deploy][ERROR ] RuntimeError: remote connection got closed, ensure
requiretty
is disabled for node1",執行 sudo visudo 將 Defaults requiretty 註釋掉。
$ 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}
在全部節點上安裝ceph:
$ ceph-deploy install admin-node node1 node2 node3
- 問題:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install epel-release
解決方法:
sudo yum -y remove epel-release
$ 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
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
2) 而後,從管理節點執行 ceph-deploy 來準備 OSD 。
$ ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
3) 最後,激活 OSD 。
$ ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
$ ceph-deploy admin admin-node node1 node2 node3
$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
[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
在 node1 上添加一個 osd.2。
1) 建立目錄
$ ssh node1 $ sudo mkdir /var/local/osd2 $ sudo chmod 777 /var/local/osd2/ $ exit
2) 準備OSD
$ ceph-deploy osd prepare node1:/var/local/osd2
3) 激活OSD
$ ceph-deploy osd activate node1:/var/local/osd2
4) 檢查集羣情況和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
在 ndoe2 和 node3 添加監控節點。
1) 修改 mon_initial_members
、mon_host
和 public 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
2) 推送至其餘節點:
$ ceph-deploy --overwrite-conf config push node1 node2 node3
3) 添加監控節點:
$ ceph-deploy mon add node2 node3
4) 查看集羣狀態和監控節點:
[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