Ceph分布式存储集群环境搭建以及节点扩容流程

Ceph分布式存储集群环境搭建以及节点扩容流程

1.Ceph分布式存储集群安装方式

ceph-deploy:一个快速部署集群的工具,ceph-deploy不再维护,Ceph采用的是Nautilus版本,如果操作系统是CentOS8那么将不支持ceph-deploy方式的搭建。

Cephadm:使用容器和systemd安装和管理Ceph集群,目前比较流行的部署方式,部署Octopus版本的Ceph建议使用此方法。

ceph-ansible:使用Ansible部署和管理 Ceph 集群。

INSTALLATION (MANUAL):手动方式安装,了解部署Ceph的细节。

ROOK:部署和管理在Kubernetes中运行的Ceph集群,同时还支持通过Kubernetes API管理存储资源和配置,如果要与K8S集成,可以使用此种方式。

2.Ceph集群环境规划以及架构图

2.1.Ceph集群规划

由三个节点组成Ceph集群,每一个节点中添加两块网卡,一块网卡用于对外提供访问,一块网卡用于集群内部通信,每一个节点上暂时分别有2块网卡,后期做其他配置时再进行添加。

主机名 Poblic通信IP Cluster通信IP 服务 硬盘
ceph-node-1 192.168.20.20 192.168.30.20 monitor、osd sda、sdb
ceph-node-2 192.168.20.21 192.168.30.21 monitor、osd sda、sdb
ceph-node-3 192.168.20.22 192.168.30.22 monitor、osd sda、sdb

在这里插入图片描述

2.2.Ceph集群部署架构图

1、Ceph-deploy组件用于部署整个Ceph集群,安装在任意节点都可以。

2、Monitor组件在集群中十分重要,我们部署成集群模式,共有三个节点。

3、RGW组件是实现对象存储的重要组件,我们部署成集群模式,三个节点,由于RGW是无状态的WEB服务,因此通过两个Haproxy组件分别负载三个节点,并由Keepalived配置成高可用集群。

4、Mgr组件负责监控服务,也部署成集群模式,共有三个节点。

5、MDS组件是实现Cephfs文件系统的重要组件,因此也部署成集群模式,共有三个节点。

6、OSD组件是实际存储数据的组件,每个节点中都部署了两个OSD服务,后期也会进行扩容。

image-20220410002047623

3.搭建Ceph分布式存储集群

3.1.基础环境配置

所有节点都按如下进行配置。

1)设置主机名并配置Hosts解析

[root@localhost ~]# hostnamectl set-hostname ceph-node-1
[root@localhost ~]# hostnamectl set-hostname ceph-node-2
[root@localhost ~]# hostnamectl set-hostname ceph-node-3

# vim /etc/hosts
192.168.20.20 ceph-node-1
192.168.20.21 ceph-node-2
192.168.20.22 ceph-node-3

2)设置ssh免密登陆

# ssh-keygen 
# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

3)关闭防火墙以及Selinux

# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# sed -ri '/^SELINUX/c SELINUX=disabled' /etc/sysconfig/selinux 
# sed -ri '/^SELINUX/c SELINUX=disabled' /etc/selinux/config 

4)设置ntp时间同步

在Ceph集群中非常注重时间信息,如果时间不同步,那么集群通信就可能会出现问题。

# yum -y install ntp
# crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

3.2.配置Ceph yum源

所有节点都需要配置。

1)使用阿里云镜像源

阿里云镜像源中提供了很多工具的yum源,地址:https://developer.aliyun.com/mirror/

image-20220329235852443

2)配置Centos7的Base与Epel源

# mkdir /etc/yum.repos.d/back
# mv /etc/yum.repos.d/*  /etc/yum.repos.d/back
# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3)配置Ceph的镜像源

需要分布配置noarch与x86_64的镜像源。

image-20220330000049232

# vim /etc/yum.repos.d/ceph.repo
a[noarch]
name=noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
enabled=1
gpgcheck=0

[x86_64]
name=x86_64
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
enabled=1
gpgcheck=0

image-20220330000322025

3.3.安装Ceph-deploy自动化部署工具

我们的Ceph集群采用ceph-deploy的方式进行安装和部署,在集群中任意节点中安装ceph-deploy工具即可。

1.安装以来的python软件
[root@ceph-node-1 ~]# yum -y install python-setuptools

2.安装ceph-deploy
[root@ceph-node-1 ~]# yum -y install ceph-deploy

3.查看ceph-deploy安装的版本
[root@ceph-node-1 ~]# ceph-deploy --version
2.0.1

