第五篇: Ceph集群运维

常用操作

本部分介绍了 Ceph 集群的常用操作,包括进程的起停、集群的监控、用户管理、MDS/MON/OSD 的增加和删除、存储池(pool)的操作、修改集群的配置,以及 Crushmap 的管理、修改 Monitor 的 IP 等操作。

1 MDS增删

1.1 新增元数据服务器(metadata server)

  1. 创建一个存储mds的数据节点:/var/lib/ceph/mds/ceph-{$id},id表示元数据服务器的名称,可根据需求自行定义。

    例如:

    sudo mkdir /var/lib/ceph/mds/ceph-`hostname`
    sudo chown ceph:ceph -R /var/lib/ceph/mds/ceph-`hostname`
    
  2. 修改ceph.conf,增加MDS

    [mds.{$id}]
    host = {hostname}
    

    例如:

    [mds.ceph-1]
    host = ceph-1
    
  3. 如果使用了CephX验证,则创建验证密钥;否则调过此步骤

    sudo ceph auth get-or-create mds.{$id} mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > /var/lib/ceph/mds/ceph-{$id}/keyring
    
  4. 启动mds服务

    sudo cp /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/ceph-mds@`hostname`.service 
    sudo systemctl start ceph-mds@`hostname`
    sudo systemctl enable ceph-mds@`hostname`
    
  5. 查看mds服务的状态

    ceph mds stat
    
    cephfs-1/1/1 up  {0=ceph-1=up:active}, 2 up:standby
    

1.2 删除元数据服务器(metadata server)

注意:在删除元数据服务器之前一定要确保有剩余的备选元数据服务器为ceph客户端提供服务。如果没有的话,那么需要先新增一个元数据服务器(安照上述方法),然后再进行删除。已确保cephfs服务能够正常被使用

如果有备用的元数据服务器,则可以执行下述的删除操作:

  1. 停止元数据服务

    ceph mds fail <mds name>
    

    例如:

    ceph mds fail ceph-1
    
  2. 删除元数据服务的目录

    sudo rm -rf /var/lib/ceph/mds/ceph-{$id}
    

    例如:

    sudo rm -rf /var/lib/ceph/mds/ceph-ceph-1
    

2 OSD增删

2.1 新增osd(不增加新机器)

2.1.1 创建osd进程相关的disk

使用fdisk工具格式化磁盘,生成osd进程的磁盘以及journal磁盘

sudo umount /disk3  #先将挂载在/dev/sde上的disk3 umount掉
sudo fdisk /dev/sde
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p(显示该磁盘的分区情况)
Command (m for help): d(删除该磁盘的所有分区)
Command (m for help): g(将磁盘的文件格式变成gpt)
Command (m for help): n(创建新分区,创建两个,一个为journal(10G),一个为data)
Command (m for help): w(保存退出)

2.1.2 创建osd(step by step)

2.1 添加一个新osd,id可以省略,ceph会自动使用最小可用整数,第一个osd从0开始
ceph osd create {id}

ceph osd create
3

2.2 初始化osd目录

创建osd.3目录,目录名格式{cluster-name}-{id}
mkdir /var/lib/ceph/osd/{cluster-name}-{id}

sudo mkdir /var/lib/ceph/osd/ceph-3

2.3 挂载osd.0的数据盘/dev/sde2

sudo mkfs.xfs /dev/sdb2
sudo mount /dev/sdc2 /var/lib/ceph/osd/ceph-3

2.4 初始化osd数据目录


sudo ceph-osd -i 3 --mkfs --mkkey
--mkkey要求osd数据目录为空

这会创建osd.0的keyring /var/lib/ceph/osd/ceph-0/keyring

初始化后,默认使用普通文件/var/lib/ceph/osd/ceph-3/journal作为osd.3的journal分区,普通文件作为journal分区性能不高,若只是测试环境,可以跳过更改journal分区这一步骤

2.5 创建journal

生成journal分区,一般选ssd盘作为journal分区,这里使用ssd的/dev/sde1分区作为journal

使用fdisk工分出磁盘/dev/sde1,

sudo mkfs.xfs /dev/sde1
sudo rm -f /var/lib/ceph/osd/ceph-3/journal 
查看分区对应的partuuid, 找出/dev/sdb1对应的partuuid
sudo blkid
sudo ln -s /dev/disk/by-partuuid/b3897364-8807-48eb-9905-e2c8400d0cd4 /var/lib/ceph/osd/ceph-3/journal

sudo chown ceph:ceph -R /var/lib/ceph/osd/ceph-3
sudo chown ceph:ceph /var/lib/ceph/osd/ceph-3/journal
sudo ceph-osd --mkjournal -i 3
sudo chown ceph:ceph /var/lib/ceph/osd/ceph-3/journal

2.6 注册osd.{id},id为osd编号,默认从0开始
sudo ceph auth add osd.{id} osd ‘allow *’ mon ‘allow profile osd’ -i /var/lib/ceph/osd/ceph-{id}/keyring

