5.2 部署Ceph集群(Octopus-15.2.15)


1 Ceph版本選擇

(1) 版本控制說明
版本號具有三個組成部分,xyz。x標識發布周期(例如,Mimic為13)。y標識發布類型:
x.0.z - 開發版本(適用於早期測試人員和勇敢的人)
x.1.z - 發布候選(用於測試集群,勇敢的用戶)
x.2.z - 穩定/錯誤修復版本(針對用戶)
此版本控制約定始於 9.yz Infernalis 循環。在此之前,版本以 0.y 為開發版本,0.yz 為穩定系列。

(2) 版本對應信息
官方文檔: https://docs.ceph.com/en/latest/releases/#active-releases
Ceph目前最新版本16(P版),市面上應用最廣泛的是12(L版),由於部署Ceph需要yum源,國內的阿里源(https://mirrors.aliyun.com/ceph/)
還沒有同步到最新的Ceph版本,所以我這里使用的Ceph版本為15.2.15(O版)穩定版。

ceph版本和發布時間對照表: ceph-release

2 服務器配置建議

(1) Ceph服務器配置推薦
最少三台Centos7系統用於部署Ceph集群,最低硬件配置為2C/2G,另外每台機器最少掛載2塊獨立硬盤(每塊盤20G)。
環境 服務器數量 CPU/內存配置 磁盤配置
測試環境 3 2C/2G 20G * 2
生產環境 3 8C/16G 1T * 2

3 Ceph集群部署規划

主機名 操作系統 IP地址 CPU/內存配置 磁盤配置 服務器角色
ceph-deploy CentOS 7.5.1804 172.16.1.30 2C/2G 系統盤: sda ceph部署、集群控制節點
ceph-node01 CentOS 7.5.1804 172.16.1.31 2C/2G 系統盤: sda OSD盤: sdb、sdc mon * 1、osd * 2、mgr * 1
ceph-node02 CentOS 7.5.1804 172.16.1.32 2C/2G 系統盤: sda OSD盤: sdb、sdc mon * 1、osd * 2、mgr * 1
ceph-node03 CentOS 7.5.1804 172.16.1.33 2C/2G 系統盤: sda OSD盤: sdb、sdc mon * 1、osd * 2、mgr * 1
ceph-node04 CentOS 7.5.1804 172.16.1.34 1C/1G 系統盤: sda 用於ceph集群測試

服務器規划示例圖: ceph-deploy

(1) ceph-deploy
ceph集群部署節點,負責集群整體部署,這里單獨找了一台服務器作為部署節點,也可以復用node節點。

(2) monitor
Ceph監視管理節點,承擔Ceph集群重要的管理任務,負責集群狀態維護,例如存儲池副本數、PG狀態、OSD數量等,至少部署1個(后期可擴容),一般
需要3或5個節點組建高可用(可用節點大於集群節點半數可用)。

(3) osd
Ceph存儲節點,實際負責數據存儲的節點,集群中至少有3個OSD,不少於默認副本數(3),每個OSD對應一塊硬盤。

(4) mgr
MGR是Ceph L版本新增加的組件,主要作用是分擔和擴展monitor的部分功能,減輕monitor的負擔。建議每台monitor節點都部署一個mgr,以實現
相同級別的高可用。使用active/standby模式,多節點部署,可以在master down時,無縫頂替。

4 操作系統初始化配置

在 172.16.1.30-33節點上進行操作

(1) 關閉防火牆
# systemctl stop firewalld
# systemctl disable firewalld

(2) 關閉selinux
# sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久,重啟生效
# setenforce 0 # 臨時生效

(3) 關閉swap
# swapoff -a   # 臨時生效
# sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久,重啟生效

(4) 根據規划設置主機名
1) 172.16.1.30節點
# hostnamectl set-hostname ceph-deploy
2) 172.16.1.31節點
# hostnamectl set-hostname ceph-node01
3) 172.16.1.32節點
# hostnamectl set-hostname ceph-node02
4) 172.16.1.33節點
# hostnamectl set-hostname ceph-node03

(5) 添加主機名與IP對應關系
注: 在172.16.1.30節點上配置即可,因為ceph-deploy工具部署ceph集群依賴於主機名。
# cat >> /etc/hosts << EOF
172.16.1.30 ceph-deploy
172.16.1.31 ceph-node01
172.16.1.32 ceph-node02
172.16.1.33 ceph-node03
EOF