image-20220402215900229

3.4.在ceph-node-1节点中安装Monitor组件

首先部署一个单节点的Monitor,然后在后面进行扩展。

实际生产环境中,会将一个单独的服务器部署成Monitor节点,由于服务器有限,因此会在一个节点中搭建多个ceph组件。

3.4.1.首先初始化创建一个Ceph集群

1.创建一个目录存放部署各个组件的配置文件
[root@ceph-node-1 ~]# mkdir /data/ceph-deploy/

2.创建一个ceph集群,集群节点数建议是奇数
[root@ceph-node-1 ceph-deploy]# ceph-deploy new --public-network 192.168.20.0/23 --cluster-network 192.168.30.0/23 ceph-node-1 ceph-node-2 ceph-node-3


--public-network:指定公共网络地址,也就是对外提供服务的地址。
--cluster-network:指定集群内部使用的网络地址,集群连接通信通过这个网络进行通信。

image-20220402210618670

3.查看ceph-deploy生成的集群配置文件
[root@ceph-node-1 ceph-deploy]# ll
总用量 12
-rw-r--r--. 1 root root  264 3月  30 21:06 ceph.conf				#配置文件
-rw-r--r--. 1 root root 3038 3月  30 21:06 ceph-deploy-ceph.log		#日志文件,可以查看monitor配置文件的生成过程
-rw-------. 1 root root   73 3月  30 21:06 ceph.mon.keyring			#认证文件
#如果创建集群时没有指定参数,则可以在生成的文件中进行配置。
[root@ceph-node-1 ceph-deploy]# cat ceph.conf 
[global]
fsid = a5ec192a-8d13-4624-b253-5b350a616041
public_network = 192.168.20.0/23
cluster_network = 192.168.30.0/23
mon_initial_members = ceph-node-1, ceph-node-2, ceph-node-3
mon_host = 192.168.20.20,192.168.20.21,192.168.20.22
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

3.4.2.在ceph-node-1节点中部署Monitor组件(顺便将其他组件一并安装完成)

部署Monitor组件有两种方式,一种是通过ceph-deploy install的方式安装,这种方式会自动处理Monitor组件依赖的其他组件,并都进行安装,但是这种方式是从国外的ceph镜像源中拉取,速度非常慢,因此我们选择另外一种,通过yum手动去安装需要的软件包。

由于是使用yum的方式安装ceph monitor组件,因此可以在这一步中直接将ceph集群中各组件全部安装完成,在所有节点中都执行。

分别安装ceph-mon、ceph-osd、ceph-mgr、ceph-radosgw、ceph-mds等组件。

1.安装ceph集群各组件
[root@ceph-node-1 ceph-deploy]# yum -y install ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds
[root@ceph-node-2 ~]# yum -y install ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds
[root@ceph-node-3 ~]# yum -y install ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds

2.安装完成后会在/var/lib/ceph生成文件
[root@ceph-node-1 ceph-deploy]# ll /var/lib/ceph/
总用量 0
drwxr-x---. 2 ceph ceph  6 6月  30 2021 bootstrap-mds
drwxr-x---. 2 ceph ceph  6 6月  30 2021 bootstrap-mgr
drwxr-x---. 2 ceph ceph  6 6月  30 2021 bootstrap-osd
drwxr-x---. 2 ceph ceph  6 6月  30 2021 bootstrap-rbd
drwxr-x---. 2 ceph ceph  6 6月  30 2021 bootstrap-rbd-mirror
drwxr-x---. 2 ceph ceph  6 6月  30 2021 bootstrap-rgw
drwxr-x---. 3 ceph ceph 20 3月  30 21:46 crash
drwxr-x---. 2 ceph ceph  6 6月  30 2021 mds
drwxr-x---. 2 ceph ceph  6 6月  30 2021 mgr
drwxr-x---. 3 ceph ceph 25 3月  30 21:52 mon
drwxr-x---. 2 ceph ceph  6 6月  30 2021 osd
drwxr-xr-x. 2 root root  6 6月  30 2021 radosgw
drwxr-x---. 2 ceph ceph  6 3月  30 21:53 tmp

3.查看ceph的版本
[root@ceph-node-1 ceph-deploy]# ceph -v
ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautilus (stable)

3.4.3.初始化Monitor组件

初始化Monitor组件会在/etc/ceph目录中生成一些配置文件和一些key文件,并启动Monitor组件。

1.初始化Monitor
[root@ceph-node-1 ceph-deploy]# ceph-deploy mon create-initial 
#初始化的时候会对集群中所有的节点都进行操作

