ceph (cephadm)集群部署

ceph 集群部署(cephadm)


方法1: (ansible)

ceph-ansible使用Ansible部署和管理Ceph集群。
(1)ceph-ansible被广泛部署。
(2)ceph-ansible未与Nautlius和Octopus中引入的新的Orchestrator API集成在一起,意味着更新的管理功能和仪表板集成不可用。

方法2:(ceph-deploy)

不再积极维护ceph-deploy。未在Nautilus之前的Ceph版本上进行测试。它不支持RHEL8,CentOS 8或更新的操作系统。

方法3:(cephadm)

版本说明:
ceph版本: Octopus / v15.2.1
安装方式: cephadm
系统版本: Centos8.1
python: python3

节点规划:
主机名ip角色
cmaster10.1.1.12monitor,mgr,rgw,mds,osd
cnode110.1.1.13monitor,mgr,rgw,mds,osd
cnode210.1.1.14monitor,mgr,rgw,mds,osd
节点说明:
monitor:Ceph监视管理节点,承担Ceph集群重要的管理任务,一般需要3或5个节点。
mgr: Ceph 集群管理节点(manager),为外界提供统一的入口。
rgw: Ceph对象网关,是一种服务,使客户端能够利用标准对象存储API来访问Ceph集群
mds:Ceph元数据服务器,MetaData Server,主要保存的文件系统服务的元数据,使用文件存储时才需要该组件
osd:Ceph存储节点Object Storage Daemon,实际负责数据存储的节点
初始化环境:
hostnamectl set-hostname master

hostnamectl set-hostname cnode1

hostnamectl set-hostname cnode2
各节点配置hosts:
cat >> /etc/hosts <<EOF
10.1.1.12 cmaster
10.1.1.13 cnode1
10.1.1.14 cnode2

可选命令:for i in {2..3};do scp /etc/hosts root@10.1.1.1$i:/etc/hosts
基础配置:
#关闭防火墙和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源:
#epel源
yum install -y epel-release  (epel-release-8-8.el8.noarch.rpm)
#阿里云ceph源,该源指定了ceph安装版本
cat >/etc/yum.repos.d/ceph.repo <<EOF
[Ceph]
name=Ceph packages for \$basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el8/\$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-octopus/el8/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-octopus/el8/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF
ssh免密配置:
ssh-keygen
...一路Enter
ssh-copy-id root@cmaster  //会有一次密码输入
ssh-copy-id root@cnode1
ssh-copy-id root@cnode2
安装docker :(所有节点操作,包括新增)
#配置阿里云yum源
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装containerd.io
dnf install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
dnf install -y  https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.3.7-3.1.el8.x86_64.rpm  --allowerasing

#安装docker-ce
dnf install -y docker-ce

#配置docker镜像加速
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF

#启动docker服务
systemctl enable --now docker
安装cephadm:
下载cephadm脚本: (只在主节点操作)
mkdir my-cluster //没要求,我自己为了方便建的文件夹
cd my-cluster
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm  -o cephadm
或者:
curl https://raw.githubusercontent.com/ceph/ceph/v15.2.1/src/cephadm/cephadm -o cephadm
chmod +x cephadm 
//**//下载出错:配置/etc/hosts 文件--—> 199.232.28.133 raw.githubusercontent.com

安装python3:(所有节点执行)
yum install python3 -y

配置ceph存储库  :(或指定版本)
./cephadm add-repo --release octopus

或

./cephadm add-repo --version 15.2.1

安装适当软件包:
./cephadm install ceph-common  ceph  //可能出现编码格式错误

./cephadm install

修改编码(可选)
   
1. export LANGUAGE=en_US.UTF-8
    
2. export LANG=en_US.UTF-8
引导新集群:

您需要知道用于集群的第一个监视器守护程序的IP地址。
如果有多个网络和接口,要确保选择任何可供访问Ceph群集的主机访问的网络和接口。

mkdir -p /etc/ceph
cephadm bootstrap --mon-ip 10.1.1.12

##### 命令特点:

在本地主机上为新集群创建监视和管理器守护程序。
为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的/root/.ssh/authorized_keys文件中。
将与新集群进行通信所需的最小配置文件编写为/etc/ceph/ceph.conf。
将client.admin管理密钥的副本写入/etc/ceph/ceph.client.admin.keyring。
将公用密钥的副本写入 /etc/ceph/ceph.pub。
启动ceph:
该命令在安装了所有Ceph软件包的容器中启动bash shell
cephadm shell
添加新主机到集群:

在新主机的根用户authorized_keys文件中安装群集的公共SSH密钥 :

ssh-copy-id -f -i /etc/ceph/ceph.pub root@*<new-host>*
例如:
ssh-copy-id -f -i /etc/ceph/ceph.pub root@cnode1
ssh-copy-id -f -i /etc/ceph/ceph.pub root@cnode2