(6) 同步網絡時間和修改時區
# yum install ntpdate
# crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

(7) 設置文件描述符
# ulimit -SHn 65535 # 臨時生效
# cat >> /etc/security/limits.conf << EOF # 永久,退出當前session,再進入生效
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
EOF

(8) 內核參數優化
# cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 20480
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20
EOF
# sysctl -p

(9) 配置免密登錄到ceph-deploy、ceph-node01、ceph-node02、ceph-node03
注: 在172.16.1.30節點上操作
# ssh-keygen -t rsa
# ssh-copy-id root@ceph-deploy
# ssh-copy-id root@ceph-node01
# ssh-copy-id root@ceph-node02
# ssh-copy-id root@ceph-node03

(10) I/O Scheduler,SSD要用noop,SATA/SAS使用deadline(默認)
# echo "deadline" >/sys/block/sd[x]/queue/scheduler
# echo "noop" >/sys/block/sd[x]/queue/scheduler

5 Ceph集群部署

注: 在172.16.1.30節點上操作

(1) Ceph集群部署方式
yum           # 常規的部署方式

ceph-ansible # 官方基於ansible寫的自動化部署工具
https://docs.ceph.com/projects/ceph-ansible/en/latest/

ceph-deploy   # ceph提供的簡易部署工具,可以非常方便的部署ceph集群
https://docs.ceph.com/projects/ceph-deploy/en/latest/

(2) 先創建一個my-cluster目錄,所有的命令都在此目錄下進行
# mkdir -p /root/my-cluster/
# cd /root/my-cluster/

(3) 配置阿里雲yum倉庫
注: 在172.16.1.30-33節點上操作

# cat > /etc/yum.repos.d/ceph.repo << EOF
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/\$basearch
gpgcheck=0
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch
gpgcheck=0
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/SRPMS
gpgcheck=0
EOF

注:如果部署別的版本,將octopus替換為對應版本號即可。

# 配置centos的base源和epel源為阿里源
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum clean all
# yum makecache fast

(4) 安裝ceph-deploy工具
# yum -y install ceph-deploy

(5) 在管理節點和Ceph節點上安裝ceph相關的軟件包(時間較長,耐心等待)
# ceph-deploy install --no-adjust-repos ceph-deploy ceph-node01 ceph-node02 ceph-node03

注:
--no-adjust-repos參數是直接使用本地源,不使用官方默認源。

報錯:
Traceback (most recent call last):
File "/usr/bin/ceph-deploy", line 18, in <module>
   from ceph_deploy.cli import main
File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
   import pkg_resources
ImportError: No module named pkg_resources

報錯解決方法:
# yum install python2-pip -y

(6) 創建集群
1) 開始部署一個集群,生成ceph.conf配置文件、keyring、一個日志文件
# ceph-deploy new ceph-node01 ceph-node02 ceph-node03
# ls -l /root/my-cluster/
total 264
-rw-r--r-- 1 root root   250 Nov 15 17:54 ceph.conf
-rw-r--r-- 1 root root 259037 Nov 15 17:54 ceph-deploy-ceph.log
-rw------- 1 root root     73 Nov 15 17:54 ceph.mon.keyring

2) ceph.conf默認配置參數(其中的參數現在可以修改,例如:mon的數量,后面也可以修改)
# cat /root/my-cluster/ceph.conf
[global]
fsid = 14912382-3d84-4cf2-9fdb-eebab12107d8                   # 集群標識ID
mon_initial_members = ceph-node01, ceph-node02, ceph-node03   # 初始monitor
mon_host = 172.16.1.31,172.16.1.32,172.16.1.33                 # monitor IP地址
auth_cluster_required = cephx                                 # 集群認證
auth_service_required = cephx                                 # 服務認證
auth_client_required = cephx                                   # 客戶端認證

