私有云数据层 ZData Ceph

私有云架构 规划中,只有3个虚拟机 z-b-data-X 承担了整个虚拟化集群的数据存储,构建分布式存储来存放集群的数据。其中, Ceph Atlas 是主要的虚拟机镜像存储服务。

备注

部署Ceph采用 手工部署Ceph ,本文汇总精要

  • 虚拟机采用 私有云KVM环境 clone方法创建:

    z-b-data-1
    z-b-data-2
    z-b-data-3
    
  • 安装Ceph软件包(在每个节点上执行):

    sudo apt update && sudo apt install ceph ceph-mds
    

z-b-data-1 部署Ceph集群初始化

备注

首先 安装 ceph-mon ,提供Ceph bootstrap

  • 生成一个unique ID,用于fsid:

    cat /proc/sys/kernel/random/uuid
    
  • 按照生成的uuid,配置 /etc/ceph/ceph.conf :

/etc/ceph/ceph.conf
 1[global]
 2fsid = 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17
 3mon initial members = z-b-data-1
 4mon host = 192.168.6.204
 5public network = 192.168.6.0/24
 6auth cluster required = cephx
 7auth service required = cephx
 8auth client required = cephx
 9osd journal size = 1024
10osd pool default size = 3
11osd pool default min size = 2
12osd pool default pg num = 128
13osd pool default pgp num = 128
14osd crush chooseleaf type = 1
15
16[mon.z-b-data-1]
17host = z-b-data-1
18mon addr = 192.168.6.204:6789
19
20[mon.z-b-data-2]
21host = z-b-data-2
22mon addr = 192.168.6.205:6789
23
24[mon.z-b-data-3]
25host = z-b-data-3
26mon addr = 192.168.6.206:6789
27
28[mds.z-b-data-1]
29host = 192.168.6.204
30
31[mds.z-b-data-2]
32host = 192.168.6.205
33
34[mds.z-b-data-3]
35host = 192.168.6.206
  • 创建集群的keyring和monitor密钥:

    sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
    
  • 生成管理员keyring,生成 client.admin 用户并添加用户到keyring:

    sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
    
  • 生成 bootstrap-osd keyring,生成 client.bootstrap-osd 用户并添加用户到keyring:

    sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
    
  • 将生成的key添加到 ceph.mon.keyring

    sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
    sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
    
  • 更改 ceph.mon.keyring 的owner:

    sudo chown ceph:ceph /tmp/ceph.mon.keyring
    
  • 使用主机名、主机IP和FSID生成一个监控映射,保存为 /tmp/monmap

    monmaptool --create --add z-b-data-1 192.168.6.204 --fsid 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17 /tmp/monmap
    
  • 创建一个监控主机到默认数据目录:

    sudo -u ceph mkdir /var/lib/ceph/mon/zdata-z-b-data-1
    
  • 发布监控服务的monitor的map和keyring:

    sudo -u ceph ceph-mon --cluster ceph --mkfs -i z-b-data-1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    
  • 启动monitor(s):

    sudo systemctl start ceph-mon@z-b-data-1
    
  • 检查集群状态:

    sudo ceph -s
    
  • 处理WARN:

    sudo ceph config set mon mon_warn_on_insecure_global_id_reclaim_allowed false
    sudo ceph mon enable-msgr2
    