告诉Ceph,新节点是集群的一部分:

ceph orch host add *newhost*
例如
ceph orch host add cnode1
ceph orch host add cnode2

第一次部署新节点时直接用上边的命令即可:
但是之后的节点新增有可能上述命令出错:
ceph orch host add cnode3 10.1.1.x  //后边跟上对应的IP    
部署监视器

如果存在监视器使用的特定IP子网,则可以使用以下命令以CIDR格式(例如10.1.1.0/24)配置该IP子网:

ceph config set mon public_network *<mon-cidr-network>*
例如:
ceph config set mon public_network 10.1.1.0/24

要将监视器部署在一组特定的主机上

# ceph orch apply mon *<number-of-monitors>*
# ceph orch apply mon cmaster,cnode1,cnode2 //确保在此列表中包括第一台(引导)主机。
以下可选

可以通过使用主机标签来控制运行监视器的主机。要将mon标签设置为适当的主机:

ceph orch host label add *<hostname>* mon
例如:
ceph orch host label add cmaster mon
ceph orch host label add cnode1 mon
ceph orch host label add cnode2 mon
要查看当前的主机和标签:
ceph orch host ls

告诉cephadm根据标签部署监视器:

ceph orch apply mon label:mon

可以为每个监视器和控件明确地指定IP地址或CIDR网络。要禁用自动监视器部署:

ceph orch apply mon --unmanaged

要部署其他监视器:

ceph orch apply mon "cmaster,cnode1,cnode2"
# ceph orch daemon add mon *<host1:ip-or-network1> [<host1:ip-or-network-2>...]*
例如,要在newhost1IP地址上部署第二台监视器,10.1.2.123并newhost2在网络中部署第三台监视器10.1.2.0/24:
# ceph orch apply mon --unmanaged
# ceph orch daemon add mon newhost1:10.1.1.123
# ceph orch daemon add mon newhost2:10.1.1.0/24
该命令可能会造成混淆。因此,建议使用YAML规范。
每个“ ceph orch apply mon”命令都将取代之前的命令。
这意味着要将监视器应用于多个主机时,必须使用正确的基于逗号分隔列表的语法
如果使用的语法不正确,那么ceph将无法进行工作。

例如:
# ceph orch apply mon cmaster
# ceph orch apply mon cnode1
# ceph orch apply mon cnode2


这样只会导致一个主机上应用了监视器:主机3。
(第一个命令在host1上创建一个监视器。然后第二个命令在host1上创建一个监视器,然后在host2上创建一个监视器。然后第三个命令在host2上创建一个监视器,然后在host3上创建一个监视器。在这种情况下,此时,在host3上只有一个监视器。)

为了确保将监视器应用于这三个主机,请运行以下命令:
# ceph orch apply mon "cmaster,cnode1,cnode2"
而不是使用“ ceph orch apply mon”命令,而是运行以下命令:
# ceph orch apply -i file.yaml
这是一个示例file.yaml文件:
service_type: mon
placement:
  hosts:
   - cmaster
   - cnode1
   - cnode2
部署osd:
存储设备清单可以显示为:
ceph orch device ls
可用存储设备的条件:
设备必须没有分区。
设备不得具有任何LVM状态。
不得安装设备。
该设备不得包含文件系统。
该设备不得包含Ceph BlueStore OSD。
设备必须大于5 GB。
创建osd的方法:
告诉Ceph使用任何可用和未使用的存储设备:
ceph orch apply osd --all-available-devices
1. ceph orch daemon add osd *<host>*:*<device-path>*
例如:
从特定主机上的特定设备创建OSD:
    ceph orch daemon add osd cmaster:/dev/sdb
    ceph orch daemon add osd cnode1:/dev/sdb
    ceph orch daemon add osd cnode2:/dev/sdb
2. 使用yaml文件定义设备的类型,型号,大小,等信息。完成创建
   ceph orch apply osd -i spec.yml (进行)
删除OSD节点:(安全)
1.停止osd进程
ceph osd stop x  //(x 可以通过ceph osd ls 查看)
停止osd的进程,这个是通知集群这个osd进程不在了,不提供服务了,因为本身没权重,就不会影响到整体的分布,也就没有迁移
2.将节点状态标记为out
ceph osd out osd.x
停止到osd的进程,这个是通知集群这个osd不再映射数据了,不提供服务了,因为本身没权重,就不会影响到整体的分布,也就没有迁移
3. 从crush中移除节点
ceph osd crush remove osd.x
这个是从crush中删除,
4. 删除节点
ceph osd rm osd.x
这个是从集群里面删除这个节点的记录ls
5. 删除节点认证(不删除编号会占住)
ceph auth del osd.x
这个是从认证当中去删除这个节点的信息

**注意**
比如卸载了node3的某osd,(osd.x 即: node:/dev/sdb),在node3上执行以下操作,可以后继续使用node3:/dev/sdb