2.查看生成的配置文件
#配置文件
[root@ceph-node-1 ceph-deploy]# ll /etc/ceph/
总用量 8
-rw-r--r--. 1 root root 264 3月  30 21:53 ceph.conf
-rw-r--r--. 1 root root  92 6月  30 2021 rbdmap
-rw-------. 1 root root   0 3月  30 21:52 tmpdpAGYU
#key文件
[root@ceph-node-1 ceph-deploy]# ll
总用量 48
-rw-------. 1 root root   113 3月  30 21:53 ceph.bootstrap-mds.keyring
-rw-------. 1 root root   113 3月  30 21:53 ceph.bootstrap-mgr.keyring
-rw-------. 1 root root   113 3月  30 21:53 ceph.bootstrap-osd.keyring
-rw-------. 1 root root   113 3月  30 21:53 ceph.bootstrap-rgw.keyring
-rw-------. 1 root root   151 3月  30 21:53 ceph.client.admin.keyring
-rw-r--r--. 1 root root   264 3月  30 21:06 ceph.conf
-rw-r--r--. 1 root root 18651 3月  30 21:53 ceph-deploy-ceph.log
-rw-------. 1 root root    73 3月  30 21:06 ceph.mon.keyring

3.查看ceph进程,此时每个节点都会起到mon组件
[root@ceph-node-1 ceph-deploy]# ps aux | grep ceph
root       25265  0.0  0.4 189132  9172 ?        Ss   21:46   0:00 /usr/bin/python2.7 /usr/bin/ceph-crash
ceph       26057  0.2  1.7 503888 33728 ?        Ssl  21:53   0:00 /usr/bin/ceph-mon -f --cluster ceph --id ceph-node-1 --setuser ceph --setgroup ceph

image-20220402210912768

3.4.4.推送生成的Monitor admin认证文件

Monitor组件初始化完成后,还需要将admin的认证文件推送到节点的/etc/ceph目录下,否则无法执行ceph命令查看集群信息。

推送完成后,在将ceph集群的不安全模式禁用,否则查看集群信息时会提示“mon允许不安全的global_id回收”。

1.推送admin认证文件
[root@ceph-node-1 ceph-deploy]# ceph-deploy admin ceph-node-1 ceph-node-2 ceph-node-3

#如果现在想要在其他的节点中执行ceph命令,则可以将admin文件推送到其他的节点。

2.查看推送过来的文件
[root@ceph-node-1 ceph-deploy]# ll /etc/ceph/
总用量 12
-rw-------. 1 root root 151 3月  30 22:00 ceph.client.admin.keyring
-rw-r--r--. 1 root root 264 3月  30 22:00 ceph.conf
-rw-r--r--. 1 root root  92 6月  30 2021 rbdmap
-rw-------. 1 root root   0 3月  30 21:52 tmpdpAGYU

image-20220402211039755

3.禁用ceph的不安全模式
[root@ceph-node-1 ceph-deploy]# ceph config set mon auth_allow_insecure_global_id_reclaim false
#如果不关闭的话,查看集群信息的时候会提示mon is allowing insecure global_id reclaim

4.查看ceph集群的信息
[root@ceph-node-1 ceph-deploy]# ceph -s
  cluster:
    id:     a5ec192a-8d13-4624-b253-5b350a616041			#集群的ID
    health: HEALTH_OK									  #集群的健康状态
 
  services:
    mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 3m)					#monitor组件的节点
    mgr: no daemons active								  #mgr节点,现在换没有mgr
    osd: 0 osds: 0 up, 0 in								  #osd节点
 
  data:													#资源池信息
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     

3.5.在ceph-node-1节点中安装Manager组件

Manager组件是监控组件,在集群中任意节点上部署即可,部署一台即可。

**注意:**ceph-deploy命令生成的只是配置文件和启动该组件,执行该命令前需要实际的将ceph-mgr包安装好。

1.安装manager组件
[root@ceph-node-1 ceph-deploy]# ceph-deploy mgr create ceph-node-1

2.查看mgr组件启动的进程
[root@ceph-node-1 ceph-deploy]# ps aux | grep mgr
postfix     2034  0.0  0.1  89900  4280 ?        S    20:41   0:00 qmgr -l -t unix -u
ceph       13607  4.5  3.2 1037572 127724 ?      Ssl  21:13   0:02 /usr/bin/ceph-mgr -f --cluster ceph --id ceph-node-1 --setuser ceph --setgroup ceph

