手动部署ceph集群

手动部署ceph集群

参考:https://ceph.readthedocs.io/en/latest/install/index_manual/

所有Ceph集群都需要至少一个monitor,以及至少与集群中存储的对象副本一样多的OSD。引导初始monitor是部署Ceph存储集群的第一步。Monitor部署还为整个集群设置了重要条件,例如池的副本数,每个OSD的placement groups放置组数,心跳间隔,是否需要身份验证等。这些值中的大多数默认设置为在设置集群以进行生产时了解它们很有用。

按照ceph-deploy的安装规划,我们将建立一个集群,该集群首先包含一个node1节点作为monitor节点,node2及node3作为OSD节点。

引导monitor(理论上是Ceph存储集群)需要做很多事情:

  • Unique Identifier:该fsid作为集群的唯一标识符,由于最初的ceph集群主要支持文件系统,所以最初fsid代表文件系统ID,但Ceph现在也支持native interfaces本地接口,块设备和对象存储网关接口,目前fsid有点用词不当。
  • Cluster Name:Ceph集群名称,这是一个不含空格的简单字符串。默认集群名称为ceph,但可以指定其他集群名称。当使用多个集群并且需要清楚地了解正在使用哪个集群时,修改默认集群名称特别有用。例如,在多站点配置中运行多个群集时,群集名称(例如,us-west,us-east)将标识当前CLI会话的群集。注意:要在命令行界面上标识集群名称,请使用集群名称指定Ceph配置文件(例如,ceph.conf,us-west.conf,us-east.conf,等等)。另请参见CLI用法(ceph–cluster{cluster name})。
  • Monitor Name::集群中的每个monitor实例都有一个唯一的名称。通常,Ceph Monitor名称是主机名(我们建议每个主机一个Ceph Monitor,并且不要将Ceph OSD守护程序与Ceph Monitors混合使用)。可以使用hostname-s检索简短的主机名。
  • Monitor Map:启动初始monitor需要生成monitor map。monitor映射需要fsid,集群名称(或使用默认名称),以及至少一个主机名及其IP地址。
  • Monitor Keyring:Monitors通过密钥相互通信。必须生成一个带有 monitor密钥的keyring,并在引导初始monitor时提供它。
  • Administrator Keyring:要使用cephCLI工具,必须有一个client.admin用户。因此,必须生成admin用户和keyring,并且还必须将client.admin用户添加到monitor keyring。

前述要求并不意味着创建Ceph配置文件。但是,作为最佳实践,我们建议创建一个Ceph配置文件,并配置fsid,mon initial members以及mon host参数。

也可以在运行时获取和设置所有monitor设置。但是,Ceph配置文件只包含覆盖默认值的设置。将设置添加到Ceph配置文件时,这些设置将覆盖默认设置。在Ceph配置文件中维护这些设置可以更容易地维护集群。

节点规划:

主机名public-ip磁盘角色
node1192.168.93.20系统盘: sda
osd盘: sdb
monitor,mgr,mds,osd
node2192.168.93.21系统盘: sda
osd盘: sdb
monitor,mgr,mds,osd,
node3192.168.93.22系统盘: sda
osd盘: sdb
monitor,mgr,mds,osd

安装说明:

  • ceph版本: 14.2.9 nautilus (stable)
  • 操作系统版本:centos7.8 minimal

环境初始化

没有特殊说明,以下操作在所有节点执行。

所有节点必须配置主机名

#node1
hostnamectl set-hostname node1

#node2
hostnamectl set-hostname node2

#node3
hostnamectl set-hostname node3

配置hosts解析

cat >> /etc/hosts <<EOF
192.168.93.20 node1
192.168.93.21 node2
192.168.93.22 node3
EOF

配置防火墙和时间同步

#关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

#配置时间同步
yum install -y chrony
systemctl enable --now chronyd

配置yum源

#centos基础源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#epel源
yum install -y epel-release

#阿里云ceph源,该源指定了ceph安装版本
cat >/etc/yum.repos.d/ceph.repo <<EOF
[Ceph]
name=Ceph packages for \$basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/\$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF

node1节点添加节点SSH互信

ssh-keygen -t rsa
ssh-copy-id root@node1
ssh-copy-id root@node2
ssh-copy-id root@node3

安装ceph依赖包

