Ceph 部署

# 一、Ceph 部署環(huán)境準(zhǔn)備

## 1.1 環(huán)境節(jié)點(diǎn)規(guī)劃

### 1.1.1 服務(wù)器列表

| 節(jié)點(diǎn)名? | 主機(jī)名? | IP? | 系統(tǒng)? | 角色? | 版本? |

|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|

| node1? | node1? | 10.40.58.62? | CentOS 7.6? | 管理節(jié)點(diǎn)、? 監(jiān)視器節(jié)點(diǎn)? OSD存儲節(jié)點(diǎn)? mgr 節(jié)點(diǎn)? | luminous? |

| node2? | node2? | 10.40.58.63? | CentOS 7.6? | OSD 存儲節(jié)點(diǎn)八秃、mgr 節(jié)點(diǎn)? | luminous? |

| node3? | node3? | 10.40.58.64? | CentOS 7.6? | OSD 存儲節(jié)點(diǎn)、mgr 節(jié)點(diǎn)? | luminous? |

### 1.1.2 架構(gòu)圖

![圖片](https://uploader.shimo.im/f/kntoa4ZZ1NY36FK6.png!thumbnail)

## 1.2 Ceph 所有節(jié)點(diǎn)上安裝

>所有節(jié)點(diǎn)不包括部署(管理)節(jié)點(diǎn)据途,除非部署(管理)節(jié)點(diǎn)也做 MON 或者 OSD 節(jié)點(diǎn)

### 1.2.1 聲明環(huán)境變量

```

export username="ceph-admin"

export passwd="ceph-admin"

export admin-node="admin-node"

export node1="node1"

export node2="node2"

export node3="node3"

export admin-node_ip="10.40.58.62"

export node1_ip="10.40.58.62"

export node2_ip="10.40.58.63"

export node3_ip="10.40.58.64"

```

### 1.2.2 配置主機(jī)名解析

```

cat >>/etc/hosts<<EOF

$admin-node_ip? ? ?${admin-node}

$node1_ip? ? ?${node1}

$node2_ip? ? ?${node2}

$node3_ip? ? ?${node3}

EOF

```

### 1.2.3 配置 EPEL 源

```

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

cat >/etc/yum.repos.d/epel.repo<<EOF

[epel]

name=Extra Packages for Enterprise Linux 7 - \$basearch

baseurl=http://mirrors.aliyun.com/epel/7/\$basearch

failovermethod=priority

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7


[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 - \$basearch - Debug

baseurl=http://mirrors.aliyun.com/epel/7/\$basearch/debug

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0


[epel-source]

name=Extra Packages for Enterprise Linux 7 - \$basearch - Source

baseurl=http://mirrors.aliyun.com/epel/7/SRPMS

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0

EOF

yum makecache

```

### 1.2.4 配置 Ceph 源

```

cat >/etc/yum.repos.d/ceph.repo<<EOF

[ceph]

name=ceph

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/

gpgcheck=0

priority=1

[ceph-noarch]

name=cephnoarch

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/

gpgcheck=0

priority=1

[ceph-source]

name=Ceph source packages

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS

enabled=0

gpgcheck=1

type=rpm-md

gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc

priority=1

EOF

yum makecache

```

### 1.2.5 安裝 Ceph

>此步相當(dāng)于在管理節(jié)點(diǎn)執(zhí)行 ceph-deploy install --no-adjust-repos ${node1} ${node2} ${node3}

```

yum install -y ceph ceph-radosgw

```

### 1.2.6 安裝 NTP

建議在所有 Ceph 節(jié)點(diǎn)上安裝 NTP 服務(wù)(特別是 Ceph Monitor 節(jié)點(diǎn))澄峰,以免因時鐘漂移導(dǎo)致故障。

Ceph 的守護(hù)進(jìn)程會相互傳遞關(guān)鍵消息呀潭,這些消息必須在達(dá)到超時閥值前處理掉钉迷。如果 Ceph 監(jiān)視器時鐘不同步,就可能出現(xiàn)多種異常情況钠署。例如:

* 守護(hù)進(jìn)程忽略了收到的消息(如時間戳過時了)

* 消息未及時收到時糠聪,超時觸發(fā)得太快或太晚

```

sudo yum install ntp ntpdate ntp-doc

sudo ntpdate cn.ntp.org.cn

sudo systemctl restart ntpd ntpdate && sudo systemctl enable ntpd ntpdate

```

確保在各 Ceph 節(jié)點(diǎn)上啟動了 NTP 服務(wù),并且要使用同一個 NTP 服務(wù)器?谐鼎。

### 1.2.7 創(chuàng)建部署 Ceph 的用戶

ceph-deploy?工具必須以普通用戶登錄 Ceph 節(jié)點(diǎn)舰蟆,且此用戶擁有無密碼使用?sudo?的權(quán)限,因?yàn)樗枰诎惭b軟件及配置文件的過程中狸棍,不必輸入密碼身害。