(7) 部署Monitor服務
1) 部署初始monitor成員,即配置ceph.conf文件中mon_initial_members中的monitors,部署直到它們形成表決團,然后搜集keys,並且在這
個過程中報告monitor的狀態
# ceph-deploy mon create-initial
# ls -l /root/my-cluster/
total 540
-rw------- 1 root root   113 Nov 15 17:58 ceph.bootstrap-mds.keyring
-rw------- 1 root root   113 Nov 15 17:58 ceph.bootstrap-mgr.keyring
-rw------- 1 root root   113 Nov 15 17:58 ceph.bootstrap-osd.keyring
-rw------- 1 root root   113 Nov 15 17:58 ceph.bootstrap-rgw.keyring
-rw------- 1 root root   151 Nov 15 17:58 ceph.client.admin.keyring
-rw-r--r-- 1 root root   250 Nov 15 17:54 ceph.conf
-rw-r--r-- 1 root root 301492 Nov 15 17:58 ceph-deploy-ceph.log
-rw------- 1 root root     73 Nov 15 17:54 ceph.mon.keyring

補充: 顯示的部署monitor,如果create后面不跟參數,則默認是mon_initial_members里的主機
# ceph-deploy mon create [HOST] [HOST…]
args: 'add', 'create', 'create-initial', 'destroy'

2) 使用ceph-deploy命令將配置文件ceph.conf和admin key復制到管理節點和Ceph節點的"/etc/ceph"目錄下,以便每次執行ceph CLI命令
無需指定monitor地址和ceph.client.admin.keyring
# ceph-deploy admin ceph-deploy ceph-node01 ceph-node02 ceph-node03
# ls -l /etc/ceph
total 12
-rw------- 1 root root 151 Nov 15 18:01 ceph.client.admin.keyring
-rw-r--r-- 1 root root 250 Nov 15 18:01 ceph.conf
-rw-r--r-- 1 root root 92 Oct 20 22:50 rbdmap
-rw------- 1 root root   0 Nov 15 17:57 tmpLdknSV

(8) 部署OSD服務並添加硬盤
創建6個OSD,分別對應node節點上未使用的獨立硬盤。
# ceph-deploy osd create --data /dev/sdb ceph-node01
# ceph-deploy osd create --data /dev/sdc ceph-node01

# ceph-deploy osd create --data /dev/sdb ceph-node02
# ceph-deploy osd create --data /dev/sdc ceph-node02

# ceph-deploy osd create --data /dev/sdb ceph-node03
# ceph-deploy osd create --data /dev/sdc ceph-node03

(9) 部署MGR服務
# ceph-deploy mgr create ceph-node01 ceph-node02 ceph-node03
注: MGR是Ceph L版本新增加的組件,主要作用是分擔和擴展monitor的部分功能,減輕monitor的負擔。建議每台monitor節點都部署一個mgr,以
實現相同級別的高可用。

(10) 查看ceph集群狀態
# ceph -s
cluster:
   id:     14912382-3d84-4cf2-9fdb-eebab12107d8
   health: HEALTH_OK

services:
   mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03 (age 11m)
   mgr: ceph-node01(active, since 21s), standbys: ceph-node02, ceph-node03
   osd: 6 osds: 6 up (since 3m), 6 in (since 3m)

data:
   pools:   1 pools, 1 pgs
   objects: 0 objects, 0 B
   usage:   6.0 GiB used, 114 GiB / 120 GiB avail
   pgs:     1 active+clean

報錯:
cluster:
id:     14912382-3d84-4cf2-9fdb-eebab12107d8
health: HEALTH_WARN
         mons are allowing insecure global_id reclaim
         Module 'restful' has failed dependency: No module named 'pecan'

報錯解決辦法:
分別在172.16.1.31-33節點執行如下命令:
# pip3 install pecan werkzeug
# ceph config set mon auth_allow_insecure_global_id_reclaim false
# systemctl restart ceph-mgr.target

(11) 查看ceph版本
# ceph -v
ceph version 15.2.15 (2dfb18841cfecc2f7eb7eb2afd65986ca4d95985) octopus (stable)

(12) 至此ceph集群就部署完成了,查看ceph各節點的進信息

(13) 集群健康狀態可能會出現如下警告
cluster:
id:     14912382-3d84-4cf2-9fdb-eebab12107d8
health: HEALTH_WARN
         Reduced data availability: 1 pg inactive, 1 pg peering

