文章目录
- 1、搭建的要求
- 1、OSD约束
- 2、ceph部署方式
- 1、cephadm的部署原理
- 红帽版本搭建(RHCS5.0部署)
- 2、cephadm安装P版本
- 1、环境要求
- 2、配置主机名,关闭防火墙,时间同步
- 3、检查python环境和容器运行时环境
- 4、部署引导节点(下载cephadm脚本)
- 1、获取脚本
- 2、添加ceph仓库,安装cephadm命令,修改仓库镜像仓库地址,安装ceph客户端工具
- 3、cephadm初始化
- 4、cephadm容器操作
- 5、添加主机
- 6、ceph orch操作
- 1、根据服务类型进行编排
- 2、手动进行编排
- 3、停止,删除,重启服务等操作
- 4、查询服务进程
- 7、添加OSD
- 1、手动添加OSD
- 2、自动方式添加OSD
- 8、安装成功了
- 3、cephadm脚本原理
- 1、cephadm最小化安装
- 2、ceph编排器
- 3、各个容器作用
- 4、各个服务端口
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集群(利用容器仓库)
-
搭建了一个ceph最小化后,利用mgr的扩展进行扩展节点
-
通过ceph密钥进行管理其他节点
2、ceph编排器
- 通过这些接口实现这些功能
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