部署ceph集群 (Nautilus版)


參考文檔:

一、ceph簡介

1.1 ceph架構圖

ceph架構圖

1.2 ceph支持的三種接口

  • Object:有原生的API,而且也兼容 Swift 和 S3 的 API;
  • Block:支持精簡配置、快照、克隆;
  • File:Posix 接口,支持快照;

1.3 ceph特點

  • 統一存儲;
  • 無任何單點故障;
  • 數據多份冗余;
  • 存儲容量可擴展;
  • 自動容錯及故障自愈;

1.4 ceph核心組件及其作用

在Ceph存儲集群中,包含了三大角色組件,他們在Ceph存儲集群中表現為3個守護進程,分別是Ceph OSD、Monitor、Managers。當然還有其他的功能組件,但是最主要的是這三個。

  • Ceph OSD: Ceph的OSD(Object Storage Device)守護進程。主要功能包括:存儲數據、副本數據處理、數據恢復、數據回補、平衡數據分布,並將數據相關的一些監控信息提供給Ceph Moniter,以便Ceph Moniter來檢查其他OSD的心跳狀態。一個Ceph OSD存儲集群,要求至少兩個Ceph OSD,才能有效的保存兩份數據。注意,這里的兩個Ceph OSD是指運行在兩台物理服務器上,並不是在一台物理服務器上運行兩個Ceph OSD的守護進程。通常,冗余和高可用性至少需要3個Ceph OSD。
  • Monitor: Ceph的Monitor守護進程,主要功能是維護集群狀態的表組,這個表組中包含了多張表,其中有Moniter map、OSD map、PG(Placement Group) map、CRUSH map。 這些映射是Ceph守護進程之間相互協調的關鍵簇狀態。 監視器還負責管理守護進程和客戶端之間的身份驗證。 通常需要至少三個監視器來實現冗余和高可用性。
  • Managers: Ceph的Managers(Ceph Manager),守護進程(ceph-mgr)負責跟蹤運行時間指標和Ceph群集的當前狀態,包括存儲利用率,當前性能指標和系統負載。 Ceph Manager守護程序還托管基於python的插件來管理和公開Ceph集群信息,包括基於Web的儀表板和REST API。 通常,至少有兩名Manager需要高可用性。
  • MDS: Ceph的MDS(Metadata Server)守護進程,主要保存的是Ceph文件系統的元數據。注意,對於Ceph的塊設備和Ceph對象存儲都不需要Ceph MDS守護進程。Ceph MDS為基於POSIX文件系統的用戶提供了一些基礎命令的執行,比如ls、find等,這樣可以很大程度降低Ceph存儲集群的壓力。

1.5 ceph應用場景

Ceph的應用場景主要由它的架構確定,Ceph提供對象存儲、塊存儲和文件存儲,主要由以下4種應用場景:

  • LIBRADOS應用: 通俗的說,Librados提供了應用程序對RADOS的直接訪問,目前Librados已經提供了對C、C++、Java、Python、Ruby和PHP的支持。它支持單個單項的原子操作,如同時更新數據和屬性、CAS操作,同時有對象粒度的快照操作。它的實現是基於RADOS的插件API,也就是在RADOS上運行的封裝庫。
  • RADOSGW應用: 這類應用基於Librados之上,增加了HTTP協議,提供RESTful接口並且兼容S3、Swfit接口。RADOSGW將Ceph集群作為分布式對象存儲,對外提供服務。
  • RBD應用: 這類應用也是基於Librados之上的,細分為下面兩種應用場景。
    • 第一種應用場景為虛擬機提供塊設備。通過Librbd可以創建一個塊設備(Container),然后通過QEMU/KVM附加到VM上。通過Container和VM的解耦,使得塊設備可以被綁定到不同的VM上。
    • 第二種應用場景為主機提供塊設備。這種場景是傳統意義上的理解的塊存儲。
    • 以上兩種方式都是將一個虛擬的塊設備分片存儲在RADOS中,都會利用數據條帶化提高數據並行傳輸,都支持塊設備的快照、COW(Copy-On-Write)克隆。最重要的是RBD還支持Live migration。
  • CephFS(Ceph文件系統)應用: 這類應用是基於RADOS實現的PB級分布式文件系統,其中引入MDS(Meta Date Server),它主要為兼容POSIX文件系統提供元數據,比如文件目錄和文件元數據。同時MDS會將元數據存儲在RADOS中,這樣元數據本身也達到了並行化,可以大大加快文件操作的速度。MDS本身不為Client提供數據文件,只為Client提供對元數據的操作。當Client打開一個文件時,會查詢並更新MDS相應的元數據(如文件包括的對象信息),然后再根據提供的對象信息直接從RADOS中得到文件數據。