原因: 在生產當中,數據量比較大的時候,在加盤的時候,它會做平衡,集群通過crush算法平衡把這些pg對象寫到新盤上,它會做些運算,會把數據
均衡到新加的盤上,等所有的平衡完之后,這個就能給用戶正常提供訪問了,它有兩種狀態,一種是OK,一種是WARN。

ceph集群各節點進程信息圖示:

ceph-cluster-node-process

6 Ceph集群服務管理

ceph集群node節點上操作

(1) 啟動所有守護進程
# systemctl restart ceph.target

(2) 按類型啟動守護進程
# systemctl restart ceph-osd@id
# systemctl restart ceph-mon.target
# systemctl restart ceph-mds.target
# systemctl restart ceph-mgr.target

7 Ceph集群常用管理命令

ceph集群管理節點和node節點都可以操作

組件狀態 命令
POOL 狀態 ceph osd pool ls # 查看存儲池 ceph osd lspools ceph osd pool ls detail
PG 狀態 ceph pg stat ceph pg dump # pg詳情
OSD 狀態 ceph osd stat ceph osd dump #OSD詳情 ceph osd tree #OSD分布 ceph osd df #OSD使用
Monitor狀態 ceph mon stat ceph mon dump #mon詳情 ceph quorum_status #mon的仲裁狀態
集群空間使用 ceph df
查看ceph集群狀態 ceph -s ceph health detail #集群健康狀態 ceph -w # 觀察集群正在發生的事件
mgr的狀態 ceph mgr dump

8 Ceph.conf 配置文件詳解

(1) 默認配置
# cat /root/my-cluster/ceph.conf
[global]
fsid = 14912382-3d84-4cf2-9fdb-eebab12107d8                   # 集群標識ID
mon_initial_members = ceph-node01, ceph-node02, ceph-node03   # 初始monitor
mon_host = 172.16.1.31,172.16.1.32,172.16.1.33                 # monitor IP地址
auth_cluster_required = cephx                                 # 集群認證
auth_service_required = cephx                                 # 服務認證
auth_client_required = cephx                                   # 客戶端認證

(2) 該配置文件采用init文件語法,#和;為注釋,ceph集群在啟動的時候會按照順序加載所有的conf配置文件,配置文件分為以下幾大塊配置
1) global
全局配置
2) osd
osd專用配置,可以使用osd.N,來表示某一個OSD專用配置,N為osd的編號,如0、2、1等
3) mon
mon專用配置,也可以使用mon.A來為某一個monitor節點做專用配置,其中A為該節點的名稱,ceph-monitor-2、ceph-monitor-1等,使
用命令ceph mon dump可以獲取節點的名稱。
4) client
客戶端專用配置

(3) 配置文件可以從多個地方進行順序加載,如果沖突將使用最新加載的配置,其加載順序為
1) $CEPH_CONF 環境變量
2) -c 指定的位置
3) /etc/ceph/ceph.conf
4) ~/.ceph/ceph.conf
5) ./ceph.conf

(4) 配置文件還可以使用一些元變量應用到配置文件,如
1) $cluster
當前集群名
2) $type
當前服務類型
3) $id
進程的標識符
4) $host
守護進程所在的主機名
5) $name
值為$type.$id