較新版的?ceph-deploy?支持用?--username?選項提供可無密碼使用?sudo?的用戶名(包括?root?,雖然**不建議**這樣做)草戈。使用?ceph-deploy?--username?{username}?命令時塌鸯,指定的用戶必須能夠通過無密碼 SSH 連接到 Ceph 節(jié)點(diǎn),因?yàn)?ceph-deploy?中途不會提示輸入密碼唐片。

建議在集群內(nèi)的**所有**?Ceph 節(jié)點(diǎn)上給?ceph-deploy?創(chuàng)建一個特定的用戶丙猬,但**不要**用 “ceph” 這個名字。全集群統(tǒng)一的用戶名可簡化操作(非必需)

>Note?從?[Infernalis 版](http://docs.ceph.org.cn/release-notes/#v9-1-0-infernalis-release-candidate)起牵触,用戶名 “ceph” 保留給了 Ceph 守護(hù)進(jìn)程淮悼。如果 Ceph 節(jié)點(diǎn)上已經(jīng)有了 “ceph” 用戶,安裝前必須先刪掉這個用戶揽思。

```

useradd ${username}

echo "${passwd}" | passwd --stdin ${username}

echo "${username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${username}

chmod 0440 /etc/sudoers.d/${username}

```

### 1.2.8 設(shè)置 sudo 不需要終端(TTY)

如果你的 Ceph 節(jié)點(diǎn)默認(rèn)設(shè)置了?requiretty袜腥,執(zhí)行?ceph-deploy?命令時可能會報錯,因?yàn)?ceph-deploy?用之前創(chuàng)建的用戶執(zhí)行 sudo 命令時需要一個終端(TTY)

```

sed -i 's/Default requiretty/#Default requiretty/' /etc/sudoers

```

### 1.2.9 關(guān)閉 SELINUX

```

sed -i "/^SELINUX/s/enforcing/disabled/" /etc/selinux/config

setenforce 0

```

### 1.2.10 配置或關(guān)閉防火墻