二、部署前的准備

2.1 環境准備

OS hostname ip roles
Centos 7.6 ceph-node-11 192.168.99.11 / 192.168.100.11 ceph-deploy、monitor、Managers、rgw、mds
Centos 7.6 ceph-node-12 192.168.99.12 / 192.168.100.12 monitor、Managers、rgw、mds
Centos 7.6 ceph-node-13 192.168.99.13 / 192.168.100.13 monitor、Managers、rgw、mds

注:每個節點有兩塊硬盤、兩塊網卡以便測試,使用ceph-deploy工具部署ceph存儲。

2.2 系統初始化

注:如果沒有特別注明的,均需在所有節點上執行。

2.2.1 關閉防火牆及SELinux
$ systemctl stop firewalld && systemctl disable firewalld
# 關閉防火牆

$ setenforce 0
$ sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
$ sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux
# 關閉selinux
2.2.2 修改主機名
$ hostnamectl set-hostname HOSTNAME
# 將 HOSTNAME 替換為你實際主機名

$ bash
$ source /etc/profile
# 所有節點執行刷新生效
2.2.3 配置hosts解析記錄
$ cat >> /etc/hosts << EOF
192.168.99.11 ceph-node-11
192.168.99.12 ceph-node-12
192.168.99.13 ceph-node-13
EOF
2.2.4 配置免密登錄

注:僅在ceph-node-11節點上執行即可!

$ ssh-keygen -t rsa -P ''
$ for i in ceph-node-1{1..3};do ssh-copy-id $i;done
2.2.5 調整內核參數
$ cat > /etc/sysctl.conf << EOF
kernel.sysrq = 0
kernel.core_uses_pid = 1
fs.file-max=655360
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.pid_max = 655360
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_ecn = 0
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_max_orphans = 655360
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.route.gc_timeout = 100
# 禁止icmp重定向報文
net.ipv4.conf.all.accept_redirects = 0
# 禁止icmp源路由
net.ipv4.conf.all.accept_source_route = 0
net.core.somaxconn = 65535
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
vm.swappiness = 3
vm.overcommit_memory = 1
vm.max_map_count = 262144
EOF

$ sysctl -p
# 刷新生效
2.2.6 調整文件描述符
$ mv /etc/security/limits.conf{,.bak}
$ cat > /etc/security/limits.conf  << EOF
*                -       nofile          650000
*                -       memlock         unlimited
*                -       stack           655360
*                -       nproc           unlimited
EOF

注:執行此操作后,需要重新打開終端,才可生效。

2.3 配置ntp

2.3.1 配置ntp服務端

ceph-node-11節點執行以下命令:

$ yum -y install ntp
$ systemctl restart ntpd && systemctl enable ntpd
$ ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 202.118.1.130   .PTP.            1 u   54   64    1   15.872    5.698   0.533
*94.130.49.186   195.13.23.5      3 u   53   64    1  247.532   48.687   2.505
 84.16.73.33     .GPS.            1 u   52   64    1  156.447    0.530  11.460
 37.59.63.125    193.190.230.65   2 u   51   64    1  193.511    8.610  11.553
# * 表示同步完成

如果ntp服務長時間沒有同步成功的話!使用以下方案:

讓NTP Server和其自身保持同步,如果在/etc/ntp.conf中定義的server都不可用時,將使用local時間作為ntp服務提供給ntp客戶端。
/etc/ntp.conf文件中(任意位置)添加以下內容:

