02-Ceph 集群部署

本文介绍了如何使用和改造 ceph-ansible-4.0 部署 Ceph Nautilus (14) 版本的集群。内容包括初始化集群节点,详细解析 ceph-ansible 项目,特别是针对 osd 进程 id 顺序问题的代码改造,以及实验测试过程,以确保集群满足特定业务需求。
摘要由CSDN通过智能技术生成

Ceph 集群部署

本次部署会直接使用和改造 ceph-ansible-4.0 工具。由于内部的机器都能访问外网。所以会采用有网络部署方式,直接使用阿里云的 ceph 源。这里主要搭建 Ceph Nautilus 版本 (14) 的集群,将会在该版本上进行操作和实验。

1. 初始化集群节点

这部分完成了一个简单的 playbook ,主要是实现以下几个功能:

  • 拷贝 master 节点的 /etc/hosts 到所有其他主机;
  • 对各个主机按照 /etc/hosts 的名称重命名;
  • 每个主机新建 store 用户以及 store 户组;然后跳板机对所有主机拷贝其密钥实现免密登录;
  • 如果所有机器都能联网,则直接给所有机器添加每分钟执行的定时任务,定时向阿里云同步时钟,确保集群内时钟正常;

2. ceph-ansible 项目介绍

ceph-ansible 是 ceph 官方出品的用于自动化部署 ceph 集群的工具,点此直达官方文档。注意官网说明,有坑误踩:

在这里插入图片描述
:本人曾经在部署时候犯了个错误,浪费了大半天的时间。当时是19年年中,那会 ceph-ansible 的最新是 4.x 版本,ceph 最新为 N 版本。我拿 master 分支代码去部署 ceph mimic 版本,总是失败。纠结了好久后才发现应该选择 ceph-ansible-3.2的版本去部署 mimic 版本,血泪教训啊!

此外,官方文档中对于 ceph 集群的部署有如下说明:

  • 推荐使用 Cephadmin:容器化部署 ceph 集群;
  • ceph-ansible: 基于 ansible 完成的部署 ceph 集群工具,广泛使用中;
  • ceph-deploy:不在维护。不再支持 ceph 14 版本之后以及不支持 CentOS 8;
  • deepsea:基于 saltstack 部署 ceph集群,比较少用;
  • 支持手工部署,能学到更多,有没有兴趣尝试下?

在这里插入图片描述
ceph-ansible 的使用非常简单,按照官方文档,写好部署 mon、mgr、rgw 等的服务机器列表即可。参考如下:

[store@master ceph-ansible-4.0.20-spyinx]$ cat hosts 
[mons]
ceph-[1:3]

[mgrs]
ceph-[1:3]

[osds]
ceph-[1:3]

[rgws]
ceph-[1:2]

如果只是单纯的使用 ceph-ansible-4.0 工具,我们只需要调整 group_vars/all.yml 中的相关配置即可:

[store@master ceph-ansible-4.0.20-spyinx]$ cat group_vars/all.yml
---
############下载包相关的源配置###############
ceph_origin: repository
ceph_repository: community
ceph_mirror: https://mirrors.aliyun.com/ceph/
ceph_stable_key: "{
   { ceph_mirror }}/keys/release.asc"
ceph_stable_release: nautilus
ceph_stable_repo: "{
   { ceph_mirror }}/debian-{
   { ceph_stable_release }}"
ceph_stable_distro_source: bionic

cephx: "true"

############非常重要参数###################
public_network: 192.168.26.0/24
cluster_network: 192.168.26.0/24

mon_host: 192.168.26.120
mon_initial_members: ceph-1,ceph-2,ceph-3
monitor_interface: ens33
#########################################

rbd_cache: "true"
rbd_cache_writethrough_until_flush: "true"
rbd_concurrent_management_ops: 21
rbd_client_directories: true

############创建osd必要的参数###############
osd_objectstore: bluestore
devices:
  - '/dev/sdb'
  - '/dev/sdc'
  - '/dev/sdd'
osd_scenario: lvm
#########################################

mds_max_mds: 1
radosgw_frontend_type: beast
radosgw_thread_pool_size: 512
radosgw_interface: "{
   { monitor_interface }}"
email_address: 2894577759@qq.com
dashboard_enabled: False
dashboard_protocol: http
dashboard_port: 8443
dashboard_admin_user: admin
dashboard_admin_password: admin@123!
grafana_admin_user: admin
grafana_admin_password: admin
grafana_uid: 472
grafana_datasource: Dashboard
grafana_dashboard_version: nautilus
grafana_port: 3000
grafana_allow_embedding: True

直接安装即可,基本上只要网络正常,就不会存在多大问题。注意,如果内网的话,可以把对应的防护墙给关掉。默认的 ceph-ansible 每次跑的时候都会自动把防火墙启起来,有时候会有影响。

[store@master ceph-ansible-4.0.20-spyinx]$ cat roles/ceph-defaults/defaults/main.yml | grep configure_firewall
# If configure_firewall is true, then ansible will try to configure the
configure_firewall: False

在 ceph-ansible 中存在一个问题和我们的业务不兼容,还需要对 ceph-ansible的代码进行改造,使之符合我们的业务需求,请看下面的内容。

3. 改造 ceph-ansible-4.0

我们改造 ceph-ansible-4.0 主要是解决创建 osd 进程的 id 顺序问题,以保证在一台机器上创建的 osd 进程的进程号连续。此外,我们的存储节点编号从1~3,需要根据对应的编号自行生成 osd-id。比如我们有3台虚拟机,分别命名为 ceph-1~ceph-3,每个节点上启动3个osd 进程,分别对应 /dev/sdb/dev/sdc/dev/sdd 三块盘,因此在三台机器的 osd-id 编号需要为:

  • ceph-1: 0~2
  • ceph-2: 3~5
  • ceph-3: 6~8

3.1 代码分析

首先看不做任何操作搭建的 ceph 集群的 osd-id 效果,如下:

在这里插入图片描述
我们看到每个节点上3个 osd 进程的 osd-id 并不连续。这是因为 ceph-ansible 中使用的是如下的模块去完成 osd 的创建:

在这里插入图片描述
可以看到,前面设置 devices 变量时,会执行批量格式化磁盘,创建 osd 进程,因此这里无法对每个 osd 进程设置osd-id 的值。然而前一个的任务则正是单个单个盘进行格式化,正是我们改造的突破口:

在这里插入图片描述
我们先来分析下这个 ceph-volume 模块的内容,代码位置是 library/ceph_volume.py

# ...

def run_module():
    module_args = dict(
        cluster=dict(type='str', required=False, default='ceph'),
        objectstore=dict(type='str', required=False, choices=[
                         'bluestore', 'filestore'], default='bluestore'),
        action=dict(type='str', required=False, choices=[
                    'create', 'zap', 'batch', 'prepare', 'activate', 'list',
                    'inventory'], default='create'),  # noqa 4502
        data=dict(type='str', required=False),
        data_vg=dict(type='str', required=False),
        journal=dict(type='str', required=False),
        journal_vg=dict(type='str', required=False),
        db=dict(type='str', required=False),
        db_vg=dict(type='str', required<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值