(5) ceph.conf 詳細參數
# cat /root/my-cluster/ceph.conf
[global]                                   # 全局設置
fsid = xxxxxxxxxxxxxxx                     # 集群標識ID
mon host = 10.0.1.1,10.0.1.2,10.0.1.3     # monitor IP 地址
auth cluster required = cephx             # 集群認證
auth service required = cephx             # 服務認證
auth client required = cephx               # 客戶端認證
osd pool default size = 3                 # 最小副本數,默認是3
osd pool default min size = 1             # PG處於degraded(降級)狀態不影響其IO能力,min_size是一個PG能接受IO的最小副本數
public network = 10.0.1.0/24               # 公共網絡(monitorIP段)
cluster network = 10.0.2.0/24             # 集群網絡
max open files = 131072                   # 默認0,如果設置了該選項,Ceph會設置系統的max open fds
mon initial members = node1, node2, node3 # 初始monitor (由創建monitor命令而定)
##############################################################
[mon]
mon data = /var/lib/ceph/mon/ceph-$id
mon clock drift allowed = 1               # 默認值0.05,monitor間的clock drift(時鍾偏移)
mon osd min down reporters = 13           # 默認值1,向monitor報告down的最小OSD數
mon osd down out interval = 600           # 默認值300,標記一個OSD狀態為down和out之前ceph等待的秒數
##############################################################
[osd]
osd data = /var/lib/ceph/osd/ceph-$id
osd mkfs type = xfs                       # 格式化系統類型
osd max write size = 512                   # 默認值90,OSD一次可寫入的最大值(MB)
osd client message size cap = 2147483648   # 默認值100,客戶端允許在內存中的最大數據(bytes)
osd deep scrub stride = 131072             # 默認值524288,在Deep Scrub(數據清洗)時候允許讀取的字節數(bytes)
osd op threads = 16                       # 默認值2,並發文件系統操作數
osd disk threads = 4                       # 默認值1,OSD密集型操作例如恢復和Scrubbing時的線程
osd map cache size = 1024                 # 默認值500,保留OSD Map的緩存(MB)
osd map cache bl size = 128               # 默認值50,OSD進程在內存中的OSD Map緩存(MB)
osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier"
# 默認值rw,noatime,inode64,Ceph OSD xfs Mount選項
osd recovery op priority = 2               # 默認值10,恢復操作優先級,取值1-63,值越高占用資源越高
osd recovery max active = 10               # 默認值15,同一時間內活躍的恢復請求數
osd max backfills = 4                     # 默認值10,一個OSD允許的最大backfills數
osd min pg log entries = 30000             # 默認值3000,修建PGLog是保留的最大PGLog數
osd max pg log entries = 100000           # 默認值10000,修建PGLog是保留的最大PGLog數
osd mon heartbeat interval = 40           # 默認值30s,OSD ping一個monitor的時間間隔
ms dispatch throttle bytes = 1048576000   # 默認值104857600,等待派遣的最大消息數
objecter inflight ops = 819200
# 默認值1024,客戶端流控,允許的最大未發送io請求數,超過閥值會堵塞應用io,為0表示不受限
osd op log threshold = 50                 # 默認值5,一次顯示多少操作的log
osd crush chooseleaf type = 0             # 默認值為1,CRUSH規則用到chooseleaf時的bucket的類型
##############################################################
[client]
rbd cache = true                           # 默認值 true,RBD緩存
rbd cache size = 335544320                 # 默認值33554432,RBD緩存大小(bytes)
rbd cache max dirty = 134217728
# 默認值25165824,緩存為write-back時允許的最大dirty(臟)字節數(bytes),如果為0,使用write-through
rbd cache max dirty age = 30               # 默認值1,在被刷新到存儲盤前dirty數據存在緩存的時間(seconds)
rbd cache writethrough until flush = false
# 默認值true,該選項是為了兼容linux-2.6.32之前的virtio驅動,避免因為不發送flush請求,數據不回寫。
# 設置該參數后,librbd會以writethrough的方式執行io,直到收到第一個flush請求,才切換為writeback方式。
rbd cache max dirty object = 2
# 默認值0,最大的Object對象數,默認為0,表示通過rbd cache size計算得到,librbd默認以4MB為單位對磁盤Image進行邏輯切分。
# 每個chunk對象抽象為一個Object;librbd中以Object為單位來管理緩存,增大該值可以提升性能。
rbd cache target dirty = 235544320         # 默認值16777216,開始執行回寫過程的臟數據大小,不能超過rbd_cache_max_dirty

9 Ceph集群生效ceph.conf

默認生成的ceph.conf文件如果需要改動的話需要加一些參數,如果配置文件變化也是通過ceph-deploy進行推送。

(1) 推送修改的ceph.conf文件到所有節點(覆蓋舊的ceph.conf)
# ceph-deploy --overwrite-conf config push ceph-deploy ceph-node01 ceph-node02 ceph-node03

(2) 根據修改的配置文件內容在ceph節點上重啟ceph服務
1) 啟動所有守護進程
# systemctl restart ceph.target
2) 按類型啟動守護進程
# systemctl restart ceph-osd@id
# systemctl restart ceph-mon.target
# systemctl restart ceph-mds.target
# systemctl restart ceph-mgr.target


免責聲明!

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



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