Ceph 集群的扩展

时间:2022-03-09 21:43:44

前文讲述了如何创建一个集群,结构如下,本文讲述如何对该集群进行扩展

IP hostname 描述
192.168.40.106 dataprovider 部署管理节点
192.168.40.107 mdsnode MON节点
192.168.40.108 osdnode1 OSD节点
192.168.40.148 osdnode2 OSD节点

扩展主要包括以下几点:

  1. 在mdsnode上添加OSD进程以及CephMetadata服务
  2. 在osdnode1,osdnode2节点上添加Ceph Monitor服务
  3. 添加一个新的OSD节点osdnode3
最终结果如下:
IP hostname 描述
192.168.40.106 dataprovider 部署管理节点
192.168.40.107 mdsnode MDS,MON节点,OSD节点
192.168.40.108 osdnode1 OSD节点,MON节点
192.168.40.148 osdnode2 OSD节点,MON节点
192.168.40.125 osdnode3 OSD节点

扩展MON节点的OSD功能

  • dataprovider上切换到leadorceph用户,并进入/home/leadorceph/my-cluster目录
  • 添加mdsnode节点的OSD服务
    ssh node1

sudo mkdir /var/local/osd2

exit
  • 使用ceph-deploy命令创建osd.
 
ceph-deploy --overwrite-conf osd prepare mdsnode:/var/local/osd2
  • 激活刚才创建的osd
ceph-deploy osd activate mdsnode:/var/local/osd2

当执行完上面的命令后,Ceph会重新调整整个集群,并且会将PG迁移到新的OSD上,可以通过ceph -w发现集群的状态发生了变化

增加一个新的OSD节点

在已有的MON节点上添加完OSD功能后,接下来将在一个全新的osdnode3上增加OSD的功能

  • 修改dataprovider节点的/etc/hosts信息

添加192.168.40.125 osdnode3到其/etc/hosts文件中

    yum install -y ntp ntpdate ntp-doc  
yum install -y openssh-server

sudo useradd -d /home/leadorceph -m leadorceph

sudo passwd leadorceph

echo "leadorceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/leadorceph

sudo chmod 0440 /etc/sudoers.d/leadorceph
使用leadorceph用户的身份执行sudo visudo命令,然后修改Defaults requiretty 为Defaults:ceph !requiretty
  • 在dataprovider节点上将无密码的SSH key拷贝到osdnode3上
ssh-copy-id leadorceph@osdnode3
  • 在dataprovider上安装osdnode3的ceph
 ceph-deploy install osdnode3<br style="background-color: inherit;" />
  • 在dataprovider上创建以及激活osdnode3上的进程
ceph-deploy osd prepare osdnode3:/var/local/osd3
ceph-deploy osd activate osdnode3:/var/local/osd3
  • 拷贝配置文件
    ceph-deploy admin osdnode3

    确保ceph.client.admin.keyring.有正确的权限
    sudo chmod +r /etc/ceph/ceph.client.admin.keyring
  • 检测集群的状态
Ceph 集群的扩展

从上图可以看出,此时pg的数量太少了,每个OSD平均只有16个,所以此时需要添加一些pg
    ceph osd pool set rbd pg_num 100
ceph osd pool set rbd pgp_num 100

添加一个Metadata Server

如果想要使用CephFS,则必须要包含一个metadata server,通过下面的方式来创建metadata 服务:

ceph-deploy mds create mdsnode

添加Ceph Mon

Mon的扩展比较复杂,搞不好会导致整个集群出错,所以建议开始的时候对MON做好规划,尽量不要对其进行修改。

ceph monitor的个数是2n+1(n>=0)个(为奇数),在线上至少3个,只要正常的节点数>=n+1,ceph的paxos算法能保证系统的正常运行。所以,对于3个节点,同时只能挂掉一个。

  • 修改dataprovider上的ceph.conf文件,把要添加的MON节点的信息追加进去,修改如下
    [global]

auth_service_required = cephx

osd_pool_default_size = 2

filestore_xattr_use_omap = true

auth_client_required = cephx

auth_cluster_required = cephx

public_network = 192.168.40.0/24

mon_initial_members = mdsnode,osdnode1,osdnode2

fsid = 1fffdcba-538f-4f0d-b077-b916203ff698

[mon]

mon_addr = 192.168.40.107:6789,192.168.40.108:6789,192.168.40.148:6789

mon_host = mdsnode,osdnode1,osdnode2

debug_mon = 20

[mon.a]

host = mdsnode

addr = 192.168.40.107:6789

[mon.b]

host = osdnode1

addr = 192.168.40.108:6789

[mon.c]

host = osdnode2

addr = 192.168.40.148:6789



  • 执行ceph-deploy mon create osdnode1 osdnode2

当添加完新的节点后,可以通过下面的方式来查询结果

ceph quorum_status --format json-pretty

存储以及检索对象

Ceph客户端通过最新的cluster map以及CRUSH算法决定怎么把一个对象映射到PG中,然后决定如何把该PG映射到OSD上
    
    
  • 添加对象
echo {Test-data} > testfile.txt
rados put test-object-1 testfile.txt --pool=data
  • 验证对象是否添加成功
rados -p data ls
  • 标出对象的位置
ceph osd map data test-object-1

输出的信息可能如下:

osdmap e537 pool 'data' (0) object 'test-object-1' -> pg 0.d1743484 (0.4) -> up [1,0] acting [1,0]
  • 删除对象
rados rm test-object-1 --pool=data

由于集群节点的变化,位置的信息可能会动态的发生变化