3.再次查看集群的状态
[root@ceph-node-1 ceph-deploy]# ceph -s
  cluster:
    id:     a5ec192a-8d13-4624-b253-5b350a616041
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 3m)
    mgr: ceph-node-1(active, since 12s)					#可以看到mgr已经有一个节点了,并且处于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:  

在这里插入图片描述

3.6.在集群中部署OSD组件

OSD组件是真正存储数据的组件,需要与磁盘关联,每一个OSD组件需要关联至少一块磁盘。

OSD关联数据盘有两种方式:

  • --data指定数据盘,数据直接落入盘中。
  • --journal配合ssd磁盘,首先将数据写入journal,然后在刷到磁盘里,起到一个加速的作用。

OSD组件在前面已经安装过了,下面来配置OSD,先将服务器中的一块磁盘加入到OSD中,后期会进行扩容。

1.将ceph-node-1节点的/dev/sdb磁盘加入到osd中
[root@ceph-node-1 ceph-deploy]# ceph-deploy osd create ceph-node-1 --data /dev/sdb

2.将ceph-node-2节点的/dev/sdb磁盘加入到osd中
[root@ceph-node-1 ceph-deploy]# ceph-deploy osd create ceph-node-2 --data /dev/sdb

3.将ceph-node-3节点的/dev/sdb磁盘加入到osd中
[root@ceph-node-1 ceph-deploy]# ceph-deploy osd create ceph-node-3 --data /dev/sdb

image-20220402221531673

OSD创建过程中,会自动配置指定的磁盘,并且启动OSD程序。

image-20220330225158557

4.集群创建完OSD之后再次查看集群的状态
[root@ceph-node-1 ceph-deploy]# ceph -s
  cluster:
    id:     a5ec192a-8d13-4624-b253-5b350a616041
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 7m)
    mgr: ceph-node-1(active, since 4m)
    osd: 3 osds: 3 up (since 23s), 3 in (since 23s)			#显示集群中当下有3个OSD
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 27 GiB / 30 GiB avail
    pgs: 
    
5.查看OSD的详细信息
[root@ceph-node-1 ceph-deploy]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME            STATUS REWEIGHT PRI-AFF 
-1       0.02939 root default                                 
-3       0.00980     host ceph-node-1                         
 0   hdd 0.00980         osd.0            up  1.00000 1.00000 
-5       0.00980     host ceph-node-2                         
 1   hdd 0.00980         osd.1            up  1.00000 1.00000 
-7       0.00980     host ceph-node-3                         
 2   hdd 0.00980         osd.2            up  1.00000 1.00000 
 #会显示出每一个节点中的OSD信息

4.Ceph集群扩容节点

主要对Monitor组件和Manager组件进行扩容,在前面我们只针对ceph-node-1节点进行了部署,在实际生产中是远远不够的。

Monitor组件极其重要,集群的状态都保存在Monitor中,Monitor是通过Paxos算法选举的,最好是奇数个。

Monitor集群组建完成后,会自动的进行一个仲裁选举,选举出一个Leader节点。
Manager组件是集群中的监控组件,使用的模式是active/standby,只有一个节点提供工作,其余节点处于备用状态,当主节点挂掉后,备用节点进行选举然后接替主节点的工作。

4.1.扩容Monitor集群节点

4.1.1.在Monitor集群中添加新的节点

1.在ceph-node-2和ceph-node-3中部署Monitor组件
#在前面已经安装

2.将ceph-node-2和ceph-node-3节点加入到集群中
[root@ceph-node-1 ceph-deploy]# ceph-deploy mon add ceph-node-2
[root@ceph-node-1 ceph-deploy]# ceph-deploy mon add ceph-node-3

3.推送admin配置文件
[root@ceph-node-1 ceph-deploy]# ceph-deploy admin ceph-node-2 ceph-node-3

image-20220402222135246