Ceph Monitors 之間默認(rèn)使用?6789?端口通信钉汗, OSD 之間默認(rèn)用?6800:7300?這個范圍內(nèi)的端口通信羹令。詳情見[網(wǎng)絡(luò)配置參考](http://docs.ceph.org.cn/rados/configuration/network-config-ref)。 Ceph OSD 能利用多個網(wǎng)絡(luò)連接進(jìn)行與客戶端损痰、monitors福侈、其他 OSD 間的復(fù)制和心跳的通信。

對于 RHEL 7 上的?firewalld?卢未,要對公共域開放 Ceph Monitors 使用的?6789?端口和 OSD 使用的?6800:7300?端口范圍肪凛,并且要配置為永久規(guī)則,這樣重啟后規(guī)則仍有效辽社。例如:

```

sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent

sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent

sudo firewall-cmd --reload

sudo firewall-cmd --zone=public --list-all

```

若使用?iptables?伟墙,要開放 Ceph Monitors 使用的?6789?端口和 OSD 使用的?6800:7300?端口范圍,命令如下:

```

sudo systemctl disable firewalld

sudo systemctl stop?firewalld

sudo iptables -A INPUT -i eth0 -p tcp -s 10.40.0.0/16 --dport 6789 -j ACCEPT

sudo iptables -A INPUT -i eth0 -m multiport -p tcp -s 10.40.0.0/16 --dports 6800:7300 -j ACCEPT

sudo /sbin/service iptables save

```

## 1.3 Ceph 管理節(jié)點(diǎn)上安裝

>你的部署(管理)節(jié)點(diǎn)必須能夠通過 SSH 無密碼地訪問各 Ceph 節(jié)點(diǎn)滴铅。如果?ceph-deploy?以某個普通用戶登錄戳葵,那么這個用戶必須有無密碼使用?sudo?的權(quán)限。

### 1.3.1 安裝 EPEL 源

```

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

cat >/etc/yum.repos.d/epel.repo<<EOF

[epel]

name=Extra Packages for Enterprise Linux 7 - $basearch

baseurl=http://mirrors.aliyun.com/epel/7/$basearch

failovermethod=priority

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7


[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 - $basearch - Debug

baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0


[epel-source]

name=Extra Packages for Enterprise Linux 7 - $basearch - Source

baseurl=http://mirrors.aliyun.com/epel/7/SRPMS

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=0

1

EOF

yum makecache

```

### 1.3.2 安裝 Ceph 源

```

cat >/etc/yum.repos.d/ceph.repo<<EOF

[ceph]

name=ceph

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/

gpgcheck=0

priority=1

[ceph-noarch]

name=cephnoarch

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/

gpgcheck=0

priority=1

[ceph-source]

name=Ceph source packages

baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS

enabled=0

gpgcheck=1

type=rpm-md

gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc

priority=1

EOF

yum makecache

```

### 1.3.3 更新軟件庫并安裝?ceph-deploy

```

sudo yum update && sudo yum install ceph-deploy python-pip

```

### 1.3.4 允許無密碼 SSH 登錄

```

su - ${username}

ssh-keygen # 生成 SSH 密鑰對

ssh-copy-id ${username}@node1 # 把公鑰拷貝到各 Ceph 節(jié)點(diǎn)

ssh-copy-id ${username}@node2

ssh-copy-id ${username}@node3

```

# 二汉匙、Ceph 集群部署

>以下操作在部署(管理)節(jié)點(diǎn)上用之前創(chuàng)建的普通用戶操作

用?ceph-deploy?從管理節(jié)點(diǎn)建立一個 Ceph 存儲集群拱烁,該集群包含三個節(jié)點(diǎn)生蚁,它有一個 Monitor 和兩個 OSD 守護(hù)進(jìn)程。一旦集群達(dá)到?active?+?clean?狀態(tài)戏自,再擴(kuò)展它:增加第三個 OSD 邦投、增加元數(shù)據(jù)服務(wù)器和兩個 Ceph Monitors。

![圖片](https://uploader.shimo.im/f/kntoa4ZZ1NY36FK6.png!thumbnail)

## 2.1 創(chuàng)建集群

### 2.1.1 創(chuàng)建放置配置文件目錄

為獲得最佳體驗(yàn)擅笔,先在管理節(jié)點(diǎn)上創(chuàng)建一個目錄尼摹,用于保存?ceph-deploy?生成的配置文件和密鑰對。ceph-deploy?會把文件輸出到當(dāng)前目錄剂娄,所以請確保在此目錄下執(zhí)行?ceph-deploy?。

```

su - ${username}

mkdir my-cluster

cd my-cluster

```

>如果你是用另一普通用戶登錄的玄呛,不要用?sudo?或在?root?身份運(yùn)行?ceph-deploy?阅懦,因?yàn)樗粫谶h(yuǎn)程主機(jī)上調(diào)用所需的?sudo命令。

### 2.1.2 創(chuàng)建新的集群

在管理節(jié)點(diǎn)上徘铝,進(jìn)入剛創(chuàng)建的放置配置文件的目錄耳胎,執(zhí)行?ceph-deploy?的 new 子命令。此操作

會創(chuàng)建一個默認(rèn)名為 ceph 的新集群惕它,并且生成集群配置文件和 MON 密鑰文件怕午。ceph-deploy new 后面跟幾個 Mon 節(jié)點(diǎn),作為初始的監(jiān)視器法定人(至少一個淹魄,需使用奇數(shù)個郁惜,用偶數(shù)可能導(dǎo)致腦裂)。

并指定幾個主機(jī)作為初始監(jiān)視器法定人

```

ceph-deploy new ${node1}

```

在當(dāng)前目錄下用?ls?和?cat?檢查?ceph-deploy?的輸出甲锡,應(yīng)該有一個 Ceph 配置文件(ceph.conf)兆蕉、一個 MON 密鑰文件(ceph.mon,keyring)和一個日志文件(ceph-deploy-ceph.log)。

### 2.1.3 修改默認(rèn) Ceph 配置文件

```

vim ceph.conf

[global]

......

osd pool default size = 2 # 缺省值是3,達(dá)到 active?+ clean?狀態(tài)的副本數(shù)目

osd pool default min sisz = 1 # 缺省值是0.達(dá)到 degraded 狀態(tài)的副本數(shù)目缤沦,它應(yīng)該小于 osd pool default size 的值虎韵,為存儲池中的object設(shè)置最小副本數(shù)目來確認(rèn)寫操作。即使集群處于 degraded 狀態(tài)缸废,如果最小值不匹配包蓝,Ceph 將不會確認(rèn)寫操作給客戶端。

osd pool default pg num = 333? # 每個存儲池默認(rèn)的pg數(shù)

osd pool default pgp num = 333? # PG和PGP的個數(shù)應(yīng)該保持一致企量。PG和PGP的值很大程度上取決于集群大小测萎。

osd journal size = 1024? ? # 缺省值為0。你應(yīng)該使用這個參數(shù)來設(shè)置日志大小梁钾。日志大小應(yīng)該至少是預(yù)期磁盤速度和 filestore 最大同步時間間隔的兩倍绳泉。如果使用了 SSD 日志,最好創(chuàng)建大于10GB的日志姆泻,并調(diào)大 filestore 的最小零酪、最大同步時間間隔冒嫡。

public network = 10.40.58.0/24 # 公網(wǎng)IP地址

cluster network = 10.40.58.0/24 # 內(nèi)網(wǎng)IP地址

```

### 2.1.4 配置初始 monitor(s)、并收集所有密鑰

```

ceph-deploy mon create-initial

```

完成上述操作后四苇,當(dāng)前目錄里應(yīng)該會出現(xiàn)這些密鑰環(huán)

* ceph.client.admin.keyring

* ceph.bootstrap-osd.keyring

* ceph.bootstrap-mds.keyring

* ceph.bootstrap-rgw.keyring

### 2.1.5 拷貝配置信息到各節(jié)點(diǎn)

用?ceph-deploy?把配置文件和 admin 密鑰拷貝到管理節(jié)點(diǎn)和 Ceph 節(jié)點(diǎn)孝凌,這樣你每次執(zhí)行 Ceph 命令行時就無需指定 monitor 地址和?ceph.client.admin.keyring?了。

```

ceph-deploy admin ${admin-node} ${node1} ${node2} ${node3}

```

>Ceph 各節(jié)點(diǎn) 需要對 ceph.client.admin.keyring 有讀的權(quán)限月腋,才能正常執(zhí)行 Ceph 命令

>以下命令需要在 Ceph 各節(jié)點(diǎn)執(zhí)行

```

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

```

### 2.1.6 配置(增加) OSD

>這里要注意蟀架,老版本的 ceph-deploy prepare/activate 命令已經(jīng)在 L 版中不能使用了

執(zhí)行下列命令列舉某個節(jié)點(diǎn)上的磁盤

```

ceph-deploy disk list node1

```

這里使用 for循環(huán)批量配置,也可以單獨(dú)配置

```

for disk in "/dev/vdc /dev/vdd /dev/vde"

do

? for node in "node1 node2 node3"

? do

? ? ceph-deploy disk zap ${node} ${disk} # 擦凈(刪除分區(qū)表)磁盤榆骚,以用于 Ceph

? ? ceph-deploy osd create ${node} --data ${disk} # 創(chuàng)建 OSD

? done

done

```

### 2.1.7 檢查集群狀態(tài)

```

ceph health

ceph -s

```

等 peering 完成后片拍,集群應(yīng)該達(dá)到?active?+?clean?狀態(tài)

## 2.2? Ceph mgr(Web 界面)

手動部署 ceph mgr (luminous 版) - Terry Tsang - CSDN博客

[https://blog.csdn.net/signmem/article/details/78589724](https://blog.csdn.net/signmem/article/details/78589724)

ceph (luminous 版) zabbix 監(jiān)控 - Terry Tsang - CSDN博客

[https://blog.csdn.net/signmem/article/details/78667569](https://blog.csdn.net/signmem/article/details/78667569)

>luminous 版本新特色?

>由 mgr 提供的一個 Web 界面

>只能夠用于監(jiān)控顯示, 無法進(jìn)行信息更改

>ceph-mgr 對于當(dāng)前 ceph 版本十分重要?

>主要用于管理 pg map 作用?

>當(dāng) ceph-mgr 發(fā)生故障, 相當(dāng)于整個 ceph 集群都會出現(xiàn)嚴(yán)重問題?

>建議在每個 MON 中都創(chuàng)建獨(dú)立的 ceph-mgr (至少 3 個 CEPH MON 節(jié)點(diǎn))?

>只需要在每個 MON 節(jié)點(diǎn)參考下面方法進(jìn)行創(chuàng)建即可 (注, 每個 mgr 需要不同的獨(dú)立的命名)

### 2.2.1 安裝 mgr

在管理節(jié)點(diǎn)執(zhí)行如下命令:

```

ceph-deploy install --mgr --no-adjust-repos node1 node2 node3

```

以上命令等同于在 每個 Ceph mgr 節(jié)點(diǎn)執(zhí)行如下命令:

```

yum -y install ceph-mgr

```

### 2.2.2 新建 mgr 實(shí)例

```

ceph-deploy mgr create ${node1} ${node2} ${node3}

```

### 2.2.3 開啟 dashboard 模塊

在任意 MON 節(jié)點(diǎn) 上執(zhí)行

```

ceph mgr module enable dashboard

```

### 2.2.4 修改 dashboard IP 和端口

```

ceph config-key set mgr/dashboard/server_addr 10.40.58.62

ceph config-key set mgr/dashboard/server_port 6666

sudo systemctl restart ceph-mgr@node1.service # 去指定 mgr 節(jié)點(diǎn)上執(zhí)行

sudo systemctl restart ceph-mgr@node2.service

sudo systemctl restart ceph-mgr@node3.service

```

### 2.2.5 訪問 Web 界面

獲取訪問URL

```

ceph mgr services

```

端口默認(rèn)是7000,如果執(zhí)行了修改 IP 和端口步驟則使用修改后的 IP 和端口訪問

```

http://10.48.58.62:7000

```

M版可設(shè)置帳密訪問方式妓肢,詳見:

[https://www.cnblogs.com/weijie0717/p/8383938.html](https://www.cnblogs.com/weijie0717/p/8383938.html)

## 2.3 刪除集群

### 2.3.1 清除集群配置

如果在某些地方碰到麻煩捌省,想從頭再來,可以用下列命令清除配置:

```

ceph-deploy purgedata ${node1}

ceph-deploy forgetkeys

```

### 2.3.2 卸載并清除集群配置

用下列命令可以連 Ceph 安裝包一起清除:

```

ceph-deploy purge ${node1}

```

如果執(zhí)行了?purge?碉钠,你必須重新安裝 Ceph 纲缓。

### 2.3.3 清理 OSD 磁盤

用于恢復(fù)磁盤原始狀態(tài),待測試

```

umount /var/lib/ceph/osd/ceph-7

rm -rf /var/lib/ceph/osd/ceph-7

ceph-volume lvm zap /dev/vdj

lvremove /dev/ceph-*?

vgs|grep ceph|awk '{print $1}'|xargs vgremove

pvremove /dev/vdj

reboot

或者

parted -s /dev/vdj mklabel gpt mkpart primary xfs 0% 100%?

reboot

mkfs.xfs /dev/vdj -f

```

# 三喊废、Ceph 集群運(yùn)維

## 3.1 刪除 OSD (手動)

### 3.1.1 把 OSD 踢出集群

刪除 OSD 前祝高,它通常是?up?且?in?的,要先把它踢出集群污筷,以使 Ceph 啟動重新均衡工闺、把數(shù)據(jù)拷貝到其他 OSD 。

```

ceph osd out osd.7

```

### 3.1.2 觀察數(shù)據(jù)遷移

一旦把 OSD 踢出(?out?)集群瓣蛀, Ceph 就會開始重新均衡集群斤寂、把歸置組遷出將刪除的 OSD 。你可以用?[ceph](http://docs.ceph.org.cn/rados/operations/monitoring)?工具觀察此過程揪惦。

```

ceph -w

```

你會看到歸置組狀態(tài)從?active+clean?變?yōu)?active,?some?degraded?objects?遍搞、遷移完成后最終回到?active+clean?狀態(tài)。( Ctrl-c 中止)

>注意:?有時候器腋,(通常是只有幾臺主機(jī)的“小”集群溪猿,比如小型測試集群)拿出(?out?)某個 OSD 可能會使 CRUSH 進(jìn)入臨界狀態(tài),這時某些 PG 一直卡在?active+remapped?狀態(tài)纫塌。如果遇到了這種情況诊县,你應(yīng)該把此 OSD 標(biāo)記為?in?,用這個命令:

```

ceph osd in osd.7

```

等回到最初的狀態(tài)后措左,把它的權(quán)重設(shè)置為 0 依痊,而不是標(biāo)記為?out?,用此命令:

```

ceph osd crush reweight osd.7 0

```

執(zhí)行后,你可以觀察數(shù)據(jù)遷移過程胸嘁,應(yīng)該可以正常結(jié)束瓶摆。把某一 OSD 標(biāo)記為?out?和權(quán)重改為 0 的區(qū)別在于,前者性宏,包含此 OSD 的桶群井、其權(quán)重沒變;而后一種情況下毫胜,桶的權(quán)重變了(降低了此 OSD 的權(quán)重)书斜。某些情況下, reweight 命令更適合“小”集群酵使。

### 3.1.3 停止 OSD

把 OSD 踢出集群后荐吉,它可能仍在運(yùn)行,就是說其狀態(tài)為?up?且?out?口渔。刪除前要先停止 OSD 進(jìn)程稍坯。

```

sudo systemctl stop ceph-osd@7.service systemctl start ceph-osd@7.service

```

停止 OSD 后,狀態(tài)變?yōu)?down?搓劫。

### 3.1.4 將OSD 移出集群 CRUSH 圖

刪除 CRUSH 圖的對應(yīng) OSD 條目,它就不再接收數(shù)據(jù)了

```

ceph osd crush remove osd.7

```

### 3.1.5 刪除 OSD 認(rèn)證密鑰

```

ceph auth del osd.7

```

### 3.1.6 刪除 OSD

```

ceph osd rm osd.7

```

### 3.1.7 卸載并刪除 OSD 掛載目錄

通過 mount 命令 查看需要卸載并刪除的目錄

```

mount

umount /var/lib/ceph/osd/ceph-7

rm -rf /var/lib/ceph/osd/ceph-7

```

### 3.1.8 清理 OSD 磁盤

通過? lsblk 命令 查看需要清理的磁盤

```

ceph-volume lvm zap /dev/vdg

```

### 3.1.9 還原 OSD 磁盤

```

lvremove /dev/ceph-*?

vgs|grep ceph|awk '{print $1}'|xargs vgremove

pvremove /dev/vdg

reboot

或者

parted -s /dev/vdg mklabel gpt mkpart primary xfs 0% 100%?

reboot

mkfs.xfs /dev/vdg -f

```

### 3.1.10 配置文件中刪除對應(yīng)條目

登錄到部署(管理)節(jié)點(diǎn)混巧,進(jìn)入放置配置文件的目錄(my-cluster)枪向,刪除 ceph.conf 配置文件對應(yīng)條目

```

[osd.7]

? ? ? ? host = node2

```

然后拷貝配置信息到各節(jié)點(diǎn)

```

ceph-deploy admin ${admin-node} ${node1} ${node2} ${node3}

```

## 3.2 增加 OSD

### 3.2.1 通過 ceph-deploy? 增加 OSD

```

ceph-deploy disk zap node1 /dev/vdc # 擦凈(刪除分區(qū)表)磁盤,以用于 Ceph

ceph-deploy osd create node1 --data /dev/vdc # 創(chuàng)建 OSD

```

### 3.2.2 手動增加

刪除 OSD(手動)的逆向操作咧党,用于 OSD 異常時恢復(fù)(待驗(yàn)證)

```

ceph auth add osd.7

ceph auth add osd.7 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-6/keyring

ceph osd crush add osd.7 0.00999 host=node2

systemctl start ceph-osd@7.service

```

## 3.3 刪除 MON

ceph-deploy 方式

```

ceph-deploy mon destroy node2

```

手動方式

```

ceph mon remove node2

```

## 3.4 增加 MON

### 3.4.1 將 MON 節(jié)點(diǎn) 添加到現(xiàn)有集群

ceph-deploy 方式(管理節(jié)點(diǎn)上執(zhí)行)

```

ceph-deploy mon add node2

```

手動方式( MON 節(jié)點(diǎn)上執(zhí)行)

```

ceph mon add node2 10.40.58.63

```

### 3.4.2 根據(jù)配置文件增加 MON

如果未傳遞任何參數(shù)秘蛔,則默認(rèn)使用 ceph.conf 配置中定義的“mon_initial_members”來部署 MON?

```

ceph-deploy mon create node1 node2 node3

```

### 3.4.3 查看 MON quorum 狀態(tài)信息

```

ceph quorum_status --format json-pretty

```

# 四、Ceph 對象存儲

## 4.1 安裝 Ceph 對象網(wǎng)關(guān)

自從?firefly?(v0.80) 版本開始傍衡,Ceph 對象網(wǎng)關(guān)運(yùn)行在 Civetweb 上(已經(jīng)集成進(jìn)守護(hù)進(jìn)程?ceph-radosgw?)深员,而不再是 Apache 和 FastCGI 之上。使用 Civetweb 簡化了Ceph對象網(wǎng)關(guān)的安裝和配置蛙埂。

### 4.1.1 準(zhǔn)備工作

首先進(jìn)行?環(huán)境檢查 并在你的 Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn)上執(zhí)行安裝前的準(zhǔn)備工作倦畅。特別的,你需要禁用部署 Ceph 集群所用用戶的?requiretty?绣的,同時設(shè)置 SELinux 為?Permissive?以及 Ceph 部署用戶使用?sudo?時無需密碼叠赐。對于 Ceph 對象網(wǎng)關(guān),在生產(chǎn)環(huán)境下你需要開起 Civetweb 所使用的端口屡江。

>注意:?Civetweb默認(rèn)運(yùn)行在?7480?端口上芭概。

### 4.1.2 安裝 Ceph 對象網(wǎng)關(guān)

在管理節(jié)點(diǎn)執(zhí)行如下命令:

```

ceph-deploy install --rgw --no-adjust-repos ${node1} ${node2} ${node3}

```

以上命令等同于在 每個 Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn)執(zhí)行如下命令:

```

yum -y install ceph-radosgw

```

### 4.1.3 拷貝配置信息到對象網(wǎng)關(guān)節(jié)點(diǎn)

用?ceph-deploy?把配置文件和 admin 密鑰拷貝到 Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn),這樣你每次執(zhí)行 Ceph 命令行時就無需指定 monitor 地址和?ceph.client.admin.keyring?了惩嘉。

