如何在Openstack(CentOS 7)中配置或者构建ceph存储集群
在本文中,我将分享使用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,我们需要安装epel
repo并启用ceph
repo在管理节点上安装最新的可用epel
repo。
# 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页面