server 127.127.1.0 fudge
127.127.1.0 stratum 8 
2.3.2 配置其他節點同步控制節點時間
$ mv /etc/ntp.conf{,.bak}
$ cat > /etc/ntp.conf  << EOF
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1 
restrict ::1
server 192.168.99.11 iburst
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
EOF
$ systemctl restart ntpd && systemctl enable ntpd
$ ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*192.168.99.11   94.130.49.186    4 u   30   64    3    0.437   -5.033   3.903

2.4 配置yum源

$ mkdir /etc/yum.repos.d/bak
$ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
# 備份原本的yum文件

$ curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
$ curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 更換為阿里雲源

$ cat > /etc/yum.repos.d/ceph.repo << "EOF"
[ceph-norch]
name=ceph-norch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
enabled=1
gpgcheck=0
[ceph-x86_64]
name=ceph-x86_64 
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
enabled=1
gpgcheck=0
EOF
# 配置ceph-nautilus源

$ yum clean all && yum makecache fast

2.5 安裝ceph基礎工具

注:僅在ceph-node-11節點上執行即可!

$ yum -y install python-setuptools ceph-deploy

$ ceph-deploy --version     # 確保ceph-deploy版本為2.0.1
2.0.1

三、部署ceph集群(Nautilus版)

注:僅在ceph-node-11節點上執行即可!

3.1 部署admin

創建一個Ceph Monitor和三個Ceph OSD守護進程的Ceph存儲集群。集群達到狀態后,通過添加第四個Ceph OSD守護程序,一個元數據服務器和兩個以上的Ceph Monitors對其進行擴展。

$ mkdir ceph-deploy && cd ceph-deploy
# 以下操作均在該目錄下
$ ceph-deploy new --public-network 192.168.99.0/24 \
  --cluster-network 192.168.100.0/24 ceph-node-11
# --public-network:對外網絡,用於客戶端訪問
# --cluster-network:集群內部信息同步網絡
# ceph-node-11:將此節點設置為Monitor節點

上述命令執行后,輸出如下:

部署admin效果圖

$ ls    # 命令執行成功后,會生成配置文件、日志文件、秘鑰文件
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
$ cat ceph.conf        # 生成的配置文件內容如下
# 如果有錯誤之處,可以根據自己實際情況修改
[global]
fsid = b7f51d3e-71ca-42a5-ace9-8785c9c53dcf
public_network = 192.168.99.0/24
cluster_network = 192.168.100.0/24
mon_initial_members = ceph-node-11
mon_host = 192.168.99.11
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

3.2 安裝ceph軟件包

注:該步驟在所有ceph節點上執行!

$ yum -y install ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds
# 不要使用官方提供的 ceph-deploy install 命令進行安裝,它會自己再配置yum源,安裝較慢

3.3 部署monitor節點

$ ceph-deploy mon create-initial
# 輸出信息較多 沒有明顯報錯即可!

3.4 拷貝admin的秘鑰文件

$ ceph-deploy admin ceph-node-11 ceph-node-12 ceph-node-13
# admin后面指定ceph集群中的所有節點
# 沒有明顯報錯即可!

3.5 確認集群狀態

$ ceph -s     # 查看集群狀態
  cluster:
    id:     b7f51d3e-71ca-42a5-ace9-8785c9c53dcf
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-node-11 (age 2m)   # 包含一個monitor
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

使用ceph -s查看ceph狀態如果出現 mon is allowing insecure global_id reclaim可以參考:ceph -s 出現 mon is allowing insecure global_id reclaim

3.6 部署manager

$ ceph-deploy mgr create ceph-node-11
# 將manager守護程序部署在 ceph-node-11

$ ceph -s     # 查看集群狀態
  cluster:
    id:     b7f51d3e-71ca-42a5-ace9-8785c9c53dcf
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph-node-11 (age 4m)
    mgr: ceph-node-11(active, since 30s)    # 新增一個manager節點
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     

3.7 創建三個OSD