```

ceph-deploy admin ${node1} ${node2} ${node3}

```

>Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn) 需要對 ceph.client.admin.keyring 有讀的權(quán)限罢洲,才能正常執(zhí)行 Ceph 命令

>以下命令需要在 Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn)執(zhí)行

```

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

```

### 4.1.4 新建網(wǎng)關(guān)實(shí)例

在你的管理節(jié)點(diǎn)的工作目錄下,使用命令在 Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn)上新建一個 Ceph對象網(wǎng)關(guān)實(shí)例文黎。舉例如下:

```

ceph-deploy rgw create ${node1} ${node2} ${node3}

```

在網(wǎng)關(guān)服務(wù)成功運(yùn)行后惹苗,你可以使用未經(jīng)授權(quán)的請求來訪問端口?7480?殿较,就像這樣:

```

http://10.40.58.62:7480

```

如果網(wǎng)關(guān)實(shí)例工作正常,你接收到的返回信息大概如下所示:

```

<?xml version="1.0" encoding="UTF-8"?>

<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">

? ? ? <Owner>

? ? ? <ID>anonymous</ID>

? ? ? <DisplayName></DisplayName>

? </Owner>

? <Buckets>

? </Buckets>

</ListAllMyBucketsResult>

```

### 4.1.5 修改默認(rèn)端口