1. lvremove /dev/ceph-3f728c86-8002-47ab-b74a-d00f4cf0fdd2/osd-block-08c6dc02-85d1-4da2-8f71-5499c115cd3c  // dev 后的参数可以通过lsblk查看
2. vgremove  ceph-3f728c86-8002-47ab-b74a-d00f4cf0fdd2
部署mds:(cephFS元数据守护程序)
ceph orch apply mds *<fs-name>* --placement="*<num-daemons>* [*<host1>* ...]"

例如:
ceph orch apply mds myfs --placement="3 master node1 node2"
部署RGWS:
为特定领域和区域部署一组radosgw守护程序:
ceph orch apply rgw *<realm-name>* *<zone-name>* --placement="*<num-daemons>* [*<host1>* ...]"
例如:要 在myhost1和myhost2上部署两个服务于*<realm-name>*领域和*<zone-name>*区域的rgw守护程序:
# ceph orch apply rgw myorg us-east-1 --placement="2 cmaster cnode1 cnode2"

说明:
myorg : 领域名  (realm-name)
us-east-1: 区域名 (zone-name)myrgw

Cephadm将等待运行正常的群集,并在部署rgw守护程序之前自动创建所提供的领域和区域(realm-name和zone-name不存在的情况)

可以使用以下radosgw-admin命令手动创建领域,区域组和区域:
(添加osd后下边的命令才会成功执行)

# radosgw-admin realm create --rgw-realm=<realm-name> --default
radosgw-admin realm create --rgw-realm=myrgw --default

# radosgw-admin zonegroup create --rgw-zonegroup=<zonegroup-name>  --master --default
radosgw-admin zonegroup create --rgw-zonegroup=myzg  --master --default

# radosgw-admin zone create --rgw-zonegroup=<zonegroup-name> --rgw-zone=<zone-name> --master --default
radosgw-admin zone create --rgw-zonegroup=myzg --rgw-zone=myzone --master --default

# radosgw-admin period update --rgw-realm=<realm-name> --commit
radosgw-admin period update --rgw-realm=myrgw --commit
为RGW开启dashborad

此处请看(s3客户端配置)

部署NF网络文件系统:
要部署NFS Ganesha网关,请执行以下操作:
# ceph orch apply nfs *<svc_id>* *<pool>* *<namespace>* --placement="*<num-daemons>* [*<host1>* ...]"
例如,同一个服务ID部署NFS FOO,将使用RADOS池NFS和命名空间NFS-NS,:
# ceph orch apply nfs foo nfs-ganesha nfs-ns
ceph fs 部署:
ceph fs volume create *myfs*   //自定义文件系统名

此命令回自动创建cephfs_date 和 cephfs_matedata 两个池



创建:
ceph osd pool create cephfs_data  <pg_num>  // 可指定pg 数,默认最高副本级,128pg
ceph osd pool create cephfs_metadata  <pg_num> //可指定pg数

创建文件系统:
ceph fs new <fs_name> <metadata> <data>  
例如:
ceph fs new myfs cephfs_metadata cephfs_data
ceph fs ls  //进行fs 的查看
在CEPHFS中使用擦除编码池:(官网内容,可选)
您可以将擦除编码池用作CephFS数据池,只要它们启用了覆盖即可,操作如下:
ceph osd pool set my_ec_pool allow_ec_overwrites true

请注意,仅当将OSDS与BlueStore后端一起使用时,才支持EC覆盖。
挂载文件系统:
启用密钥挂载:
1. (osd节点执行)
mkdir /mnt/mycephfs
2. (cephadm 版本,在主节点执行)
    1) cat /etc/ceph/ceph.client.admin.keyring   //获取admin密钥,保存为admin.secret  ,也可以不保存
    2) vi admin.secret
    3) 挂载cephfs (cnode1,cnode2为osd节点)
        3.1: mount -t ceph cnode1:6789,cnode2:6789:/ /mnt/mycephfs -o name=admin,secretfile=/root/admin.secret
        或  (AQD5ZORZsJYbMhAAoGEw/H9SGMpEy1KOz0WsQQ==)第一步所得密钥
        3.2: mount -t ceph master:6789,node1:6789,node2:6789:/ /mnt/mycephfs -o name=admin,secret=AQD5ZORZsJYbMhAAoGEw/H9SGMpEy1KOz0WsQQ==   
关闭密钥挂载:
mount -t ceph cnode1:6789:/ /mnt/mycephfs

永久挂载:
添加以下内容到/etc/fstab
[{ipaddress}:{port}]:/ {mount}/{mountpoint} ceph [name=username,secret=secretkey|secretfile=/path/to/secretfile],[{mount.options}]
例如:
10.1.1.8:6789/ /mnt/mycephfs ceph name=admin,secretfile=/etc/ceph/admin.secret 0 2

卸载文件系统:
umount /mnt/mycephfs
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值