参考:https://ceph.readthedocs.io/en/latest/install/get-packages/#configure-repositories-manually

yum install -y snappy leveldb gdisk python-argparse gperftools-libs

安装ceph包

yum install -y ceph

初始化monitor节点

在node1节点生成uuid,并在所有节点导入uuid环境变量

[root@node1 ~]# uuidgen
8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb

#node1
export cephuid=8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb

#node2
export cephuid=8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb

#node3
export cephuid=8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb

所有节点创建Ceph配置文件:

cat > /etc/ceph/ceph.conf <<EOF
[global]
fsid = 8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
mon initial members = node1, node2, node3
mon host = 192.168.93.20, 192.168.93.21, 192.168.93.22
public network = 192.168.93.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
EOF

以下操作在node1节点执行

为集群创建一个keyring,并生成一个monitor密钥。

ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

生成administrator keyring,生成client.admin用户并将用户添加到keyring。

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。

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'

将生成的密钥添加到中ceph.mon.keyring

ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring

将所有者更改为ceph.mon.keyring

chown ceph:ceph /tmp/ceph.mon.keyring

使用主机名,主机IP地址和FSID生成monitor map。另存为/tmp/monmap

monmaptool --create --add node1 192.168.93.20 --add node2 192.168.93.21 --add node3 192.168.93.22 --fsid $cephuid /tmp/monmap

复制monitor map到另外2个节点

scp /tmp/monmap root@node2
:/tmp
scp /tmp/monmap root@node3:/tmp

复制ceph.client.admin.keyring到另外2个节点

scp /etc/ceph/ceph.client.admin.keyring root@node2:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@node3:/etc/ceph/

复制ceph.mon.keyring到另外2个节点

scp /tmp/ceph.mon.keyring root@node2:/tmp/
scp /tmp/ceph.mon.keyring root@node3:/tmp/

#注意修改文件权限
[root@node2 ~]# chown ceph:ceph /tmp/ceph.mon.keyring
[root@node3 ~]# chown ceph:ceph /tmp/ceph.mon.keyring

创建monitor数据目录

#node1
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node1

#node2
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node2

#node3
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node3

用monitor map和keyring填充monitor守护程序。

#node1
sudo -u ceph ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

#node2
sudo -u ceph ceph-mon --mkfs -i node2 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

#node3
sudo -u ceph ceph-mon --mkfs -i node3 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

查看生成的文件
[root@node1 ~]# ls /var/lib/ceph/mon/ceph-node1/
keyring  kv_backend  store.db

启动monitor服务

#node1
systemctl restart ceph-mon@node1
systemctl enable ceph-mon@node1

#node2
systemctl restart ceph-mon@node2
systemctl enable ceph-mon@node2

#node3
systemctl restart ceph-mon@node3
systemctl enable ceph-mon@node3

查看当前集群状态

ceph -s

存在health告警,启用msgr2后会消失。

ceph mon enable-msgr2

初始化manager

在运行ceph-mon守护程序的每个节点上,还应该设置一个ceph-mgr守护程序。请参阅ceph-mgr管理员指南

通常,将使用诸如ceph-ansible之类的工具来设置ceph-mgr守护程序。下面使用手动设置ceph-mgr守护程序。

为守护程序创建身份验证密钥,将该密钥放入/var/lib/ceph/mgr/ceph-node/目录下:

#node1
ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node1
sudo -u ceph vim /var/lib/ceph/mgr/ceph-node1/keyring
[mgr.node1]
        key = AQDMt+9ejx8HLhAA6IqshHKAg72p8MW/s6cdLg==     

#node2
ceph auth get-or-create mgr.node2 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node2
sudo -u ceph vim /var/lib/ceph/mgr/ceph-node2/keyring
[mgr.node2]
        key = AQDSt+9e+T6kKRAAW8A6zelgtQiHbdmaNCSGag==

#node3
ceph auth get-or-create mgr.node3 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node3
sudo -u ceph vim /var/lib/ceph/mgr/ceph-node3/keyring
[mgr.node3]
        key = AQDYt+9e9iE2EBAAP+cyRwxGP80lDDzwc/eFGA==

启动ceph-mgr守护程序:

#node1
systemctl restart ceph-mgr@node1
systemctl enable ceph-mgr@node1

#node2
systemctl restart ceph-mgr@node2
systemctl enable ceph-mgr@node2

