ceph安装P版本

发布于:2024-12-07 ⋅ 阅读:(116) ⋅ 点赞:(0)

1、搭建的要求

1、OSD约束

  • 设备不得有分区,/dev/sdb1不会用这个盘的

  • 不能是逻辑卷的成员盘,不能是逻辑卷的PV,曾经是可以的,但是新版本不行了

  • 不能有文件系统(就是不能被格式化,ext4,xfs等),不能被挂载

  • 不能是其他ceph的osd,或者是本集群中已经移除的OSD的盘,重新加入集群,重新加入时,可以将数据擦除在加入集群,总而言之,就是磁盘必须是干净的

  • OSD的容量要大于5G

  • 常见的硬件选型错误

    • 不要使用旧的古老硬件

    • 不要再同一个存储池中使用不同的硬件(OSD的磁盘类型和容量要一致,否则,容量大的硬盘,PG就会非常多)

    • 使用1GB的网络而不是10GB的网络,建议OSD使用10GB网络,其他组件使用1GB网络

    • 没有使用集群网络和公共网络而是复用这2个网络(生产环境中这2个网络是隔离的)

    • 服务器不要使用raid来保护数据(如果操作系统不识别硬盘,可以做RAID0),因为ceph本身已经具备数据冗余机制,如果还使用raid将会容量浪费

    • 选中驱动器只考虑价格而没有考虑io性能

    • 硬盘无需开启日志属性,因为ceph有日志功能

2、ceph部署方式

  • 手动部署

  • ceph-deploy,早期部署方式

  • ceph-ansible rhcs3部署方式

  • cephadm podman部署

1、cephadm的部署原理
  • cephadm 本身是一个基于python脚本,利用该脚本在单节点上部署是一个最小化ceph集群(monitor+mgr),然后利用mgr的orch编排
红帽版本搭建(RHCS5.0部署)

2、cephadm安装P版本

1、环境要求

  • 三个节点,每个节点有一个系统盘,10G的硬盘三块作为osd的硬盘,每个节点配置2C4G,使用一张NAT网卡即可

  • centos8.4和rhel8.4和rockylinux8.4

2、配置主机名,关闭防火墙,时间同步


hostnamectl set-hostname node1.example.com

[root@node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.10 node1
192.168.200.11 node2
192.168.200.12 node3


[root@node1 ~]# systemctl stop firewalld.service 
[root@node1 ~]# systemctl disable firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

# 配置免密登录

[root@node1 ~]# ssh-keygen 
[root@node1 ~]# ssh-copy-id root@node1
[root@node1 ~]# ssh-copy-id root@node2
[root@node1 ~]# ssh-copy-id root@node3

# 配置时间同步
[root@node1 ~]# vim /etc/chrony.conf 
server ntp.aliyun.com iburst

# 重启即可

3、检查python环境和容器运行时环境

# 由于是最小化安装,没有装python3
# 配置阿里云8的源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

yum -y install python36-3.6.8-38.module_el8.5.0+895+a459eca8.x86_64

[root@node1 ~]# python3 --version
Python 3.6.8

# 配置docker或者podman
# 以容器的方式启动服务
[root@node1 ~]# podman  --version
podman version 3.3.1

4、部署引导节点(下载cephadm脚本)

  • 可以随便找一台机器作为引导节点,然后扩展节点即可,就是加入节点即可

  • 文档 https://docs.ceph.com/en/reef/

  • https://docs.ceph.com/en/pacific/cephadm/install/#cephadm-deploying-new-cluster

  • gitlab地址 https://github.com/ceph/ceph,选择版本,然后src/cephadm/下面有个cephadm.py文件即可

1、获取脚本
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm


# 添加权限
chmod +x cephadm

# 可以查看版本号,非常的慢,因为拉取镜像,红帽仓库地址的镜像
[root@node1 opt]# ./cephadm version
ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)

[root@node1 opt]# podman images
REPOSITORY         TAG         IMAGE ID      CREATED       SIZE
quay.io/ceph/ceph  v16         3c4eff6082ae  6 months ago  1.22 GB
2、添加ceph仓库,安装cephadm命令,修改仓库镜像仓库地址,安装ceph客户端工具
[root@node1 opt]# ./cephadm add-repo --release 16.2.11
Writing repo to /etc/yum.repos.d/ceph.repo...
Enabling EPEL...
Completed adding repo.
[root@node1 opt]# ls /etc/yum.repos.d/
CentOS-Base.repo  epel-modular.repo     epel.repo                  epel-testing.repo
ceph.repo         epel-playground.repo  epel-testing-modular.repo
[root@node1 opt]# 