4.查看集群状态
[root@ceph-node-1 ceph-deploy]# ceph -s
  cluster:
    id:     a5ec192a-8d13-4624-b253-5b350a616041
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 11m)
    mgr: ceph-node-1(active, since 8m)
    osd: 3 osds: 3 up (since 4m), 3 in (since 4m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 27 GiB / 30 GiB avail
    pgs:  

4.1.2.使用ceph命令管理Monitor组件

4.1.2.1.查看Monitor集群的详细信息
[root@ceph-node-1 ceph-deploy]# ceph quorum_status --format json-pretty
{
    
    
    "election_epoch": 8,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [						#monitor的节点列表,可以看到有三个
        "ceph-node-1",
        "ceph-node-2",
        "ceph-node-3"
    ],
    "quorum_leader_name": "ceph-node-1",						#Monitor集群中的Leader节点是ceph-node-1
    "quorum_age": 718,
    "monmap": {
    
    											#monmap信息
        "epoch": 1,
        "fsid": "a5ec192a-8d13-4624-b253-5b350a616041",
        "modified": "2022-04-02 22:09:57.238072",
        "created": "2022-04-02 22:09:57.238072",
        "min_mon_release": 14,
        "min_mon_release_name": "nautilus",
        "features": {
    
    
            "persistent": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune",
                "nautilus"
            ],
            "optional": []
        },
        "mons": [									#在mons中可以看到各节点使用monitor节点的一个地址
            {
    
    
                "rank": 0,
                "name": "ceph-node-1",							
                "public_addrs": {
    
    
                    "addrvec": [
                        {
    
    
                            "type": "v2",
                            "addr": "192.168.20.20:3300",
                            "nonce": 0
                        },
                        {
    
    
                            "type": "v1",
                            "addr": "192.168.20.20:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.20.20:6789/0",
                "public_addr": "192.168.20.20:6789/0"
            },
            {
    
    
                "rank": 1,
                "name": "ceph-node-2",
                "public_addrs": {
    
    
                    "addrvec": [
                        {
    
    
                            "type": "v2",
                            "addr": "192.168.20.21:3300",
                            "nonce": 0
                        },
                        {
    
    
                            "type": "v1",
                            "addr": "192.168.20.21:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.20.21:6789/0",
                "public_addr": "192.168.20.21:6789/0"
            },
            {
    
    
                "rank": 2,
                "name": "ceph-node-3",
                "public_addrs": {
    
    
                    "addrvec": [
                        {
    
    
                            "type": "v2",
                            "addr": "192.168.20.22:3300",
                            "nonce": 0
                        },
                        {
    
    
                            "type": "v1",
                            "addr": "192.168.20.22:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.20.22:6789/0",
                "public_addr": "192.168.20.22:6789/0"
            }
        ]
    }
}
4.1.2.2.查看Monitor集群的状态
[root@ceph-node-1 ceph-deploy]# ceph mon stat
e1: 3 mons at {ceph-node-1=[v2:192.168.20.20:3300/0,v1:192.168.20.20:6789/0],ceph-node-2=[v2:192.168.20.21:3300/0,v1:192.168.20.21:6789/0],ceph-node-3=[v2:192.168.20.22:3300/0,v1:192.168.20.22:6789/0]}, election epoch 8, leader 0 ceph-node-1, quorum 0,1,2 ceph-node-1,ceph-node-2,ceph-node-3

可以看到集群中的Leader节点是谁、仲裁节点是谁,以及各节点的地址。
leader表示主节点、quorum表示仲裁节点
4.1.2.3.查看Monitor集群地址的详细信息
[root@ceph-node-1 ceph-deploy]# ceph mon dump
epoch 1
fsid a5ec192a-8d13-4624-b253-5b350a616041
last_changed 2022-04-02 22:09:57.238072
created 2022-04-02 22:09:57.238072
min_mon_release 14 (nautilus)
0: [v2:192.168.20.20:3300/0,v1:192.168.20.20:6789/0] mon.ceph-node-1
1: [v2:192.168.20.21:3300/0,v1:192.168.20.21:6789/0] mon.ceph-node-2
2: [v2:192.168.20.22:3300/0,v1:192.168.20.22:6789/0] mon.ceph-node-3
dumped monmap epoch 1

4.2.扩容Manager集群节点

Manager节点扩容与Monitor组件不同,Manager组件扩容直接创建新节点即可。

1.在新节点中安装Manager组件
#前面已安装

2.创建新的manager节点,可以同时指定多个
[root@ceph-node-1 ceph-deploy]# ceph-deploy mgr create ceph-node-2 ceph-node-3

image-20220402222429638

3.查看集群的状态
[root@ceph-node-1 ceph-deploy]# ceph -s
  cluster:
    id:     a5ec192a-8d13-4624-b253-5b350a616041
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 14m)
    mgr: ceph-node-1(active, since 10m), standbys: ceph-node-2, ceph-node-3			#可以看到mgr节点有3个,ceph-node-1为主节点,其余为备用节点
    osd: 3 osds: 3 up (since 7m), 3 in (since 7m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 27 GiB / 30 GiB avail
    pgs:    

猜你喜欢

转载自blog.csdn.net/weixin_44953658/article/details/124779471