每個機器至少需要一塊全新硬盤,確保沒有被格式化過。

$ ceph-deploy osd create --data /dev/sdb ceph-node-11
$ ceph-deploy osd create --data /dev/sdb ceph-node-12
$ ceph-deploy osd create --data /dev/sdb ceph-node-13

$ ceph -s      # 查看集群狀態
  cluster:
    id:     b7f51d3e-71ca-42a5-ace9-8785c9c53dcf
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-node-11 (age 7m)
    mgr: ceph-node-11(active, since 3m)
    osd: 3 osds: 3 up (since 5s), 3 in (since 5s)     # 包含了三個osd
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 297 GiB / 300 GiB avail
    pgs: 

$ ceph osd tree
ID CLASS WEIGHT  TYPE NAME             STATUS REWEIGHT PRI-AFF 
-1       0.29306 root default                                  
-3       0.09769     host ceph-node-11                         
 0   hdd 0.09769         osd.0             up  1.00000 1.00000 
-5       0.09769     host ceph-node-12                         
 1   hdd 0.09769         osd.1             up  1.00000 1.00000 
-7       0.09769     host ceph-node-13                         
 2   hdd 0.09769         osd.2             up  1.00000 1.00000     

3.8 ceph集群擴容

3.8.1 擴容monitor節點

一個Ceph存儲集群至少需要一個Ceph MonitorCeph Manager才能運行。為了獲得高可用性,Ceph存儲群集通常運行多個Ceph Monitor,這樣可以避免單點故障。

Ceph使用Paxos算法,節點數量最好是奇數(即,大於N / 2,其中N是Monitor的數量)才能形成仲裁。盡管這不是必需的。

3.8.1.1 擴容第一個monitor節點
$ ceph-deploy mon add ceph-node-12 
# 添加 ceph-node-12 為monitor節點
# 沒有明顯報錯即可!