sudo ceph auth add osd.3 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-3/keyring

2.7 加入crush map
ceph osd crush add-bucket {hostname} host

sudo ceph osd crush add-bucket `hostname` host

2.8 然后把osd节点移动到默认的root default下面

sudo ceph osd crush move `hostname` root=default

2.9 添加osd.3到CRUSH map中的m1节点下面,加入后,osd.3就能够接收数据
ceph osd crush add osd.{id} 0.4 root=sata rack=sata-rack01 host=sata-node5

sudo ceph osd crush add osd.3 1.7 root=default host=`hostname`

0.4为此osd在CRUSH map中的权重值,它表示数据落在此osd上的比重,是一个相对值,一般按照1T磁盘比重值为1来计算,这里的osd数据盘1.7,所以值为1.7

此时osd.0状态是downinin表示此osd位于CRUSH map,已经准备好接受数据,down表示osd进程运行异常,因为我们还没有启动osd.0进程

2.10 启动ceph-osd进程

需要向systemctl传递osd的id以启动指定的osd进程,如下,我们准备启动osd.3进程
systemctl start ceph-osd@{id} id表示osd编号,从数字0开始

sudo cp /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/[email protected]
sudo systemctl start ceph-osd@3
sudo systemctl enable ceph-osd@3

上面就是添加osd.3的步骤,可以查看集群状态 ceph -s。

2.2 新增osd(增加新机器)

2.2.1 配置环境

2.1 修改yum源

这里将yum源修改成aliyun的源,指令如下:

curl http://mirrors.aliyun.com/repo/Centos-7.repo >/etc/yum.repos.d/CentOS-Base.repo
curl http://mirrors.aliyun.com/repo/epel-7.repo >/etc/yum.repos.d/epel.repo 
sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo

2.2 添加ceph源

sudo vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
[ceph-source]
name=ceph-source
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS/
gpgcheck=0

2.3 安装软件

sudo yum install ceph ntp ntpdate ntp-doc openssh-server

验证ceph是否正确安装

ceph -v
ceph version 12.2.10 (177915764b752804194937482a39e95e0ca3de94) luminous (stable)

2.4 关闭防火墙

sudo sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
sudo setenforce 0
sudo systemctl stop firewalld 
sudo systemctl disable firewalld

2.2.2 新建osd(同步骤2.1)

2.3 删除osd

要想缩减集群尺寸或替换硬件,可在运行时删除 OSD 。在 Ceph 里,一个 OSD 通常是一台主机上的一个 ceph-osd 守护进程、它运行在一个硬盘之上。如果一台主机上有多个数据盘,你得逐个删除其对应 ceph-osd 。通常,操作前应该检查集群容量,看是否快达到上限了,确保删除 OSD 后不会使集群达到 near full 比率。

警告: 删除 OSD 时不要让集群达到 full ratio 值,删除 OSD 可能导致集群达到或超过 full ratio值。

1、停止需要剔除的 OSD 进程,让其他的 OSD 知道这个 OSD 不提供服务了。停止 OSD 后,状态变为 down

ssh {osd-host}
sudo stop ceph-osd id={osd-num}

2、将 OSD 标记为 out 状态,这个一步是告诉 mon,这个 OSD 已经不能服务了,需要在其他的 OSD 上进行数据的均衡和恢复了。

sudo ceph osd out {osd-num}

执行完这一步后,会触发数据的恢复过程。此时应该等待数据恢复结束,集群恢复到 HEALTH_OK 状态,再进行下一步操作。

3、删除 CRUSH Map 中的对应 OSD 条目,它就不再接收数据了。你也可以反编译 CRUSH Map、删除 device 列表条目、删除对应的 host 桶条目或删除 host 桶(如果它在 CRUSH Map 里,而且你想删除主机),重编译 CRUSH Map 并应用它。

sudo ceph osd crush remove osd.{osd-num}

该步骤会触发数据的重新分布。等待数据重新分布结束,整个集群会恢复到 HEALTH_OK 状态。

4、删除 OSD 认证密钥:

ceph auth del osd.{osd-num}

5、删除 OSD 。
ceph osd rm {osd-num}

ceph osd rm 1

6、卸载 OSD 的挂载点。

sudo umount /var/lib/ceph/osd/$cluster-{osd-num}

7、登录到保存 ceph.conf 主拷贝的主机。

ssh {admin-host}
cd /etc/ceph
vim ceph.conf

8、从 ceph.conf 配置文件里删除对应条目。

[osd.1]
host = {hostname}

9、从保存 ceph.conf 主拷贝的主机,把更新过的 ceph.conf 拷贝到集群其他主机的 /etc/ceph 目录下。

如果在 ceph.conf 中没有定义各 OSD 入口,就不必执行第 7 ~ 9 步。

所有的osd节点下线删除之后:
ceph osd crush remove {hostname} 将主机条目从crush map中删除
ceph -s 等待集群变为active+clean状态