Civetweb 默認(rèn)運(yùn)行在端口?7480?之上.鸽粉。如果想修改這個默認(rèn)端口 (比如使用端口?80)斜脂,修改你的管理節(jié)點(diǎn)的工作目錄下的 Ceph 配置文件。 添加一節(jié)触机,以?[client.rgw.<gateway-node>]?作為名字帚戳, 使用你的 Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn)的短主機(jī)名替換其中的?<gateway-node>?(如,?hostname?-s).

>注意:?在 0.94 版本中,Ceph 對象網(wǎng)關(guān)不再支持 SSL儡首。你可以設(shè)置一個支持 SSL 的反向代理服務(wù)器來將 HTTPS 請求轉(zhuǎn)為HTTP請求發(fā)給 CivetWeb片任。

在管理節(jié)點(diǎn)的管理目錄下修改,比如, 如果你的主機(jī)名是?node1蔬胯, 在?[global]?節(jié)后添加的信息如下:

```

[client.rgw.node1]

rgw_frontends = "civetweb port=80"

```

將該配置文件推送到你的 Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn)(也包括其他 Ceph 節(jié)點(diǎn)):

```

ceph-deploy --overwrite-conf config push ${node1} ${node2} ${node3}

```

為了使新配置的端口生效对供,需要重啟 Ceph 對象網(wǎng)關(guān):