# 如果要删除cephadm文件的话,就需要安装这个命令
[root@node1 opt]# ./cephadm install
Installing packages ['cephadm']...

[root@node1 opt]# which cephadm 
/usr/sbin/cephadm

# 安装ceph客户端工具(下载非常的慢)
[root@node1 opt]# cephadm install ceph-common  # 或者 yum -y install ceph-common

# 修改/usr/sbin/cephadm文件

DEFAULT_IMAGE = 'uhub.service.ucloud.cn/ceph260/ceph:v16'
DEFAULT_IMAGE_IS_MASTER = False
DEFAULT_IMAGE_RELEASE = 'pacific'
DEFAULT_PROMETHEUS_IMAGE = 'uhub.service.ucloud.cn/ceph260/prometheus:v2.33.4'
DEFAULT_NODE_EXPORTER_IMAGE = 'uhub.service.ucloud.cn/ceph260/node-exporter:v1.3.1'
DEFAULT_ALERT_MANAGER_IMAGE = 'uhub.service.ucloud.cn/ceph260/alertmanager:v0.23.0'
DEFAULT_GRAFANA_IMAGE = 'uhub.service.ucloud.cn/ceph260/ceph-grafana:8.3.5'
DEFAULT_HAPROXY_IMAGE = 'uhub.service.ucloud.cn/ceph260/haproxy:2.3'
DEFAULT_KEEPALIVED_IMAGE = 'uhub.service.ucloud.cn/ceph260/keepalived'
DEFAULT_SNMP_GATEWAY_IMAGE = 'uhub.service.ucloud.cn/ceph260/snmp-notifier:v1.2.1'
DEFAULT_REGISTRY = 'uhub.service.ucloud.cn'   # normalize unqualified digests to this

3、cephadm初始化
# 这个命令的作用是通过 cephadm 工具引导(bootstrap)Ceph 集群的初始设置和部署
[root@node1 ~]# cephadm bootstrap --mon-ip 192.168.200.10 --initial-dashboard-user admin --initial-dashboard-password admin --allow-fqdn-hostname 

# --mon-ip 指定第一个monitor节点ip地址,是ceph的核心组件,负责维护集群的状态和元数据

# --initial-dashboard-user admin 指定dashboard初始管理员用户

# --initial-dashboard-password admin 登录的凭证

# --allow-fqdn-hostname 允许使用FQDN作为的主机名,而不是短主机名,这个非常的有用,对于域名解析而不是ip地址管理节点时非常有用

# 因为osd数量
[root@node1 opt]# ceph -s 
  cluster:
    id:     8eeb54b6-b24a-11ef-89b8-000c29679dd7
    health: HEALTH_WARN  # 因为OSD数量小于默认的数量3个,所以警告
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum node1.example.com (age 2m)
    mgr: node1.example.com.yfrzbt(active, since 116s)
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     
 
  progress:
    Updating alertmanager deployment (+1 -> 1) (0s)
      [............................] 



# 生成的ceph相关文件
# 生成了admin的密钥
[root@node1 ceph]# pwd
/etc/ceph
[root@node1 ceph]# ls
ceph.client.admin.keyring  ceph.conf  ceph.pub  rbdmap
[root@node1 ceph]# 

4、cephadm容器操作
[root@node1 opt]# cephadm shell
Inferring fsid 8eeb54b6-b24a-11ef-89b8-000c29679dd7
Using recent ceph image quay.io/ceph/ceph@sha256:f15b41add2c01a65229b0db515d2dd57925636ea39678ccc682a49e2e9713d98
[ceph: root@node1 /]# ceph -s 
  cluster:
    id:     8eeb54b6-b24a-11ef-89b8-000c29679dd7
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum node1.example.com (age 11m)
    mgr: node1.example.com.yfrzbt(active, since 11m)
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     
 
  progress:
    Updating grafana deployment (+1 -> 1) (0s)
      [............................] 

5、添加主机

[root@node1 ~]# ceph orch host ls
HOST               ADDR            LABELS  STATUS  
node1.example.com  192.168.200.10  _admin          
1 hosts in cluster

# 会报错,因为ceph需要免密,有ceph集群的公私钥进行免密,管理集群靠的就是这个公私钥
[root@node1 ~]# ceph orch host add node2.example.com
Error EINVAL: Cannot resolve ip for host node2.example.com: [Errno -2] Name or service not known
You may need to supply an address for node2.example.com