3 MON增删

3.1 增加MON节点

在ceph.conf文件中增加mon节点信息

mon initial members = hostname1,hostname2,new_mon_hostname
mon host = IP1,IP2,new_mon_ip

创建mon进程

host_name=`hostname`
sudo ceph mon getmap -o /tmp/monmap
sudo rm -rf /var/lib/ceph/mon/ceph-$host_name
sudo ceph-mon -i $host_name --mkfs --monmap /tmp/monmap
sudo chown -R ceph:ceph /var/lib/ceph/mon/ceph-$host_name/

启动mon进程

sudo cp /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/ceph-mon@$host_name.service
sudo systemctl start ceph-mon@$host_name
sudo systemctl enable ceph-mon@$host_name

4 客户端挂载

4.1 kernel client挂载

  • 挂载之前需要下载安装ceph-common
sudo yum install ceph-common
  • 挂载命令如下:
mount -t ceph <monitor1-host-name>:6789,<monitor2-host-name>:6789,<monitor3-host-name>:6789:/ <mount-point>

Example:

sudo mkdir -p /gruntdata/lipeibao_ceph
sudo mount -t ceph 11.188.199.210:6789:/ /mnt/mycephfs

4.2 ceph-fuse挂载

  • 挂载之前需要下载安装ceph-common,ceph-fuse
sudo yum install ceph-common ceph-fuse
  • 将monitor上的ceph配置文件拷贝到该客户端

Example:

sudo vim /etc/ceph/ceph.conf
[global]
fsid = $genuuid
mon initial members = hostname1
mon host = IP1,IP2,IP3
rbd default features = 1
auth_cluster_required = none
auth_service_required = none
auth_client_required = none
public network = 11.165.0.0/16
cluster network = 11.165.0.0/16
osd journal size = 1024
osd pool default size = 2 
osd pool default min size = 1
osd pool default pg num = 1000 
osd pool default pgp num = 1000
osd crush chooseleaf type = 1
mon_max_pg_per_osd = 200

[mon]
mon allow pool delete = true

[mds.hostname1]
host = hostname1
  • 在管理机或者monitor机器上创建客户端用户及权限、密钥

    ceph auth get-or-create client.<client-name/id> mon 'allow r' mds 'allow r, allow rw path=' osd 'allow rw pool=' -o <file_name>
    
    1. client.:用于指定客户端的名称或者id
    2. mon ‘allow r’: 指定客户端访问mon的权限,只读
    3. mds ‘allow r, allow rw path=’: 指定客户端访问mds的权限,只读,并指定读写的路径
    4. osd ‘allow rw pool=’: 指定客户端访问osdd权限,读写,并指定读写的pool
    5. : 客户端的配置信息存放文件

    Example:

    $ ceph auth get-or-create client.1 mon 'allow r' mds 'allow r, allow rw path=/' osd 'allow rw pool=data' -o ceph.client.1.keyring
    [client.1]
    	key = AQACNoZXhrzqIRAABPKHTach4x03JeNadeQ9Uw==
    

5 客户端剔除

登录主mds服务器, 查看所有连接的客户端信息:

sudo ceph daemon mds.`hostname` session ls 

找到需要剔除的客户端id,然后执行下述命令:

sudo ceph tell mds.`hostname` client evict id=客户端id

这是客户端地址会存在blcaklist中,如果要重新挂载,需要将其从blacklist中删除:

sudo ceph osd blcaklist ls

删除对应的address

sudo ceph osd blacklist rm address

6 ceph集群参数调整

6.1 pool 参数的查看

  1. 查看指定pool的相关参数
ceph osd pool get {pool_name} pg_num 
  1. 设置指定pool的相关参
    set 操作需要慎重,否则会影响集群的服务
ceph osd pool set {pool_name} pg_num 1024

7 osd集群数据balance处理

7.1 balancer 插件

ceph集群在使用过程中,经常会遇到osd存储分布不均衡的情况,如下图是我们线上ceph集群的osd分布情况:
可参考:https://docs.ceph.com/docs/mimic/mgr/balancer/
具体操作如下:
checklist:
** 1. all buckets should use straw2:**

ceph osd getcrushmap -o crush.map; crushtool -d crush.map | grep straw; rm -f crush.map
253
tunable straw_calc_version 1
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2
  alg straw2

如果存在非straw2,update

ceph osd crush set-all-straw-buckets-to-straw2

2. minimum client version is jewel or higher:

ceph osd dump|grep require_min_compat_client;
  require_min_compat_client jewel

Ceph distribution balancer:
Activate balancing:

ceph mgr module ls
ceph mgr module enable balancer
ceph balancer on
ceph balancer mode crush-compat
ceph config-key set "mgr/balancer/max_misplaced": "0.01"

Show configuration and state:

ceph config-key dump
ceph balancer status

你可能感兴趣的:(ceph,分布式对象存储框架:Ceph)