$ ceph quorum_status --format json-pretty  # 檢查仲裁狀態
{
    "election_epoch": 8,
    "quorum": [
        0,
        1
    ],
    "quorum_names": [     // 加入仲裁的節點
        "ceph-node-11",
        "ceph-node-12"
    ],
    "quorum_leader_name": "ceph-node-11",      // 當前leader
    "quorum_age": 74,
    "monmap": {
        "epoch": 2,
        "fsid": "b7f51d3e-71ca-42a5-ace9-8785c9c53dcf",
        "modified": "2021-05-06 23:19:03.899203",
        "created": "2021-05-06 23:07:23.786238",
        "min_mon_release": 14,
        "min_mon_release_name": "nautilus",
        "features": {
            "persistent": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune",
                "nautilus"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "ceph-node-11",
                "public_addrs": {
                    "addrvec": [
                        {
                            "type": "v2",
                            "addr": "192.168.99.11:3300",
                            "nonce": 0
                        },
                        {
                            "type": "v1",
                            "addr": "192.168.99.11:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.99.11:6789/0",
                "public_addr": "192.168.99.11:6789/0"
            },
            {
                "rank": 1,
                "name": "ceph-node-12",
                "public_addrs": {
                    "addrvec": [
                        {
                            "type": "v2",
                            "addr": "192.168.99.12:3300",
                            "nonce": 0
                        },
                        {
                            "type": "v1",
                            "addr": "192.168.99.12:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.99.12:6789/0",
                "public_addr": "192.168.99.12:6789/0"
            }
        ]
    }
}

3.8.1.2 擴容第二個monitor節點
$ ceph-deploy mon add ceph-node-13
# 添加 ceph-node-13 為monitor節點
# 沒有明顯報錯即可!

$ ceph quorum_status --format json-pretty  
# 確認三個節點加入仲裁
{
    "election_epoch": 12,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "ceph-node-11",
        "ceph-node-12",
        "ceph-node-13"
    ],
    "quorum_leader_name": "ceph-node-11",
    "quorum_age": 7,
    "monmap": {
        "epoch": 3,
        "fsid": "b7f51d3e-71ca-42a5-ace9-8785c9c53dcf",
        "modified": "2021-05-06 23:23:13.222443",
        "created": "2021-05-06 23:07:23.786238",
        "min_mon_release": 14,
        "min_mon_release_name": "nautilus",
        "features": {
            "persistent": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune",
                "nautilus"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "ceph-node-11",
                "public_addrs": {
                    "addrvec": [
                        {
                            "type": "v2",
                            "addr": "192.168.99.11:3300",
                            "nonce": 0
                        },
                        {
                            "type": "v1",
                            "addr": "192.168.99.11:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.99.11:6789/0",
                "public_addr": "192.168.99.11:6789/0"
            },
            {
                "rank": 1,
                "name": "ceph-node-12",
                "public_addrs": {
                    "addrvec": [
                        {
                            "type": "v2",
                            "addr": "192.168.99.12:3300",
                            "nonce": 0
                        },
                        {
                            "type": "v1",
                            "addr": "192.168.99.12:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.99.12:6789/0",
                "public_addr": "192.168.99.12:6789/0"
            },
            {
                "rank": 2,
                "name": "ceph-node-13",
                "public_addrs": {
                    "addrvec": [
                        {
                            "type": "v2",
                            "addr": "192.168.99.13:3300",
                            "nonce": 0
                        },
                        {
                            "type": "v1",
                            "addr": "192.168.99.13:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.99.13:6789/0",
                "public_addr": "192.168.99.13:6789/0"
            }
        ]
    }
}
3.8.2 檢查ceph集群狀態
$ ceph -s
  cluster:
    id:     b7f51d3e-71ca-42a5-ace9-8785c9c53dcf
    health: HEALTH_OK
 
  services:     #確保有三個monitor
    mon: 3 daemons, quorum ceph-node-11,ceph-node-12,ceph-node-13 (age 71s)
    mgr: ceph-node-11(active, since 12m)
    osd: 3 osds: 3 up (since 9m), 3 in (since 9m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 297 GiB / 300 GiB avail
    pgs: 

$ ceph mon stat     # 也可以單獨查看monitor狀態
e3: 3 mons at {ceph-node-11=[v2:192.168.99.11:3300/0,v1:192.168.99.11:6789/0],ceph-node-12=[v2:192.168.99.12:3300/0,v1:192.168.99.12:6789/0],ceph-node-13=[v2:192.168.99.13:3300/0,v1:192.168.99.13:6789/0]}, election epoch 12, leader 0 ceph-node-11, quorum 0,1,2 ceph-node-11,ceph-node-12,ceph-node-13    

$ ceph mon dump     # dump查看monitor狀態
dumped monmap epoch 3
epoch 3
fsid b7f51d3e-71ca-42a5-ace9-8785c9c53dcf
last_changed 2021-05-06 23:23:13.222443
created 2021-05-06 23:07:23.786238
min_mon_release 14 (nautilus)
0: [v2:192.168.99.11:3300/0,v1:192.168.99.11:6789/0] mon.ceph-node-11
1: [v2:192.168.99.12:3300/0,v1:192.168.99.12:6789/0] mon.ceph-node-12
2: [v2:192.168.99.13:3300/0,v1:192.168.99.13:6789/0] mon.ceph-node-13
3.8.3 擴容manager節點

Ceph Manager守護進程以 active/standby 模式運行。當前active節點宕機后,處於standby狀態的會自動提升為active節點。

$ ceph-deploy mgr create ceph-node-12 ceph-node-13
# 將ceph-node-12、ceph-node-13添加到manager集群
# 沒有明顯報錯即可!

$ ceph -s     # 添加成功后,確認集群狀態
  cluster:
    id:     b7f51d3e-71ca-42a5-ace9-8785c9c53dcf
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-node-11,ceph-node-12,ceph-node-13 (age 6m)
    mgr: ceph-node-11(active, since 18m), standbys: ceph-node-12, ceph-node-13
    osd: 3 osds: 3 up (since 14m), 3 in (since 14m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 297 GiB / 300 GiB avail
    pgs: 

至此,ceph集群部署完成。


免責聲明!

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



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