Please make sure that the host is reachable and accepts connections using the cephadm SSH key
To add the cephadm SSH key to the host:
> ceph cephadm get-pub-key > ~/ceph.pub
> ssh-copy-id -f -i ~/ceph.pub root@node2.example.com

To check that the host is reachable open a new shell with the --no-hosts flag:
> cephadm shell --no-hosts

Then run the following:  # 获取到私钥,然后使用私钥进行登录(测试用的,测试上面公钥拷贝成功没有)
> ceph cephadm get-ssh-config > ssh_config
> ceph config-key get mgr/cephadm/ssh_identity_key > ~/cephadm_private_key
> chmod 0600 ~/cephadm_private_key
> ssh -F ssh_config -i ~/cephadm_private_key root@node2.example.com

# 公钥放在目录下
ceph cephadm get-pub-key > ~/ceph.pub

# 拷贝到其他节点
ssh-copy-id -f -i ~/ceph.pub root@node2.example.com
ssh-copy-id -f -i ~/ceph.pub root@node3.example.com

# 添加节点
ceph orch host add node2
ceph orch host add node3

[root@node1 ~]# ceph orch host ls 
HOST   ADDR            LABELS  STATUS  
node1  192.168.200.10  _admin          
node2  192.168.200.11                  
node3  192.168.200.12                  
3 hosts in cluster


# 查看节点组件信息
[root@node1 ~]# ceph orch ls
# 服务的名字    ip+端口      服务状态/数量    运行时间   部署方式
NAME           PORTS        RUNNING  REFRESHED  AGE  PLACEMENT  
alertmanager   ?:9093,9094      1/1  9m ago     11m  count:1    
crash                           2/3  9m ago     11m  *          
grafana        ?:3000           1/1  9m ago     11m  count:1    
mgr                             2/2  9m ago     11m  count:2    
mon                             2/5  9m ago     11m  count:5    
node-exporter  ?:9100           2/3  9m ago     11m  *          
prometheus     ?:9095           1/1  9m ago     11m  count:1  


# placement
# count=1,表示该服务组件只在某一个节点上进行部署
# * 表示在所有节点上面进行部署
# 主机名,仅在特定主机上进行部署
# 标签名,仅在标签上进行部署

# 随着时间的推移,mon的数量会增加,因为ceph的组件会自动部署在主机上面,ceph集群具有节点自扩展性

[root@node1 ~]# ceph orch ls
NAME           PORTS        RUNNING  REFRESHED  AGE  PLACEMENT  
alertmanager   ?:9093,9094      1/1  2m ago     17m  count:1    
crash                           3/3  2m ago     17m  *          
grafana        ?:3000           1/1  2m ago     17m  count:1    
mgr                             2/2  2m ago     17m  count:2    
mon                             3/5  2m ago     17m  count:5    
node-exporter  ?:9100           3/3  2m ago     17m  *          
prometheus     ?:9095           1/1  2m ago     17m  count:1  

6、ceph orch操作

  • 管理容器化服务的命令

  • ceph orch 是 Ceph 集群的 Orchestrator 工具,主要用于管理和监控通过容器化方式部署的 Ceph 服务

ceph orch  apply mon --unmanaged

# 设置节点为2个
ceph orch  apply mon --placement=2 

1、根据服务类型进行编排
# 根据数量进行编排,也就是部署在哪个节点
ceph orch apply mon --placement=3

# 指定调度在node2,node3节点上面
ceph orch apply mon --placement=node2,node3

# 可以支持通配符
ceph orch apply mon --placement=*

# 根据标签进行编排
# 打上标签
ceph orch host label add node2 标签
ceph orch apply mon --placement=label:标签
2、手动进行编排
# 先关掉自我扩展
ceph orch apply mgr --unmanaged

# 手动部署在node3上面
[root@node1 ~]# ceph orch daemon add mgr node3


# 手动停止
[root@node1 ~]# ceph orch daemon stop node-exporter.node1
Scheduled to stop node-exporter.node1 on host 'node1'

# 手动启动
ceph orch daemon start node-exporter.node1

# 删掉一个进程
ceph orch daemon rm node-exporter.node1
3、停止,删除,重启服务等操作
# ceph orch 动作 服务名
ceph orch  stop node-exporter

# 自动启动服务
ceph orch  start node-exporter

# 重启进程
ceph orch restart node-exporter

# 删掉这个服务的所有进程
ceph orch rm grafana