#node3
systemctl restart ceph-mgr@node3
systemctl enable ceph-mgr@node3

通过ceph status查看输出来检查mgr是否出现

ceph status

添加OSD

参考:https://ceph.readthedocs.io/en/latest/rados/operations/add-or-rm-osds/

初始monitor运行后,应添加OSD。必须有足够的OSD来处理对象的副本数(例如,osd pool default size = 2至少需要两个OSD),才能使群集达到 active + clean状态。初始化monitor后,群集具有默认的CRUSH map;但是,CRUSH map没有任何Ceph OSD守护进程映射到Ceph节点。

Ceph提供了ceph-volume实用程序,该实用程序可以准备逻辑卷,磁盘或分区以供Ceph使用。该ceph-volume实用程序通过增加索引来创建OSD ID。此外,ceph-volume还会为在主机下的CRUSH map中添加新的OSD。执行ceph-volume-h以获取CLI详细信息。该实用程序将自动执行下面长格式的步骤。要使用简短过程创建前两个OSD,请在node2和node3上执行以下操作:

复制keyring到其他2个节点

scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node2:/var/lib/ceph/bootstrap-osd/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node3:/var/lib/ceph/bootstrap-osd/

创建OSD

[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   70G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   69G  0 part 
  ├─centos-root 253:0    0 60.1G  0 lvm  /
  ├─centos-swap 253:1    0  3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0    5G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
sr0              11:0    1    1G  0 rom

3个节点上执行

ceph-volume lvm create --data /dev/sdb

启动各个节点osd进程

#node1
systemctl restart ceph-osd@0
systemctl enable ceph-osd@0
 
#node2
systemctl restart ceph-osd@1
systemctl enable ceph-osd@1

#node3
systemctl restart ceph-osd@2
systemctl enable ceph-osd@2

查看集群状态

[root@node1 ~]# ceph -s
  cluster:
    id:     8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3 (age 2s)
    mgr: node1(active, since 13m), standbys: node3, node2
    osd: 3 osds: 3 up (since 9m), 3 in (since 11m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 57 GiB / 60 GiB avail
    pgs:

添加mds

创建mds数据目录。

#node1
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-node1

#node2
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-node2

#node3
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-node3

创建keyring:

#node1
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node1/keyring --gen-key -n mds.node1

#node2
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node2/keyring --gen-key -n mds.node2

#node3
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node3/keyring --gen-key -n mds.node3

导入keyring并设置权限:

#node1
ceph auth add mds.node1 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node1/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-node1/keyring

#node2
ceph auth add mds.node2 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node2/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-node2/keyring

#node3
ceph auth add mds.node3 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node3/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-node3/keyring

所有节点修改ceph.conf配置文件,追加以下内容

cat >> /etc/ceph/ceph.conf <<EOF
[mds.node1]
host = node1

[mds.node2]
host = node2

[mds.node3]
host = node3
EOF

重新启动所有服务

#node1
systemctl restart ceph-mon@node1
systemctl restart ceph-mgr@node1
systemctl restart ceph-mds@node1
systemctl enable ceph-mds@node1
systemctl restart ceph-osd@0

#node2
systemctl restart ceph-mon@node2
systemctl restart ceph-mgr@node2
systemctl restart ceph-mds@node2
systemctl enable ceph-mds@node2
systemctl restart ceph-osd@1

#node3
systemctl restart ceph-mon@node3
systemctl restart ceph-mgr@node3
systemctl restart ceph-mds@node3
systemctl enable ceph-mds@node3
systemctl restart ceph-osd@2

查看集群状态

[root@node1 ~]# ceph -s
  cluster:
    id:     8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3 (age 28m)
    mgr: node1(active, since 29m), standbys: node2, node3
    mds:  3 up:standby
    osd: 3 osds: 3 up (since 28m), 3 in (since 53m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 57 GiB / 60 GiB avail
    pgs:

查看osd状态

[root@node1 ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF 
-1       0.05846 root default                           
-3       0.01949     host node1                         
 0   hdd 0.01949         osd.0      up  1.00000 1.00000 
-5       0.01949     host node2                         
 1   hdd 0.01949         osd.1      up  1.00000 1.00000 
-7       0.01949     host node3                         
 2   hdd 0.01949         osd.2      up  1.00000 1.00000
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值