z-b-data-1 部署mgr

  • 创建服务的认证key:

    sudo mkdir /var/lib/ceph/mgr/ceph-z-b-data-1
    sudo ceph auth get-or-create mgr.z-b-data-1 mon 'allow profile mgr' osd 'allow *' mds 'allow *' | sudo tee /var/lib/ceph/mgr/ceph-z-b-data-1/keyring
    
  • 修订文件属性:

    sudo chown ceph:ceph /var/lib/ceph/mgr/ceph-z-b-data-1/keyring
    sudo chmod 600 /var/lib/ceph/mgr/ceph-z-b-data-1/keyring
    
  • 启动:

    sudo systemctl start ceph-mgr@z-b-data-1
    
  • 安装dashboard插件:

    sudo apt install ceph-mgr-dashboard
    
  • 检查模块:

    sudo ceph mgr module ls
    
  • 激活模块:

    sudo ceph mgr module enable dashboard
    
  • 安装dashboard证书:

    sudo ceph dashboard create-self-signed-cert
    
  • 为了安全部署和移除警告,需要通过一个签名证书(certificate authority, CA)来实现:

    openssl req -new -nodes -x509 \
      -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 \
      -keyout dashboard.key -out dashboard.crt -extensions v3_ca
    
  • 过这个CA来签名 dashboard.crt

    sudo ceph dashboard set-ssl-certificate z-b-data-1 -i dashboard.crt
    sudo ceph dashboard set-ssl-certificate-key z-b-data-1 -i dashboard.key
    
  • 配置完成后检查服务:

    sudo ceph mgr services
    

输出类似:

{
    "dashboard": "https://z-b-data-1:8443/"
}
  • 使用浏览器访问 https://z-b-data-1:8443/ 就可以看到Ceph的管理界面

  • 创建一个管理员角色(密码存放在一个文件 huatai 中):

    sudo ceph dashboard ac-user-create huatai -i huatai administrator
    

现在可以用创建的账号登陆Ceph管理平台了

添加第一个OSD

  • 登陆 z-b-data-1 虚拟机,执行以下命令准备好磁盘分区 500G

    sudo parted /dev/nvme0n1 mklabel gpt
    sudo parted -a optimal /dev/nvme0n1 mkpart primary 0% 500GB
    
  • 登陆第一台服务器 z-b-data-1 创建第一个OSD:

    sudo ceph-volume lvm create --bluestore --data /dev/nvme0n1p1
    

备注

ceph-volume lvm create 会自动完成OSD磁盘初始化,OSD服务启动和systemd配置,所有操作都自动完成,非常简便,无需进一步设置。

  • 完成后检查OSD:

    sudo ceph-volume lvm list
    
  • 检查集群状态:

    sudo ceph -s
    

添加MON(配置3个)

为满足冗余,在 z-b-data-2z-b-data-3 上也部署 ceph-mon

  • 在主机 z-b-data-1 上执行以下命令获取monitor map:

    sudo ceph mon getmap -o /tmp/monmap
    

注意,此时从集群中获得的 monmap 只包含了第一台服务器 z-b-data-1 ,我们还需要添加增加的 z-b-data-2z-b-data-3

monmaptool --add z-b-data-2 192.168.6.205 --fsid 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17 /tmp/monmap
monmaptool --add z-b-data-3 192.168.6.206 --fsid 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17 /tmp/monmap
  • 停止 z-b-data-1ceph-mon 并更新 monitor map:

    sudo systemctl stop ceph-mon@z-b-data-1
    sudo ceph-mon -i z-b-data-1 --inject-monmap /tmp/monmap
    
  • 登陆需要部署monitor的服务器,执行以下命令创建mon默认目录:

    mon-id="z-b-data-2"
    sudo mkdir /var/lib/ceph/mon/ceph-${mon-id}
    
  • 将 192.168.6.204 ( z-b-data-1 ) 管理密钥复制到需要部署 ceph-mon 的配置目录下:

    scp 192.168.6.204:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
    scp 192.168.6.204:/etc/ceph/ceph.conf /etc/ceph/
    
  • 在主机 z-b-data-2 上执行以下命令获取monitors的keyring:

    sudo ceph auth get mon. -o /tmp/ceph.mon.keyring
    
  • 在主机 z-b-data-2 上执行以下命令获取monitor map:

    sudo ceph mon getmap -o /tmp/monmap
    
  • 在主机 z-b-data-2 准备monitor的数据目录,这里必须指定monitor map路径,这样才能够获取监控的quorum信息以及 fsid ,而且还需要提供 monitor keyring的路径:

    sudo ceph-mon --mkfs -i z-b-data-2 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    
  • 启动服务:

    sudo systemctl start ceph-mon@z-b-data-2
    sudo systemctl enable ceph-mon@z-b-data-2
    
  • z-b-data-3 上完成和 z-b-data-2 相同的操作完成 ceph-mon 部署

  • 检查集群状态:

    sudo ceph -s
    