# 添加进程
ceph orch add mgr

4、查询服务进程
- 这个时候就跟刚开始的allow对应,调度在这些主机名上面了
[root@node1 ~]# ceph orch ps 
NAME                 HOST   PORTS        STATUS         REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID  
alertmanager.node1   node1  *:9093,9094  running (6m)      5m ago  39m    23.7M        -  0.23.0   ba2b418f427c  0f1f02a684a6  
crash.node1          node1               running (39m)     5m ago  39m    7222k        -  16.2.15  3c4eff6082ae  53fc2e3840fc  
crash.node2          node2               running (30m)     4m ago  30m    7386k        -  16.2.15  3c4eff6082ae  6ac4db1141e7  
crash.node3          node3               running (26m)     6m ago  26m    7402k        -  16.2.15  3c4eff6082ae  4df3e7b84e90  
grafana.node1        node1  *:3000       running (39m)     5m ago  39m    57.7M        -  8.3.5    dad864ee21e9  a29b536c7d57  
mgr.node1.bhqezd     node1  *:9283       running (40m)     5m ago  40m     452M        -  16.2.15  3c4eff6082ae  02cc7d8b42df  
mgr.node2.zdxuiu     node2  *:8443,9283  running (30m)     4m ago  30m     401M        -  16.2.15  3c4eff6082ae  2aeddd75b9cc  
mon.node1            node1               running (40m)     5m ago  40m     124M    2048M  16.2.15  3c4eff6082ae  1d67f509959b  
mon.node2            node2               running (30m)     4m ago  30m     134M    2048M  16.2.15  3c4eff6082ae  a444a91c307a  
mon.node3            node3               running (26m)     6m ago  26m     128M    2048M  16.2.15  3c4eff6082ae  550929acbd32  
node-exporter.node1  node1  *:9100       running (39m)     5m ago  39m    21.2M        -  1.3.1    1dbe0e931976  acd154d21b9c  
node-exporter.node2  node2  *:9100       running (30m)     4m ago  30m    26.7M        -  1.3.1    1dbe0e931976  17d2fd2dae0a  
node-exporter.node3  node3  *:9100       running (26m)     6m ago  26m    23.8M        -  1.3.1    1dbe0e931976  b425326bd080  
prometheus.node1     node1  *:9095       running (6m)      5m ago  39m    47.7M        -  2.33.4   514e6a882f6e  ca756cd5a9a4  

7、添加OSD

1、手动添加OSD
ceph orch daemon add osd node1:/dev/sda
ceph orch daemon add osd node1:/dev/sdb
ceph orch daemon add osd node1:/dev/sdc
2、自动方式添加OSD
# 将所有空闲磁盘变成OSD
[root@node1 ~]# ceph orch apply  osd 
--all-available-devices is required
Error EINVAL: 
[root@node1 ~]# ceph orch apply  osd --all-available-devices
Scheduled osd.all-available-devices update...

# 搭建好了
[root@node1 ~]# ceph -s 
  cluster:
    id:     07726f64-b2aa-11ef-a070-000c29679dd7
    health: HEALTH_WARN
            Reduced data availability: 1 pg inactive, 1 pg peering
 
  services:
    mon: 3 daemons, quorum node1,node2,node3 (age 44m)
    mgr: node1.bhqezd(active, since 57m), standbys: node2.zdxuiu
    osd: 9 osds: 9 up (since 1.08911s), 9 in (since 23s)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   2.3 GiB used, 78 GiB / 80 GiB avail
    pgs:     100.000% pgs not active
             1 remapped+peering

8、安装成功了

  • 这样上面的步骤就安装成功了

  • 必要条件,cephadm,

3、cephadm脚本原理

1、cephadm最小化安装

  • 就是现在一个引导节点上面部署最小化的ceph集群(利用容器仓库)
    img

  • 搭建了一个ceph最小化后,利用mgr的扩展进行扩展节点

  • 通过ceph密钥进行管理其他节点

2、ceph编排器

img

  • 通过这些接口实现这些功能

3、各个容器作用

# 这个id就是集群的id
[root@node1 mon.node1]# pwd
/var/lib/ceph/47a615ea-b2dc-11ef-a364-000c29679dd7/mon.node1

# 所以每一个节点都会在/var/lib/id/里面产生一些文件

# 如果mon异常的话,可以执行
[root@node1 mon.node1]# file unit.run 
unit.run: ASCII text, with very long lines

4、各个服务端口

img

img