# 一、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)圖

## 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。

## 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 對象存儲
......