```

sudo systemctl restart ceph-radosgw@rgw.`hostname -s`

```

最后,需要確保你選擇的端口在節(jié)點(diǎn)的防火墻配置中是開放的 (比如, 端口?80)氛濒。 如果它不是開放的产场,將它設(shè)為開放并重啟防火墻。 如果你是用的是?firewald舞竿,執(zhí)行下面的命令:

```

sudo firewall-cmd --list-all

sudo firewall-cmd --zone=public --add-port 80/tcp --permanent

sudo firewall-cmd --reload

```

若使用的是iptables?京景,執(zhí)行下面的命令:

```

sudo systemctl disable firewalld

sudo systemctl stop?firewalld

sudo iptables -A INPUT -i eth0 -p tcp -s 10.40.0.0/16 --dport 80 -j ACCEPT

sudo /sbin/service iptables save

```

### 4.1.6 開啟 bucket 索引分片功能

Ceph 對象網(wǎng)關(guān)在?index_pool?中存儲 bucket 的索引數(shù)據(jù),默認(rèn)情況下是資源池?.rgw.buckets.index?骗奖。有時用戶喜歡把很多對象(幾十萬到上百萬的對象)存放到同一個 bucket 中确徙。如果你不使用網(wǎng)關(guān)的管理接口來為每個 bucket 的最大對象數(shù)設(shè)置配額,那么當(dāng)一旦用戶存放大量的對象到一個 bucket 中時执桌,bucket 索引的性能會呈現(xiàn)明顯的下降鄙皇。

