如何在Openstack(CentOS 7)中配置或者构建ceph存储集群

时间:2020-01-09 10:37:43  来源:igfitidea点击:

在本文中,我将分享使用CentOS 7配置和构建ceph存储集群的步骤。

Ceph是一个开源的,可伸缩的,软件定义的对象存储系统,它在单个平台上提供对象,块和文件系统存储。 Ceph具有自我修复,自我管理的能力,并且没有单点故障。它是传统存储系统的完美替代品,是云环境的对象存储和块存储的高效存储解决方案。

在开始构建ceph存储集群的步骤之前,让我们了解一些基本术语

Monitor:

Ceph Monitor(ceph-mon)维护集群状态的映射,包括监视器映射,管理器映射,OSD映射和CRUSH映射。这些映射是Ceph守护程序相互协调所需的关键群集状态。监视器还负责管理守护程序和客户端之间的身份验证。通常至少需要三个监视器才能实现冗余和高可用性。

Manager:

Ceph Manager守护进程(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。 Ceph Manager守护程序还托管基于python的插件来管理和公开Ceph集群信息,包括基于Web的仪表板和REST API。通常,至少需要两个管理器才能实现高可用性。

Ceph OSD:

Ceph OSD(对象存储守护程序,ceph-osd)存储数据,处理数据复制,恢复,重新平衡,并通过检查其他Ceph OSD守护程序的心跳来向Ceph监视器和管理器提供一些监视信息。通常至少需要3个Ceph OSD才能实现冗余和高可用性。

我的基础架构详细信息。

我们将构建具有两个节点的ceph存储集群ceph存储,每个存储节点一个OSD和一个管理节点,我们将其中执行大部分任务。因此,总共有三个虚拟机在Oracle VirtualBox上运行,该虚拟机安装在Windows笔记本电脑的Linux服务器上。

以下是我用于存储和管理节点的配置

关于Ceph部署工具

ceph-deploy是部署Ceph集群的官方工具。它的工作原理是使管理节点具有对Ceph集群中所有计算机的SSH访问(无密码);它还包含Ceph配置文件的副本。每次执行部署操作时,它都会使用SSH连接到Ceph节点以执行必要的步骤。

尽管ceph-deploy工具是一种完全受支持的方法,它将为我们提供功能完善的Ceph集群,但是对Ceph的持续管理将变得不那么理想。如果要使用ceph-deploy,则较大规模的Ceph集群也将导致大量管理开销。因此,建议将ceph-deploy限制在测试或者小型生产集群中,尽管我们会看到,编排工具可以快速部署Ceph,并且可能更适合于我们可能需要进行测试的测试环境。不断建立新的Ceph集群。

安装必备的rpm

为了获得构建ceph存储集群所需的rpm,我们需要安装epelrepo并启用cephrepo在管理节点上安装最新的可用epelrepo。

# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

使用以下命令将Ceph存储库添加到/etc/yum.repos.d/ceph.repo的yum配置文件中。将{ceph-stable-release}替换为稳定的Ceph版本(例如,模仿)。

# cat /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

接下来安装ceph-deploy:

# yum -y install ceph-deploy

配置NTP

要构建ceph存储集群,集群中所有节点之间的时间同步非常重要。因此NTP非常重要。安装ntp软件包,并使用离我们最近的服务器配置ntp.conf

# yum -y install ntp

我的服务器池列表如下所示,我在" ntp.conf"中添加了该列表

server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org

下次启动并在两个存储节点上启用ntp守护程序

# systemctl start ntpd
# systemctl enable ntpd

创建ceph用户

ceph-deploy实用程序必须以具有无密码sudo特权的用户身份登录到Ceph节点,因为它需要安装软件和配置文件而不提示输入密码。

我们将在两个存储节点上创建一个新用户" ceph"

# useradd ceph
# echo redhat | passwd --stdin ceph

向" ceph"用户授予sudo权限

# echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
# chmod 0440 /etc/sudoers.d/ceph

启用无密码SSH

由于ceph-deploy不会提示输入密码,因此我们必须在管理节点上生成SSH密钥,并将公用密钥分发给每个Ceph节点。 ceph-deploy将尝试为初始监视器生成SSH密钥。

在管理节点上生成ssh-keys

# ssh-keygen -t rsa

接下来将公钥复制到目标存储节点

# ssh-copy-id ceph@storage1
# ssh-copy-id ceph@storage2

修改" ceph-deploy"管理节点的"~/.ssh/config"文件,以便" ceph-deploy"可以以我们创建的用户身份登录到Ceph节点,而无需指定" --username" {username }每次执行ceph-deploy时。这具有简化ssh和scp使用的额外好处。

# cat ~/.ssh/config
Host storage1
   Hostname storage1
   User ceph
Host storage2
   Hostname storage2
   User ceph

验证连通性

现在,由于设置了较少的密码,现在该验证连接性了

# ssh ceph@storage1
Last login: Sat Nov 17 12:48:38 2016 from 10.0.2.10
[ceph@storage1 ~]$logout
Connection to storage1 closed.
# ssh ceph@storage2
Last login: Sat Nov 17 12:30:31 2016 from 10.0.2.13
[ceph@storage2 ~]$logout
Connection to storage2 closed.

所以一切看起来都不错。

打开防火墙端口

在POC阶段,我们还可以停止并禁用防火墙以确保配置有效。但是在投入生产之前,必须再次启用防火墙

在显示器上

# firewall-cmd --zone=public --add-service=ceph-mon --permanent

在OSD上

# firewall-cmd --zone=public --add-service=ceph --permanent

使用--permanent标志完成对firewalld的配置后,我们可以立即进行更改,而无需重新启动:

# firewall-cmd --reload

处理Selinux

在CentOS和RHEL上,默认情况下SELinux设置为" Enforcecing"。为了简化安装,我们建议将SELinux设置为Permissive或者完全禁用它,并在加强配置之前确保安装和集群正常运行。要将SELinux设置为Permissive,请执行以下操作:

# setenforce 0

确保程序包管理器已安装并启用了优先级/首选项程序包。在CentOS上,我们可能需要安装EPEL。在RHEL上,我们可能需要启用可选存储库。

# yum install yum-plugin-priorities

在管理节点上创建一个目录,以维护ceph-deploy为集群生成的配置文件和密钥。

# mkdir my-cluster

并在此目录中导航,因为" ceph-deploy"工具将在当前工作目录中创建所有必需的配置文件

# cd my-cluster

建立Ceph存储集群的步骤

" ceph-deploy"工具在管理节点上的目录之外运行。

在我们创建的用于保存配置详细信息的目录的管理节点上,使用ceph-deploy执行以下步骤。

创建集群:

# ceph-deploy new storage1 storage2

在当前目录中用ls和cat检查ceph-deploy的输出。我们应该看到一个Ceph配置文件(ceph.conf),一个监视器秘密密钥环(ceph.mon.keyring)和一个新集群的日志文件。

如果我们有多个网络接口,请在Ceph配置文件的global部分下添加公共网络设置。有关详细信息,请参见网络配置参考。

public network = 10.1.2.0/24

在" 10.1.2.0/24"(或者" 10.1.2.0/255.255.255.0")网络中使用IP

从管理节点安装Ceph软件包:

# ceph-deploy install storage1 storage2
<< Output trimmed >>
[storage2][DEBUG ]
[storage2][DEBUG ] Complete!
[storage2][INFO  ] Running command: sudo ceph --version
[storage2][DEBUG ] ceph version 13.2.2 (02899bfda814146b021136e9d8e80eba494e1126) mimic (stable)

说明:

ceph-deploy实用程序将在每个节点上安装Ceph。

从存储节点检查ceph版本

[root@storage1 ~]# ceph --version
ceph version 13.2.2 (02899bfda814146b021136e9d8e80eba494e1126) mimic (stable)

部署初始监视器并收集密钥:

# ceph-deploy mon create-initial
<< Output trimmed >>
[storage1][DEBUG ] fetch remote file
[storage1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --admin-daemon=/var/run/ceph/ceph-mon.storage1.asok mon_status
[storage1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-storage1/keyring auth get client.admin
[storage1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-storage1/keyring auth get client.bootstrap-mds
[storage1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-storage1/keyring auth get client.bootstrap-mgr
[storage1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-storage1/keyring auth get client.bootstrap-osd
[storage1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-storage1/keyring auth get client.bootstrap-rgw
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.client.admin.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-mds.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-mgr.keyring
[ceph_deploy.gatherkeys][INFO  ] keyring 'ceph.mon.keyring' already exists
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-osd.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-rgw.keyring
[ceph_deploy.gatherkeys][INFO  ] Destroy temp directory /tmp/tmpYahdve

完成此过程后,本地目录应具有以下`keyrings':

ceph.client.admin.keyring
ceph.bootstrap-mgr.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.bootstrap-rbd.keyring

使用" ceph-deploy"将配置文件和admin密钥复制到管理节点和Ceph节点,以便我们可以使用ceph CLI,而不必指定监视器地址和" ceph"。

每次执行命令时,client.admin.keyring`。

# ceph-deploy admin storage1 storage2
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy admin storage1 storage2
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['storage1', 'storage2']
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to storage1
[storage1][DEBUG ] connection detected need for sudo
[storage1][DEBUG ] connected to host: storage1
[storage1][DEBUG ] detect platform information from remote host
[storage1][DEBUG ] detect machine type
[storage1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to storage2
[storage2][DEBUG ] connection detected need for sudo
[storage2][DEBUG ] connected to host: storage2
[storage2][DEBUG ] detect platform information from remote host
[storage2][DEBUG ] detect machine type
[storage2][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf

部署管理器守护程序。 (仅对于发光+版本需要):

# ceph-deploy mgr create storage1
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy mgr create storage1
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  mgr                           : [('storage1', 'storage1')]
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : create
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mgr][DEBUG ] Deploying mgr, cluster ceph hosts storage1:storage1
[storage1][DEBUG ] connection detected need for sudo
[storage1][DEBUG ] connected to host: storage1
[storage1][DEBUG ] detect platform information from remote host
[storage1][DEBUG ] detect machine type
[ceph_deploy.mgr][INFO  ] Distro info: CentOS Linux 7.4.1708 Core
[ceph_deploy.mgr][DEBUG ] remote host will use systemd
[ceph_deploy.mgr][DEBUG ] deploying mgr bootstrap to storage1
[storage1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[storage1][WARNIN] mgr keyring does not exist yet, creating one
[storage1][DEBUG ] create a keyring file
[storage1][DEBUG ] create path recursively if it doesn't exist
[storage1][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mgr --keyring /var/lib/ceph/bootstrap-mgr/ceph.keyring auth get-or-creat                                                                                e mgr.storage1 mon allow profile mgr osd allow * mds allow * -o /var/lib/ceph/mgr/ceph-storage1/keyring
[storage1][INFO  ] Running command: sudo systemctl enable ceph-mgr@storage1
[storage1][WARNIN] Created symlink from /etc/systemd/system/ceph-mgr.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].
[storage1][INFO  ] Running command: sudo systemctl start ceph-mgr@storage1
[storage1][INFO  ] Running command: sudo systemctl enable ceph.target

添加OSD:

说明:

出于这些说明的目的,我们假设我们在每个节点中都有一个未使用的磁盘,称为/dev/sdc。确保该设备当前未使用并且不包含任何重要数据。

# ceph-deploy osd create --data /dev/sdc storage1
<< Output trimmed >>
[storage1][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host storage1 is now ready for osd use.
# ceph-deploy osd create --data /dev/sdc storage2
<< Output trimmed >>
[storage2][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host storage2 is now ready for osd use.

这样我们就完成了。

现在,我们从头开始构建了一个可用的Ceph集群,并对其进行了逐步扩展,而无需删除它。接下来,我们将探索可用于定制,填充和管理Ceph集群的许多操作。

检查集群运行状况

[root@storage2 ~]# ceph health
HEALTH_OK

检查OSD和群集状态

[root@storage1 ~]# ceph -s
  cluster:
    id:     454f796c-ed9f-4242-89b4-e0d43f740ffd
    health: HEALTH_OK
  services:
    mon: 2 daemons, quorum storage1,storage2
    mgr: storage1(active)
    osd: 2 osds: 2 up, 2 in
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   2.0 GiB used, 6.0 GiB/8.0 GiB avail
    pgs:

OSD转储

ceph osd dump命令显示了有关集群的大量底层信息。这包括具有其属性的池的列表和OSD的列表,每个OSD包括权重调整,上/下状态等。此命令主要用于异常故障排除情况。

[root@storage2 ~]# ceph osd dump
epoch 15
fsid 454f796c-ed9f-4242-89b4-e0d43f740ffd
created 2016-11-17 13:19:39.387450
modified 2016-11-17 16:14:46.813272
flags sortbitwise,recovery_deletes,purged_snapdirs
crush_version 6
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
require_min_compat_client jewel
min_compat_client jewel
require_osd_release mimic
max_osd 3
osd.0 up   in  weight 1 up_from 11 up_thru 0 down_at 10 last_clean_interval [5,9) 10.0.2.13:6800/1236 10.0.2.13:6801/1236 10.
osd.1 up   in  weight 1 up_from 13 up_thru 0 down_at 12 last_clean_interval [0,0) 10.0.2.14:6800/1079 10.0.2.14:6801/1079 10.

粉碎转储

尽管以不同的JSON格式,此命令显示的信息与ceph osd树几乎相同。

# ceph osd crush dump

OSD列表

ceph osd ls命令仅返回集群中当前部署的OSD编号的列表。

[root@storage2 ~]# ceph osd ls
0
1

获取仲裁状态

[root@storage2 ~]# ceph quorum_status --format json-pretty
{
    "election_epoch": 8,
    "quorum": [
        0,
        1
    ],
    "quorum_names": [
        "storage1",
        "storage2"
    ],
    "quorum_leader_name": "storage1",
    "monmap": {
        "epoch": 1,
        "fsid": "454f796c-ed9f-4242-89b4-e0d43f740ffd",
        "modified": "2016-11-17 13:17:57.395486",
        "created": "2016-11-17 13:17:57.395486",
        "features": {
            "persistent": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "storage1",
                "addr": "10.0.2.13:6789/0",
                "public_addr": "10.0.2.13:6789/0"
            },
            {
                "rank": 1,
                "name": "storage2",
                "addr": "10.0.2.14:6789/0",
                "public_addr": "10.0.2.14:6789/0"
            }
        ]
    }
}

参考:官方Ceph页面