增加OSD(每个节点一个,共3个)

现在Ceph集群只有 z-b-data-1 上有一个OSD运行,不能满足3副本稳定要求。所以,在 z-b-data-2z-b-data-3 上各部署一个 OSD,实现3副本

  • 在两台 z-b-data-2z-b-data-3 复制配置和keyring (前面扩容 ceph-mon 已经做过):

    scp 192.168.6.204:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
    scp 192.168.6.204:/etc/ceph/ceph.conf /etc/ceph/
    
  • z-b-data-2z-b-data-3 准备磁盘:

    sudo parted /dev/nvme0n1 mklabel gpt
    sudo parted -a optimal /dev/nvme0n1 mkpart primary 0% 500GB
    
  • z-b-data-1 (192.68.6.204) /var/lib/ceph/bootstrap-osd/ceph.keyring 复制到部署OSD的服务器对应目录:

    scp 192.168.6.204:/var/lib/ceph/bootstrap-osd/ceph.keyring /var/lib/ceph/bootstrap-osd/
    
  • z-b-data-2z-b-data-3 上创建OSD磁盘卷:

    sudo ceph-volume lvm create --bluestore --data /dev/nvme0n1p1
    
  • 此时检查ceph集群状态,可以看到由于满足了3副本要求,整个集群进入稳定健康状态:

    sudo ceph -s
    

部署MDS(用于虚拟化RBD)

部署 ceph-mds 服务,对外提供POSIX兼容元数据

  • z-b-data-1 上执行:

    cluster=ceph
    id=z-b-data-1
    sudo mkdir -p /var/lib/ceph/mds/${cluster}-${id}
    
  • 创建keyring:

    sudo ceph-authtool --create-keyring /var/lib/ceph/mds/${cluster}-${id}/keyring --gen-key -n mds.${id}
    sudo chown -R ceph:ceph /var/lib/ceph/mds/${cluster}-${id}
    
  • 导入keyring和设置caps:

    sudo ceph auth add mds.${id} osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/${cluster}-${id}/keyring
    
  • 启动服务:

    sudo systemctl start ceph-mds@${id}
    sudo systemctl enable ceph-mds@${id}
    sudo systemctl status ceph-mds@${id}
    
  • 修改每个服务器上 /etc/ceph/ceph.conf 配置,添加:

    [mds.z-b-data-1]
    host = 192.168.6.204
    
    [mds.z-b-data-2]
    host = 192.168.6.205
    
    [mds.z-b-data-3]
    host = 192.168.6.206
    

然后重启每个服务器上 ceph-mon

sudo systemctl restart ceph-mon@`hostname`
  • z-b-data-2z-b-data-3 上执行以下命令将 z-b-data-1 主机上 keyring 复制过来(这里举例是 z-b-data-2 ):

    cluster=ceph
    id=z-b-data-2
    
    sudo mkdir /var/lib/ceph/mds/${cluster}-${id}
    sudo ceph-authtool --create-keyring /var/lib/ceph/mds/${cluster}-${id}/keyring --gen-key -n mds.${id}
    sudo chown -R ceph:ceph /var/lib/ceph/mds/${cluster}-${id}
    
  • 导入keyring和设置caps:

    sudo ceph auth add mds.${id} osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/${cluster}-${id}/keyring
    
  • 启动服务器:

    sudo systemctl start ceph-mds@${id}
    sudo systemctl enable ceph-mds@${id}
    

同样在 z-b-data-3 上完成上述操作

  • 检查状态:

    sudo ceph -s
    
    sudo ceph fs dump