在0.94版本的 Ceph 中,您可以給 bucket 索引進(jìn)行分片仰挣,這樣在你允許 bucket 中有大量對象時伴逸,能夠有助于防止出現(xiàn)性能瓶頸。設(shè)置項的 “rgw_override_bucket_index_max_shards“ 允許您設(shè)置一個 bucket 的最大分片數(shù)膘壶。它的默認(rèn)值為?0?违柏,這意味著 bucket 索引分片功能在默認(rèn)情況下情況下是關(guān)閉的,也就是“無數(shù)個“”香椎。

開啟 bucket 的索引分片功能漱竖,只需給?rgw_override_bucket_index_max_shards?設(shè)置一個大于?0?的值。

簡單的配置畜伐,只需要在 Ceph 配置文件中加入?rgw_override_bucket_index_max_shards?馍惹。將其添加在?[global]?部分來設(shè)置一個系統(tǒng)層面生效的值。你也可以在 Ceph 配置文件中將它設(shè)置為某一個實(shí)例生效。

在管理節(jié)點(diǎn)的管理目錄下修改万矾,比如, 如果你的主機(jī)名是?node1悼吱, 在?[global]?節(jié)后添加的信息如下:

```

[global]

rgw_override_bucket_index_max_shards? = "1000"

```

將該配置文件推送到你的 Ceph 對象網(wǎng)關(guān)節(jié)點(diǎn)(也包括其他 Ceph 節(jié)點(diǎn)):

