05-部署Ceph集群(Ceph Pacific)

1. 引导单节点Ceph集群(隔离环境)

1.1 部署本地容器仓库

部署脚本deploy_registry.sh的内容如下:

#!/bin/bash
#
mkdir -p /var/lib/registry
docker run -d \
  --restart=always \
  -p 5000:5000 \
  --name registry \
  -v /var/lib/registry:/var/lib/registry \
  registry:2

1.2 在所有集群节点启用不安全的本地容器仓库

registry.local

1.3 将以下镜像上传到本地容器仓库

quay.io/ceph/ceph:v16.2.11
quay.io/ceph/ceph-grafana:8.3.5
quay.io/prometheus/prometheus:v2.33.4
quay.io/prometheus/node-exporter:v1.3.1
quay.io/prometheus/alertmanager:v0.23.0

1.4 创建一个初始化配置文件

init-ceph.conf

1.5 引导集群

格式:

cephadm --image *<hostname>*:5000/ceph/ceph bootstrap --mon-ip *<mon-ip>*

示例:

cephadm --docker --image registry.local:5000/ceph/ceph bootstrap --mon-ip 172.16.0.1 --config init-ceph.conf

引导完成一个单节点群集,程序会做如下事情:

- 在本地主机上为新集群创建 monitor 和 manager daemon 守护程序。
- 为Ceph集群生成一个新的SSH密钥,并将其添加到 root 用户的 /root/.ssh/authorized_keys 文件中。
- 将与新群集进行通信所需的最小配置文件保存到 /etc/ceph/ceph.conf。
- 向 /etc/ceph/ceph.client.admin.keyring 写入 client.admin 管理 secret key 的副本。
- 将 public key 的副本写入 /etc/ceph/ceph.pub。

2. 添加主机

在引导成功单节点Ceph群集后,引导程序会将 public key 的副本写入 /etc/ceph/ceph.pub,在添加主机节点前需要将该 key 分发到要加入群集的主机上。

ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node-1
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-node-2

ceph orch host add ceph-node-1 172.16.0.2
ceph orch host add ceph-node-2 172.16.0.3

ceph orch host ls

默认情况下,ceph.conf 文件和 client.admin 密钥环的副本保存在所有带有 _admin 标签的主机上的 /etc/ceph 中,该标签最初仅适用于引导程序主机。我们通常建议为一个或多个其他主机提供_admin标签,以便 Ceph CLI(例如,通过 cephadm shell)可以在多个主机上轻松访问。要将_admin标签添加到其他主机,请执行以下操作:

ceph orch host label add ceph-node-1 _admin
ceph orch host label add ceph-node-2 _admin

3. 添加OSD

为了部署 OSD,必须有一个可用于部署 OSD 的存储设备。运行以下命令以显示所有集群主机上的存储设备清单:

ceph orch device ls

添加OSD需求满足以下所有条件:

- 设备必须没有分区。
- 设备不得具有任何LVM状态。
- 不得安装设备。
- 该设备不得包含文件系统。
- 该设备不得包含Ceph BlueStore OSD。
- 设备必须大于5GB。

注:Ceph 不会在不可用的设备上配置 OSD。

3.1 OSD服务规范示例

- osd_spec.yml

service_type: osd
service_id: osd_spec_hdd
placement:
  hosts:
    - ceph-node-0
    - ceph-node-1
    - ceph-node-2
data_devices:
  size: '10TB'
db_devices:
  size: '3.2TB'
extra_container_args:
  - "-v"
  - "/etc/localtime:/etc/localtime:ro"
---
service_type: osd
service_id: osd_spec_ssd
placement:
  hosts:
    - ceph-node-0
    - ceph-node-1
    - ceph-node-2
data_devices:
  size: '960GB'
extra_container_args:
  - "-v"
  - "/etc/localtime:/etc/localtime:ro"

3.2 部署命令

ceph orch apply -i osd_spec.yml --dry-run
ceph orch apply -i osd_spec.yml

4. 部署RGW

4.1 RGW服务规范示例

- rgw_spec.yml

service_type: rgw
service_id: rgw
placement:
  label: rgw
  count_per_host: 2
networks:
- 172.16.0.0/24
spec:
  rgw_frontend_port: 8080
extra_container_args:
  - "-v"
  - "/etc/localtime:/etc/localtime:ro"

4.2 部署命令

ceph orch host label add ceph-node-0 rgw
ceph orch host label add ceph-node-1 rgw
ceph orch host label add ceph-node-2 rgw

ceph orch apply -i rgw_spec.yaml --dry-run
ceph orch apply -i rgw_spec.yaml

4.3 Dashboard集成

radosgw-admin user create --uid=rgw --display-name=rgw --system
ceph dashboard set-rgw-api-access-key -i access_key.txt
ceph dashboard set-rgw-api-secret-key -i secret_key.txt

5. 部署CephFS

ceph osd pool create cephfs-data cephfs-hdd-rule
ceph osd pool create cephfs-metadata cephfs-ssd-rule

ceph fs new cephfs cephfs-metadata cephfs-data

5.1 mds服务规范示例

- mds_spec.yml

service_type: mds
service_id: cephfs
placement:
  hosts:
    - ceph-node-0
    - ceph-node-1
    - ceph-node-2
extra_container_args:
  - "-v"
  - "/etc/localtime:/etc/localtime:ro"

5.2 部署命令

ceph orch apply -i mds_spec.yml --dry-run
ceph orch apply -i mds_spec.yml

6. 部署NFS

Cephadm 部署 NFS Ganesha 守护进程(或一组守护进程)。NFS 的配置存储在 nfs-ganesha 池中,导出通过 ceph nfs 命令或仪表板导出进行管理。

ceph osd pool create nfs-ganesha
ceph osd pool application enable nfs-ganesha nfs

6.1 nfs服务规范示例

- nfs_spec.yml

service_type: nfs
service_id: nfs
placement:
  hosts:
    - ceph-node-0
    - ceph-node-1
    - ceph-node-2
spec:
  port: 2050
extra_container_args:
  - "-v"
  - "/etc/localtime:/etc/localtime:ro"

6.2 部署命令

ceph orch apply -i nfs_spec.yaml --dry-run
ceph orch apply -i nfs_spec.yaml

7. 部署iSCSI

ceph osd pool create iscsi-config-data
ceph osd pool application enable iscsi-config-data iscsi

7.1 iSCSI服务规范示例

- iscsi_spec.yml

service_type: iscsi
service_id: iscsi
placement:
  hosts:
    - ceph-node-0
    - ceph-node-1
    - ceph-node-2
spec:
  pool: iscsi-config-data  # RADOS pool where ceph-iscsi config data is stored.
  trusted_ip_list: "172.16.0.1,172.16.0.2,172.16.0.3"
  api_user: admin
  api_password: 123456
  api_secure: false
extra_container_args:
  - "-v"
  - "/etc/localtime:/etc/localtime:ro"

7.2 部署命令

ceph orch apply -i iscsi_spec.yml --dry-run
ceph orch apply -i iscsi_spec.yml

8. 部署ingress

Cephadm将haproxy和keepalived两个封装成了ingress服务。

ingress是每个服务对应一个ingress,比如部署rgw ingress,nfs也有对应的ingress,未来还会有Ceph Dashboard的ingress,现在能部署的只有rgw ingress和nfs ingress。

8.1 RGW ingress

8.1.1 服务规范示例

- rgw_ingress_spec.yml

service_type: ingress
service_id: rgw.rgw  # adjust to match your existing RGW service
placement:
  hosts:
    - ceph-node-0
    - ceph-node-1
    - ceph-node-2
spec:
  backend_service: rgw.rgw  # adjust to match your existing RGW service
  virtual_ips_list:
    - 172.16.0.201/24
    - 172.16.0.202/24
    - 172.16.0.203/24
  frontend_port: 80
  monitor_port: 1967  # ex: 1967, used by haproxy for load balancer status
extra_container_args:
  - "-v"
  - "/etc/localtime:/etc/localtime:ro"

8.1.2 部署命令

ceph orch apply -i rgw_ingress_spec.yml --dry-run
ceph orch apply -i rgw_ingress_spec.yml

注意:这里的 backend_service 一定要通过 ceph orch ls 查看到实际的名称为准, frontend_port 为VIP的端口,注意到这里有个 monitor_port 这个的意思是haproxy状态页端口。

8.2 NFS ingress

8.2.1 服务规范示例

- nfs_ingress_spec.yml

service_type: ingress
service_id: nfs.nfs
placement:
  hosts:
    - ceph-node-0
    - ceph-node-1
    - ceph-node-2
spec:
  backend_service: nfs.nfs
  virtual_ip: 172.16.0.204/24
  frontend_port: 2049
  monitor_port: 1968
extra_container_args:
  - "-v"
  - "/etc/localtime:/etc/localtime:ro"

8.2.2 部署命令

ceph orch apply -i nfs_ingress_spec.yml --dry-run
ceph orch apply -i nfs_ingress_spec.yml

9. 常用排错命令

当部署出现问题可以执行以下命令查看详细信息:

ceph log last cephadm

也可以直接查看Service级别或Daemon级别的日志:

ceph orch ls --service_name=alertmanager --format yaml
ceph orch ps --service-name <service-name> --daemon-id <daemon-id> --format yaml

当daemon出现error,或是stop状态,可以使用以下命令重新启动:

ceph orch daemon restart rgw.rgw.ceph3.sfepof

当有多个Daemon状态不对时,也可以直接重启Service,就会自动重启Service关联的Daemon。

[root@ceph1 ~]# ceph orch restart mds.cephfs
Scheduled to start mds.cephfs.ceph1.znbbqq on host 'ceph1'
Scheduled to start mds.cephfs.ceph2.iazuaf on host 'ceph2'
Scheduled to start mds.cephfs.ceph3.hjuvue on host 'ceph3'

如果删除服务遇到一直在删除中,可以重启主机,例如:

[root@ceph1 ~]# ceph orch ls
NAME                       PORTS                      RUNNING  REFRESHED   AGE  PLACEMENT          
alertmanager               ?:9093,9094                    1/1  18m ago     10d  count:1            
cephfs-mirror                                             3/3  18m ago     2d   count:3            
crash                                                     5/5  19m ago     10d  *                  
grafana                    ?:3000                         1/1  18m ago     10d  count:1            
ingress.mgr                192.168.149.200:8443,8443      0/4  <deleting>  2h   ceph1;ceph2

 

posted @ 2023-02-21 08:38  Varden  阅读(645)  评论(0编辑  收藏  举报