```

ceph-deploy --overwrite-conf config push ${node1} ${node2} ${node3}

```

為了使 bucket 索引分片功能生效,需要重啟 Ceph 對象網(wǎng)關(guān):

```

sudo systemctl restart ceph-radosgw@rgw.`hostname -s`

```

>注意:以下命令在L版中不支持良狈,可替代命令待查

態(tài)設(shè)置bucket_index_max_shards參數(shù) | 奮斗的松鼠 - 譚老師 - blog

[http://www.strugglesquirrel.com/2018/06/27/%E5%8A%A8%E6%80%81%E8%AE%BE%E7%BD%AEbucket-index-max-shards%E5%8F%82%E6%95%B0/](http://www.strugglesquirrel.com/2018/06/27/%E5%8A%A8%E6%80%81%E8%AE%BE%E7%BD%AEbucket-index-max-shards%E5%8F%82%E6%95%B0/)

對于異地場景的配置而言后添,為了災(zāi)備每一個 zone 都有一個不同的?index_pool?設(shè)置。為了保持這個參數(shù)在一個 region 的所有 zone 中保持一致薪丁,你可以在 region 的網(wǎng)關(guān)配置中指定?rgw_override_bucket_index_max_shards?遇西。舉例如下:

```

radosgw-admin region get > region.json

```

打開?region.json?的文件,為每一個 zone 編輯?bucket_index_max_shards?的設(shè)置严嗜。保存?region.json?文件并重置 region粱檀。舉例如下:

```

radosgw-admin region set < region.json

```

一旦你更新了你的 region,你需要更新 region map漫玄。舉例如下:

```

radosgw-admin regionmap update --name client.rgw.ceph-client

```

其中的?client.rgw.ceph-client?是網(wǎng)關(guān)用戶的名字茄蚯。

>注意:?通過 CRUSH 規(guī)則集將索引資源池 (如果可以為每一個zone設(shè)置) 映射到基于 SSD的 OSD 上也能夠提升 bucket 索引的性能。

## 4.2 使用 S3 API 訪問 Ceph 對象存儲

### 4.2.1 為 S3 訪問創(chuàng)建 radosgw 用戶

```

radosgw-admin user create --uid=radosgw --display-name=“radosgw"

```

>注意:請把 access_key 和 secret_key 保存下來 睦优,如果忘記可使用:radosgw-admin user info --uid … -k … --name …

### 4.2.2 安裝 s3cmd 客戶端

```

yum install s3cmd -y

```

### 4.2.3 配置 s3cmd 客戶端

```

s3cmd --configure

```

將會在家目錄下創(chuàng)建 .s3cfg 文件 , location 必須使用 US , 不使用 https

編輯 .s3cfg 文件渗常,修改 host_base 和 host_bucket

```

vi .s3cfg

……

host_base = node3:7480

host_bucket = %(bucket).node3:7480

……

```

### 4.2.4 創(chuàng)建存儲桶并放入文件

```

s3cmd mb s3://first-bucket

s3cmd ls

s3cmd put /etc/hosts s3://first-bucket

s3cmd ls s3://first-bucket

```

## 4.3 使用 Swift API 訪問 Ceph 對象存儲

......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市汗盘,隨后出現(xiàn)的幾起案子皱碘,更是在濱河造成了極大的恐慌,老刑警劉巖衡未,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異家凯,居然都是意外死亡缓醋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門绊诲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來送粱,“玉大人,你說我怎么就攤上這事掂之】苟恚” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵世舰,是天一觀的道長动雹。 經(jīng)常有香客問我,道長跟压,這世上最難降的妖魔是什么胰蝠? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上茸塞,老公的妹妹穿的比我還像新娘躲庄。我一直安慰自己,他們只是感情好钾虐,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布噪窘。 她就那樣靜靜地躺著,像睡著了一般效扫。 火紅的嫁衣襯著肌膚如雪倔监。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天荡短,我揣著相機(jī)與錄音丐枉,去河邊找鬼。 笑死掘托,一個胖子當(dāng)著我的面吹牛瘦锹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闪盔,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼弯院,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泪掀?” 一聲冷哼從身側(cè)響起听绳,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎异赫,沒想到半個月后椅挣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塔拳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年鼠证,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靠抑。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡量九,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颂碧,到底是詐尸還是另有隱情荠列,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布载城,位于F島的核電站肌似,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诉瓦。R本人自食惡果不足惜锈嫩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一受楼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呼寸,春花似錦艳汽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瑟捣,卻和暖如春馋艺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迈套。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工捐祠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桑李。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓踱蛀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贵白。 傳聞我的和親對象是個殘疾皇子率拒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359