学习视频:https://www.bilibili.com/video/BV16a411j78Q/?spm_id_from=333.337.search-card.all.click&vd_source=260d5bbbf395fd4a9b3e978c7abde437
[TOC]
2.0 ceph 2.0.1 存储机制 将待管理的数据流切分为一到多个固定大小的对象数据,并以其为原子单元完成数据存储
ceph通过内部的Crush机制,实时计算出一个文件应该存储到哪个存储对象中,从而实现快速查找对象的方式
2.0.2 各组件的硬件需求 当涉及硬件时,底层硬件决定系统的上限。
Ceph的优点之一是支持异构硬件,Ceph集群可以运行在来自多个厂商的硬件上,不存在因为硬件问题被厂商锁定的情况。在创建Ceph的底层基础设施时,客户可以根据预算及性能需求自行使用任何硬件,对于硬件的选用拥有完全的自主权和决策权。
无论想向云平台提供Ceph对象存储和Ceph块设备服务、部署文件系统,或者将Ceph用于其他目的,所有的ceph集群部署都从设置每个Ceph节点网络开始
一个Ceph存储集群至少一个Ceph Monitor、Ceph Manager 和 Ceph OSD,如果有运行文件系统的客户端,还需要配置MDSs
CPU Ceph的一些组件不是CPU依赖型
monitor守护进程 对CPU是轻量依赖的,只负责保持集群的状态而不给用户提供任何数据
不参与数据存储,不频繁利用内存,占用资源较少 单核CPU就可以完成,需要确保monitor有足够的内存、网络与磁盘空间 对于小集群,monitor可以与其他组件放在一起 OSD进程 需要大量的CPU资源(直接提供数据给客户端),需要进行一些数据处理
CPU(1GHz)和内存(2GB):建议在早期多配置内存和CPU资源,因为在JBOD系统中,可以随时为主机增加硬盘
建议双核CPU。若以纠删码的方式使用OSD,则需要四核处理器(纠删码需要大量计算)
当集群处于recovery状态时,OSD守护进程对处理器的占用很大
MDS守护进程 是CPU密集型。需要动态地分配负载
内存 当集群处于recovery状态时,内存消耗会明显增加
monitor和元数据守护进程需要快速对外响应,必须有足够的内存处理
从性能角度,为每个monitor和元数据守护进程必须大于2GB OSD不是内存密集型
磁盘 monitor硬件需求
若 日志信息(log) 存储在本地monitor节点,就要确保monitor节点上有 足够的磁盘空间 来存放日志文件 OSD硬件需求 OSD是Ceph 中主要存储单元,需要配置足够的硬盘
网络需求 带宽
以太网、InfiniBand网络、10G网络或更高带宽的网络
对于百TB级别的中等规模集群而言,1Gbit/s的网络也能正常工作。若考虑到未来的纵向扩展带来的工作负载(ROI/性能),建议为数据和集群管理分别采用10Gbit/s的物理隔离网络
当集群规模较大,需要为多个客户端提供服务,则应有10G以上的带宽
对于几百TB的超大Ceph集群,需要400Gbit/s的带宽
内外网络隔离
集群网络和客户端网络应该接在物理上隔离的交换机上:
公共网络(客户端网络)允许客户端与Ceph集群通信并访问集群中存储的数据 内部网络(集群网络)负责集群内诸如复制、恢复、再平衡和心跳检查等需要高带宽的操作
大多数情况下,集群内部网络流量更大(Ceph的OSD节点在内部使用):
数据冗余备份:若对于一个客户端的写入动作,数据备份了N次,则Ceph集群需要写N次。所有的冗余数据基于集群网络在对等节点间进行传输 数据的恢复和再平衡 冗余配置
在网络配置的各层采用冗余设计,如:网卡,端口,交换机和路由器
monitor硬件需求:1Gbit/s的双网卡
网络级别的冗余对于monitor很重要,因为monitor节点间需要进行仲裁 MDS需求 相较于Ceph的monitor与OSD,Ceph MDS比较占资源。
硬件需求
更强的CPU处理能力,四核或者更高 MDS依赖大量的数据缓存,需要更大的RAM资源 2.0.3 规划集群 限制条件 Ceph的各种组件应该避免复用。组件角色复用会给集群的运维和性能带来很大的影响。可以避免集群运行带来的不稳定因素,在考虑安全性与可靠性的前提下,必须满足一些限制条件:
至少配置3个monitor节点 每个节点至少配置3个OSD 至少配置两个manager节点 所有的OSD节点配置相同 若使用CephFS,至少配置2个配置完全相同的MDS节点 若使用Ceph 网关,至少配置2个不同的RGW节点 关于功能特性的备注 并不是支持所有的Ceph功能,即不是所有的功能都是稳定的,表中的几种指标及配置是经过企业落地实践校验的
特性 备注 副本策略 SSD:支持2副本,最低1副本,副本数少,影响数据可靠性 HDD:支持3副本,最低2副本,副本数少,影响数据可靠性 纠删码 支持在RGW和RBD两种模式下使用,MDS不支持纠删码 K+M的支持配比:8+3,8+4,4+2 集群的存储节点最少为k+m+1 RGW多站点 多站点配置中不支持Indexless Bucket Disk Size 最大容量12TB,不支持磁带 每个节点OSD数量 单节点最多配置36个OSD 单集群OSD数量 单集群最多配置2500个OSD Snapshot 单个RBD镜像支持512个快照,快照不支持RGW BlueStore 必须使用默认的分配器
服务器规划 在选型Ceph服务器时,必须确定Ceph的使用场景,不同的使用场景下有不同的配置考量,常见的Ceph使用场景有
追求良好IOPS 追求良好的吞吐量 追求低成本、高容量 追求良好的IOPS 随着闪存使用的增加,企业越来越多地将IOPS敏感型工作负载依托在Ceph集群,以便提高私有云存储解决方案的性能。在此场景下,可以把MySQL、MariaDB或PostgreSQL托管在Ceph集群,以支持结构化数据
硬件 配置 CPU 主频2GHz,则每个NVMe SSD使用6核或者每个非NVMe使用2核 RAM 16GB+5GB*OSD(16GB为基准,每增加一个OSD增加5GB) 数据盘 NVMe SSD BlueStore WAL/DB 可与NVMe SSD分配两个OSD 磁盘控制器 PCIe OSD进程数 每个NVMe分配2个OSD进程 网络 每2个OSD使用10GB带宽网络
追求良好吞吐量 Ceph集群通常可以存储半结构化数据,一般是顺序读写比较大的文件,需要提供很大的带宽。存储服务器上的磁盘可以使用SSD做日志加快HDD
硬件 配置 CPU 主频2GHz,则每个HDD使用0.5核 RAM 16GB+5GB*OSD(16GB为基准,每增加一个OSD增加5GB) 数据盘 7200RPM的HDD、SATA、SAS BlueStore WAL/DB 使用独立的NVMe SSD 或 SAS SSD作为加速盘 磁盘控制器 HBA(JBOD) OSD进程数 每个HDD分配1个OSD进程 网络 每12个OSD使用10GB带宽网络
最求低成本、高容量场景 低成本和高容量的解决方案用于处理存储容量较大、存储时间较长的数据,且按块顺序读写。数据可以是结构化或半结构化。存储内容包括媒体文件、大数据分析文件和磁盘镜像备份等。为了获得更高的效益,OSD与日志通常都托管在HDD。
硬件 配置 CPU 主频2GHz,则每个HDD使用0.5核 RAM 16GB+5GB*OSD(16GB为基准,每增加一个OSD增加5GB) 数据盘 NVMe SSD BlueStore WAL/DB 可与HDD数据盘同步 磁盘控制器 HBA(JBOD) OSD进程数 每个HDD分配1个OSD进程 网络 每两个OSD使用10GB带宽网络
2.1 Ceph 手动安装 2.1.1 获取软件包 访问官网获取RPM包以及第三方库
通过添加Ceph安装包的存储库,使用包管理工具下载
Dibian APT RHEL:YUM配置安装源 1 2 3 4 name= baseurl={ceph-release}/{distro} ceph-release:有效的Cep发行版名称 distro:Linux的发行版信息
2.1.2 安装依赖 安装RHEL库
安装Ceph需要的第三方二进制文件
创建Ceph存储库文件用于描述Ceph版本
安装Ceph软件包
验证软件包是否安装成功
2.1.3 部署Ceph集群 ceph.xxx.keyring:xxx级的密钥,负责同一集群的认证、各级对等节点间的相互认证 monitor部署 monmap负责集群中各组件关系的软件定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 # 1. 为Ceph创建一个目录,且创建Ceph集群配置文件 mkdir /etc/ceph touch /etc/ceph/ceph.conf # 2. 为集群生成fsid uuidgen # 3.创建集群配置文件 默认集群名称为ceph。配置文件名称为/etc/ceph/ceph.conf 使用uuid作为配置文件中的fsid参数 vim /etc/ceph/ceph.conf [mon.ceph-node2] mon_addr= host=ceph-node2 # 4. 为集群创建密钥环,生成monitor的密钥 ceph-authtool --creat-keyring /tmp/ceph.mon.keyring --gen-key -n mon. —-cap mon ‘allow *’ # 5. 创建client.admin用户 ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon ‘allow *’ --cap osd ‘allow *’ --cap mds ‘allow *’ # 6.将client.admin密钥添加到ceph.mon.keyring中 ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring # 7. 为第一个monitor生成monitor.map monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap # 8. 为monitor创建类似路径/cluster_name-monitor_node格式的目录 mkdir /var/lib/ceph/mon/ceph-ceph-node1 # 9.填入第一个monitor守护进程信息 ceph-mon --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring # 10.启动monitor服务 service ceph start # 11.查看Ceph集群状态及默认池 ceph osd lspools # 12. 将ceph.conf和ceph.client.admin.keyring 文件复制到ceph-node2,ceph-node3,让mon2,mon3可以发出集群命令 scp /etc/ceph/ceph.* ceph-node2:/etc/ceph scp /etc/ceph/ceph.* ceph-node3:/etc/ceph # 若上述步骤出现 Error Connecting to cluster的错误,需要为Ceph monitor守护进程关闭防火墙或修改防火墙规则
创建OSD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # 1. 检查系统中的可用磁盘 cep-disk list # 2. Ceph OSD基于GUID分区表(GPT)工作,需要将分区表改为GPT parted /dev/sdb mklabel GPT parted /dev/sdc mklabel GPT parted /dev/sdd mklabel GPT # 3. 提供集群以及文件系统信息 $ ceph-disk prepare --cluster {cluster-name} --cluster-uuid {fid} --fs-type {ext4/xfs/btrfs} {data-path} [{journal-path}] ceph-disk prepare --cluster ceph --cluster-uuid {fid} --fs-type ext4 /dev/sdb ceph-disk prepare --cluster ceph --cluster-uuid {fid} --fs-type ext4 /dev/sdc ceph-disk prepare --cluster ceph --cluster-uuid {fid} --fs-type ext4 /dev/sdd # 4. 激活OSD ceph-disk activate /dev/sdb ceph-disk activate /dev/sdc ceph-disk activate /dev/sdd # 5.激活OSD ceph -s # 硬盘的正常工作状态为 IN和UP # 6. 检查OSD树,给出关于OSD及其所在物理节点的信息 ceph tree
扩展集群 为保证集群节点的高可靠和高可用,需要配置冗余节点
$集群正常工作节点数>\frac{n}{2}$ ,即推荐奇数个节点才能避免在其他系统上看到Ceph集群的脑裂状态 扩展monitor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # 1. 登陆ceph-node2并创建目录 mkdir -p /var/lib/ceph/mon/ceph-ceph-node2 /tmp/ceph-node2 # 2. 编辑/etc/ceph/ceph.conf 文件,修改节点信息 vim /etc/ceph/ceph.conf [mon.ceph-node2] mon_addr= host=ceph-node2 # 3. 从Ceph集群中提取密钥环的信息 ceph auth get mon. -o /tmp/ceph-node2/monkeyring # 4. 从Ceph集群中获取monitor map信息 ceph mon getmap -o /tmp/ceph-node2/monmap # 5. 使用密钥和已有的monmap,构建一个新的集群 ceph-mon -i ceph-node2 --mkfs --monmap /tmp/ceph-node2/monmap --keyring /tmp/ceph-node2/monkeyring # 6.添加新的monitor到集群 ceph mon add ceph-node2 [ip_address] # 7. 检查集群状态,配置NTP以同步时间信息 ceph -s # 8. 添加ceph-node3作为第三个monitor
2.3 基于ceph-deploy搭建ceph集群 2.3.0 环境准备 Ceph版本 每个Ceph版本都有一个英文名称和一个数字形式的版本编号
x.0.z - 开发版
x.1.z - 候选版
x.2.z - 稳定、修正版
https://docs.ceph.com/en/latest/releases/
Ceph的安装工具
ceph-ansible:https://github.com/ceph/ceph-ansible #python
ceph-salt:https://github.com/ceph/ceph-salt #python
ceph-container:https://github.com/ceph/ceph-container #shell
ceph-chef:https://github.com/ceph/ceph-chef #Ruby
cephadm: https://docs.ceph.com/en/latest/cephadm/ #ceph 官方在ceph 15 版本加入的ceph部署工具
ceph-deploy:https://github.com/ceph/ceph-deploy #python
是一个ceph 官方维护的基于ceph-deploy 命令行部署ceph 集群的工具,基于ssh 执行可以sudo 权限的shell 命令以及一些python 脚本实现ceph 集群的部署和管理维护。
Ceph-deploy 只用于部署和管理ceph 集群,客户端需要访问ceph,需要部署客户端工具。
规划 网络配置
公有网络public: 192.168.192.0/24 私有网络cluster:192.168.252.0/24 主机规划
主机名 公有网络 私有网络 磁盘 admin 192.168.192.130 \ sda mon01 192.168.192.131 192.168.252.128 sda mon02 192.168.192.132 192.168.252.129 sda mon03 192.168.192.133 192.168.252.130 sda mgr01 192.168.192.134 192.168.252.131 sda mgr02 192.168.192.135 192.168.252.132 sda store01 192.168.192.136 192.168.252.133 sda、sdb、sdc store02 192.168.192.137 192.168.252.134 sda、sdb、sdc store03 192.168.192.138 192.168.252.135 sda、sdb、sdc
ceph集群角色很多,生产中资源少时,可以让一台主机结点运行多个角色,如:store01-0.3这三台主机可同时兼任mon/mgr角色
硬件配置 硬件推荐 http://docs.ceph.org.cn/start/hardware-recommendations/
所有结点2C2G
存储结点3块硬盘
1 2 3 # 硬盘 sda 20GB sdb、sdc 20GB
网络配置 1 2 ens33:NAT网络 VMnet8 设定为192.168.192.0/24 网段 ens37:仅主机 VMnet1 设定为192.168.252.0/24 网段,提供ceph集群网络
时间同步 对任何集群来说,时间同步非常重要
ceph要求默认各结点的时间误差不超过50ms
1 timedatectl set-timezone Asia/Shanghai
在所有虚拟机上安装并配置ntp(时间同步服务)
1 2 3 4 5 6 yum install ntp ntpdate -y ntpdate pool.ntp.org systemctl restart ntpdate.service systemctl restart ntpd.service systemctl enable ntpd.service systemctl enable ntpdate.service
防火墙与SELinux管理 确保为monitor的6789端口添加防火墙策略,
1 2 3 4 firewall-cmd --zone=public --add-port=6789/tcp --permanent firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent firewall-cmd --reload firewall-cmd --zone=public --list-all
若只是测试环境,可以关闭防火墙
1 2 3 4 # 关闭防火墙 ufw stop ufw disable 防火墙在系统启动时自动禁用
所有虚拟主机上禁用SELINUX
1 2 setenforce 0 sed -i s'/SELINUX,*=*enforcing/SELINUX=disabled'/g /etc/selinux/config
2.3.1 节点间ssh(免密)认证 主机名和解析 在所有主机下配置以下内容
1 2 3 4 5 6 7 8 9 10 11 cat >> /etc/hosts <<EOF 192.168.192.130 admin.wang.org admin 192.168.192.131 mon01.wang.org mon01 192.168.192.132 mon02.wang.org mon02 192.168.192.133 mon03.wang.org mon03 192.168.192.134 mgr01.wang.org mgr01 192.168.192.135 mgr02.wang.org mgr02 192.168.192.136 store01.wang.org store01 192.168.192.137 store02.wang.org store02 192.168.192.138 store03.wang.org store03 EOF
随着生产中主机节点越来越多,通过手工定制主机名的方式不适合主机管理。在企业中,主机名相关信息,倾向于通过内网dns来进行管理
radosgw,需要通过泛域名解析的机制来实现更加强大的面向客户端的主机名解析管理体系
实现基于ssh key的验证 1 2 # 允许root用户远程登录 vim /etc/ssh/sshd_config
1 2 # 重启ssh服务进程 service sshd restart
创建脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 # !/bin/bash # # Author: wangxiaochun # QQ: 29308620 # Date: 2021-05-08 # FileName: ssh_key_push.sh # URL: http://www.wangxiaochun.com # Description: 多主机基于ssh key 互相验证 # Copyright (C): 2021 All rights reserved # ******************************************************************** # 当前用户密码 PASS=admin # 设置网段最小和最大的地址的尾数 BEGIN=130 END=138 IP=`ip a s ens33 | awk -F'[ /]+' 'NR==4{print $3}'` NET=${IP%.*}. . /etc/os-release color () { RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \E[0m" echo -n "$1" && $MOVE_TO_COL echo -n "[" if [ $2 = "success" -o $2 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $" OK " elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE} echo -n $"FAILED" else ${SETCOLOR_WARNING} echo -n $"WARNING" fi ${SETCOLOR_NORMAL} echo -n "]" echo } # 安装sshpass install_sshpass() { if [[ $ID =~ centos|rocky|rhel ]];then rpm -q sshpass &> /dev/null || yum -y install sshpass else dpkg -l sshpass &> /dev/null || { sudo apt update;sudo apt -y install sshpass; } fi if [ $? -ne 0 ];then color '安装 sshpass 失败!' 1 exit 1 fi } scan_host() { [ -e ./SCANIP.log ] && rm -f SCANIP.log for((i=$BEGIN;i<="$END";i++));do ping -c 1 -w 1 ${NET}$i &> /dev/null && echo "${NET}$i" >> SCANIP.log & done wait } push_ssh_key() { #生成ssh key [ -e ~/.ssh/id_rsa ] || ssh-keygen -P "" -f ~/.ssh/id_rsa sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no root@$IP &>/dev/null ip_list=(`sort -t . -k 4 -n SCANIP.log`) for ip in ${ip_list[*]};do sshpass -p $PASS scp -o StrictHostKeyChecking=no -r ~/.ssh root@${ip}: &>/dev/null done #把.ssh/known_hosts拷贝到所有主机,使它们第一次互相访问时不需要输入yes回车 for ip in ${ip_list[*]};do scp ~/.ssh/known_hosts @${ip}:.ssh/ &>/dev/null color "$ip" 0 done } install_sshpass scan_host push_ssh_key
导入脚本
1 2 3 root@admin:/home/admin# sudo apt install lrzsz rz
脚本执行
所有主机通过cephadm用户实现免密登录 为所有节点创建cephadm用户 接下来操作,基本都在 admin 这个管理节点的主机上运行,基于安全考虑不用root用户管理,倾向与用一个普通用户来操作
由于后续安装软件,涉及root用户权限,所以这个普通用户最好具备 sudo 的权限
此管理用户名称不能使用ceph名称,ceph后续会自动创建此用户
方法1
1 2 3 4 5 6 7 # 在所有主机上创建普通用户 useradd -m -s /bin/bash cephadm echo cephadm:123456 / chpasswd # 为用户配置root权限 echo "cephadm ALL = (root) NOPASSWD:ALL" > /etc/sudoers.d/cephadm chmod 0440 /etc/sudoers.d/cephadm
方法2
脚本实现批量创建用户
1 2 3 4 5 6 7 8 9 10 11 # 用脚本实现批量创建用户 cat > create_cephadm.sh <<EOF # !/bin/bash # 设定普通用户 useradd -m -s /bin/bash cephadm echo cephadm:123456 | chpasswd echo "cephadm ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/cephadm chmod 0440 /etc/sudoers.d/cephadm EOF # 批量执行 for i in {130..138}; do ssh root@192.168.192.$i bash < create_cephadm.sh ; done
检测是否创建用户
1 2 ll /etc/passwd cat /etc/passwd
跨主机免密登录 1 2 3 4 5 6 7 8 9 10 11 su - cephadm ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa # 跨主机密码认证 # 将本地公钥复制给远程端,则本地可ssh访问远程也能够端 PASS=123456 for i in {130..138};do sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no cephadm@192.168.192.$i done vim .bashrc
2.3.2 为所有节点配置安装源 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 在管理节点准备脚本,注意以root身份执行 [root@admin ~]cat > ceph_repo.sh <<EOF # !/bin/bash # 更新ceph的软件源信息 echo "deb https://mirrors.aliyun.com/ceph/debian-quincy/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ceph.list wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add - apt update EOF # 因为所有节点都会依赖于这些apt源信息,需要进行同步 [root@admin ~]for i in {130..138};do ssh -o StrictHostKeyChecking=no 192.168.192.$i bash < ceph_repo.sh;done # 去其他结点查看 cat /etc/apt/sources.list.d/ceph.list
2.3.3 管理主机节点部署ceph的安装环境 admin节点主机安装ceph-deploy工具 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # 安装 cephadm@admin:~$sudo apt-cache madison ceph-deploy # 查看版本 cephadm@admin:~$sudo apt -y install ceph-deploy # 验证成功和查看版本 cephadm@admin:~$ceph-deploy --version 2.0.1 # 查看帮助手册 cephadm@admin:~$ceph-deploy --help # new:开始部署一个新的ceph 存储集群,并生成CLUSTER.conf 集群配置文件和keyring 认证文件。 # install: 在远程主机上安装ceph 相关的软件包, 可以通过--release 指定安装的版本。 # rgw:管理RGW 守护程序(RADOSGW,对象存储网关)。 # mgr:管理MGR 守护程序(ceph-mgr,Ceph Manager DaemonCeph 管理器守护程序)。 # mds:管理MDS 守护程序(Ceph Metadata Server,ceph 源数据服务器)。 # mon:管理MON 守护程序(ceph-mon,ceph 监视器)。 # gatherkeys:从指定的获取提供新节点验证keys,这些keys 会在添加新的MON/OSD/MD 加入的时候使用。 # disk:管理远程主机磁盘。 # osd:在远程主机准备数据磁盘,即将指定远程主机的指定磁盘添加到ceph 集群作为osd 使用。 # repo: 远程主机仓库管理。 # admin:推送ceph集群配置文件和client.admin 认证文件到远程主机。 # config:将ceph.conf 配置文件推送到远程主机或从远程主机拷贝。 # uninstall:从远端主机删除安装包。 # urgedata:从/var/lib/ceph 删除ceph 数据,会删除/etc/ceph 下的内容。 # purge: 删除远端主机的安装包和所有数据。 # forgetkeys:从本地主机删除所有的验证keyring, 包括client.admin, monitor, bootstrap 等认证文件。 # pkg: 管理远端主机的安装包。 # calamari:安装并配置一个calamari web 节点,calamari 是一个web 监控平台。
2.3.4 创建集群并初始化 初始化第一个mon节点,准备创建集群
只是生成一些配置,并未做实际安装
初始化第一个mon节点的命令格式为 ceph-deploy new {initial-monitor-node(s)}
mon01 即为第一个mon结点名称,其名称必须与节点当前实际使用的主机名称( uname -n
) 保持一致,即可以是短名称,也可以是长名称 但短名称会导致错误: ceph-deploy new: error: hostname: xxx is not resolvable 推荐使用完整写法:hostname:fqdn
如:mon01:mon01.wang.org
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 # 首先在管理节点上以cephadm用户创建集群相关的配置文件目录 cephadm@admin:~$mkdir ceph-cluster && cd ceph-cluster # 运行如下命令即可生成初始配置: cephadm@admin:~/ceph-cluster$ ceph-deploy new --public-network 192.168.192.0/24 --cluster-network 192.168.252.0/24 mon01:mon01.wang.org # ceph.conf # ceph-deploy-ceph.log # ceph.mon.keyring cat ceph.conf [global] fsid = e9664a14-197f-4bfe-bc2e-e585ba02fa4c public_network = 192.168.192.0/24 cluster_network = 192.168.252.0/24 # 可以用逗号做分割添加多个mon 节点 mon_initial_members = mon01 mon_host = 192.168.192.131 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx # 注意:如果部署过程出现问题,需要清空 ceph-deploy forgetkeys ceph-deploy purge mon0{1,2,3} mgr0{1,2} store0{1,2,3} ceph-deploy purgedata mon0{1,2,3} mgr0{1,2} store0{1,2,3} rm ceph.* # 如果想要一下子将所有的mon节点都部署出来,我们可以执行下面的命令 ceph-deploy new --public-network 192.168.192.130/24 --cluster-network 192.168.252.0/24 mon01:mon01.wang.org mon02:mon02.wang.org mon03:mon03.wang.org cephadm@admin:~/ceph-cluster$ cat ceph.conf [global] fsid = a168efb2-3012-48b3-aac7-31a11c232235 public_network = 192.168.192.130/24 cluster_network = 192.168.252.0/24 mon_initial_members = mon01, mon02, mon03 mon_host = 192.168.192.131,192.168.192.132,192.168.192.133 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx
没出这个问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # 原因分析:因为 python3.8 已经没有这个方法了 cephadm@admin:~/ceph-cluster$ dpkg -l python3 期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h) | 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待 (W)/触发器未决(T) |/ 错误?=(无)/须重装(R) (状态,错误:大写=故障) ||/ 名称 版本 体系结构 描述 +++-==============-==============-============- ========================================================================= ii python3 3.8.2-0ubuntu2 amd64 interactive high-level objectoriented language (default python3 version) # 解决方法: cephadm@admin:~/ceph-cluster$sudo vim /usr/lib/python3/dist-packages/ceph_deploy/hosts/remotes.py def platform_information(_linux_distribution=None): """ detect platform information from remote host """ 行首加#号注释下面两行 # linux_distribution = _linux_distribution or platform.linux_distribution # distro, release, codename = linux_distribution() 在上面两行下面添加下面6行 distro = release = codename = None try: linux_distribution = _linux_distribution or platform.linux_distribution distro, release, codename = linux_distribution() except AttributeError: pass .......
2.3.5 mon节点安装软件 初始化存储节点等于在存储节点安装了ceph 及ceph-rodsgw
默认情况下,ceph-deploy会安装最新版本的ceph,若需要指定ceph版本,添加参数 --release {ceph-release-name}
1 2 3 4 5 6 7 8 9 # 命令格式: ceph-deploy install --{role} {ceph-node} [{ceph-node} ...] # 注意:这里主要是ceph的工作角色的的节点 # 方法1:使用ceph-deploy命令能够以远程的方式连入Ceph集群各节点完成程序包安装等操作 # 一般情况下,不推荐使用这种直接的方法来进行安装,效率太低,实际上也是在各节点上执行方法2 ceph-deploy install --mon mon01 mon02 mon03 # 还有另外一种方法,手工在所有节点上安装ceph软件 apt install -y ceph ceph-osd ceph-mds ceph-mon radosgw
如:在mon01,02,03上安装mon相关的包
1 2 3 4 5 # 在mon节点安装mon组件 cephadm@admin:~/ceph-cluster$ ceph-deploy install --no-adjust-repos --nogpgcheck --mon mon01 mon02 mon03 # 或者直接在mon节点安装软件 [root@mon01 ~] apt -y install ceph-mon
安装完成后,发现创建了ceph用户
1 2 # 自动创建ceph用户 [root@mon01 ~] getent passwd ceph
验证在mon 节点已经自动安装并启动了ceph-mon 服务,并且后期在ceph-deploy 节点初始化目录会生成一些ceph.bootstrap -mds/mgr/osd/rgw 等服务的keyring 认证文件,这些初始化文件拥有对ceph 集群的最高权限,所以一定要保存好。
1 2 3 4 5 # 查看到mon01节点安装了ceph相关的包 [root@mon01 ~] dpkg -l |grep ceph # 自动运行相关进程 [root@mon01 ~] ps aux|grep ceph
2.2.6 部署mon节点——集群认证和管理 初始化mon节点生成配置信息并分发密钥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 初始化mon节点前,应在ceph.conf中配置monitor信息 [global] fsid = a168efb2-3012-48b3-aac7-31a11c232235 public_network = 192.168.192.130/24 cluster_network = 192.168.252.0/24 mon_initial_members = mon01, mon02, mon03 mon_host = 192.168.192.131,192.168.192.132,192.168.192.133 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx # 初始化MON节点,并收集密钥 cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf mon create-initial # 注意:为了避免因为认证方面导致的通信失败,推荐使用 --overwrite-conf 参数 # 如果是在一个现有的环境上部署业务,可以先推送基准配置文件 ceph-deploy --overwrite-conf config push mon01 mon02 mon03
范例: 初始化 mon 节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf mon create-initial [ceph_deploy.gatherkeys][INFO ] Storing ceph.client.admin.keyring [ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mds.keyring [ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mgr.keyring [ceph_deploy.gatherkeys][INFO ] keyring 'ceph.mon.keyring' already exists [ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-osd.keyring [ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-rgw.keyring [ceph_deploy.gatherkeys][INFO ] Destroy temp directory /tmp/tmpf0cb5m1s # 生成配置文件 cephadm@admin:~/ceph-cluster$ ls ceph.bootstrap-mds.keyring 引导启动 mds的密钥文件 ceph.bootstrap-mgr.keyring 引导启动 mgr的密钥文件 ceph.bootstrap-osd.keyring 引导启动 osd的密钥文件 ceph.bootstrap-rgw.keyring 引导启动 rgw的密钥文件 ceph.client.admin.keyring ceph客户端和管理端通信的认证密钥,是最重要的 ceph.conf ceph-deploy-ceph.log ceph.mon.keyring # 结果显示:这里生成了一系列的与ceph集群相关的 认证文件 # 注意:ceph.client.admin.keyring 拥有ceph集群的所有权限,一定不能有误。
这时在mon01上启动了一些进程
1 2 # 到mon的节点上查看mon的自动开启相应的守护进程 [root@mon01 ~]ps aux|grep ceph
推送密钥实现集群的管理 为了后续的监控环境认证操作,在admin角色主机上,把配置文件和admin密钥拷贝到Ceph集群各监控角色节点mon
若不在这些mon节点机器上管理集群,则不需要这一步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # ceph-deploy --overwrite-conf config push mon01 mon02 mon03 # 执行集群的认证文件的拷贝动作 ceph-deploy admin --help usage: ceph-deploy admin [-h] HOST [HOST ...] Push configuration and client.admin key to a remote host. positional arguments: HOST host to configure for Ceph administration optional arguments: -h, --help show this help message and exit ceph-deploy admin mon01 mon02 mon03
如:在mon节点实现集群管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 # 拷贝前效果 [root@mon01 ~] ls /etc/ceph/ ceph.conf rbdmap tmpk0vsd0on root@mon02:/home/mon02# ls /etc/ceph ceph.conf rbdmap tmprm7hc0mf root@mon03:~# ls /etc/ceph/ ceph.conf rbdmap tmp1mrnb7qm cephadm@admin:~/ceph-cluster$ ceph-deploy admin mon01 mon02 mon03 # 查看效果 root@mon01:/home/mon01# ls /etc/ceph/ ceph.client.admin.keyring ceph.conf rbdmap tmpk0vsd0on root@mon02:/home/mon02# ls /etc/ceph ceph.client.admin.keyring ceph.conf rbdmap tmprm7hc0mf root@mon03:~# ls /etc/ceph/ ceph.client.admin.keyring ceph.conf rbdmap tmp1mrnb7qm # 结果显示:这里多了一个 ceph的客户端与服务端进行认证的密钥文件了。 # ceph.client.admin.keyring 主要用于ceph节点与管理端的一个通信认证。 # 注意:如果我们不做交互式操作的话,这个文件可以不用复制。 root@mon01:/home/mon01# cat /etc/ceph/ceph.client.admin.keyring [client.admin] key = AQAyrTRl2m24GBAAT5lAYOvgyOejaU4URoZCUw== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" root@mon02:/home/mon02# cat /etc/ceph/ceph.client.admin.keyring [client.admin] key = AQAyrTRl2m24GBAAT5lAYOvgyOejaU4URoZCUw== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" root@mon03:~# cat /etc/ceph/ceph.client.admin.keyring [client.admin] key = AQAyrTRl2m24GBAAT5lAYOvgyOejaU4URoZCUw== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"
问题:虽然我们把认证文件传递给对应的监控角色主机了,但是我们的管理机是通过普通用户cephadm来进行交流的。而默认情况下,传递过去的认证文件,cephadm普通用户是无法正常访问的,如下:
1 2 3 # cephadm用户执行命令因文件权限会出错 [root@mon01 ~] su - cephadm [cephadm@mon01 ~]$ceph -s
需要在Ceph集群中需要运行ceph命令的节点上,以root用户的身份设定普通用户cephadm能够读取/etc/ceph/ceph.client.admin.keyring文件的权限。
1 2 [root@mon01,02,03 ~] sudo apt install acl [root@mon01,02,03 ~] sudo setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring
然后监控节点就可以自己来收集相关的数据了,比如我们在mon01上执行如下命令
1 2 3 4 5 6 7 [root@mon01 ~] su - cephadm # 查看状态 [cephadm@mon01 ~]$ceph -s # 集群状态不正常的原因,我们可以通过 ceph health命令来进行确认,效果如下 [cephadm@mon01 ~]$ceph health
部署集群的admin节点实现远程管理 在哪个主机上管理集群,就在哪个节点上安装 ceph-common
当前的这些状态查看,只能到对应的节点主机上来进行,这个ceph命令是依赖于 ceph-common软件的。
其实为了方便集群的管理,一般会通过远程的方式来进行远程主机状态的查询。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 # 1.安装管理工具包 cephadm@admin:~/ceph-cluster$sudo apt -y install ceph-common # 自动生成目录和配置文件 cephadm@admin:~/ceph-cluster$ ls /etc/ceph/ rbdmap # 2. 推送配置和相关key文件到管理节点 cephadm@admin:~/ceph-cluster$ceph-deploy admin admin # 验证文件 cephadm@admin:~/ceph-cluster$ ls /etc/ceph/ ceph.client.admin.keyring ceph.conf rbdmap tmpzp2_08ah # 3. 一些文件因为权限问题无法复制,需要acl修改权限后复制 cephadm@admin:~/ceph-cluster$sudo apt install acl -y cephadm@admin:~/ceph-cluster$sudo setfacl -m u:cephadm:rw /etc/ceph/ceph.client.admin.keyring # 检查效果 cephadm@admin:~/ceph-cluster$ ceph -s cluster: id: 75c70a9d-790a-4859-9374-39159d37eca1 health: HEALTH_WARN mon is allowing insecure global_id reclaim services: mon: 1 daemons, quorum mon01 (age 31m) mgr: no daemons active 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: # 消除 mon is allowing insecure global_id reclaim的报警信息 cephadm@admin:~/ceph-cluster$ ceph config set mon auth_allow_insecure_global_id_reclaim false # 再次查看没有告警信息 cephadm@admin:~/ceph-cluster$ ceph -s
2.2.7 部署mgr节点 Ceph-MGR工作的模式是事件驱动型的,简单来说,就是等待事件,事件来了则处理事件返回结果,又继续等待。 Ceph MGR 是自从 Ceph 12.2 依赖主推的功能之一,是负责 Ceph 集群管理的组件,它主要功能是把集群的一些指标暴露给外界使用。根据官方的架构原则上来说,mgr要有两个节点来进行工作。
对于测试环境其实一个就能够正常使用了,暂时先安装一个节点,后面再安装第二个节点。
安装mgr相关软件 1 2 3 4 5 6 7 8 # 方法1:在管理节点远程安装mgr软件到mgr节点 cephadm@admin:~/ceph-cluster$ ceph-deploy install --mgr mgr01 # 方法2:在mgr01节点手动安装软件 [root@mgr01 ~] apt -y install ceph-mgr # 发现安装了相关包 [root@mgr01 ~] dpkg -l | grep ceph
配置Mgr节点启动ceph-mgr进程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 创建mgr节点并生成相关配置 cephadm@admin:~/ceph-cluster$ ceph-deploy mgr create mgr01 # 自动在mgr01节点生成配置文件和用户 [root@mgr01 ~] ls /etc/ceph/ ceph.conf rbdmap tmp8zt3kkj8 [root@mgr01 ~] getent passwd ceph ceph:x:64045:64045:Ceph storage service:/var/lib/ceph:/usr/sbin/nologin # 开启相关进程 [root@mgr01 ~] ps aux|grep ceph ceph 35476 0.0 0.5 24468 11532 ? Ss 20:45 0:00 /usr/bin/python3 /usr/bin/ceph-crash ceph 43250 8.3 8.9 897816 176364 ? Ssl 20:54 0:05 /usr/bin/ceph-mgr -f --cluster ceph --id mgr01 --setuser ceph --setgroup ceph root 43375 0.0 0.0 12000 720 pts/2 S+ 20:55 0:00 grep --color=auto ceph # 查看集群状态 cephadm@admin:~/ceph-cluster$ ceph -s # 结果显示:这个时候,service上,多了一个mgr的服务,在mgr01节点上,服务状态是 active。
2.2.8 部署 OSD 存储节点 要设置OSD环境,一般执行下面步骤:
要知道对应的主机上有哪些磁盘可以提供给主机来进行正常的使用。 格式化磁盘(非必须) ceph擦除磁盘上的数据 添加osd 环境准备 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 所有的存储节点主机都准备了两块额外的磁盘, [root@store01 ~] lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 63.3M 1 loop /snap/core20/1828 loop1 7:1 0 4K 1 loop /snap/bare/5 loop2 7:2 0 63.5M 1 loop /snap/core20/2015 loop3 7:3 0 346.3M 1 loop /snap/gnome-3-38-2004/119 loop4 7:4 0 349.7M 1 loop /snap/gnome-3-38-2004/143 loop5 7:5 0 91.7M 1 loop /snap/gtk-common-themes/1535 loop6 7:6 0 46M 1 loop /snap/snap-store/638 loop7 7:7 0 49.9M 1 loop /snap/snapd/18357 loop8 7:8 0 40.9M 1 loop /snap/snapd/20290 sda 8:0 0 20G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 19.5G 0 part / sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sr0 11:0 1 4.1G 0 rom /media/store01/Ubuntu 20.04.6 LTS amd64 # 如果不想查看大量无效设备的话,可以执行下面清理操作 sudo apt autoremove --purge snapd -y
安装OSD存储结点相关软件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # 1. 确认仓库配置 [root@store01 ~] cat /etc/apt/sources.list.d/ceph.list deb https://mirror.tuna.tsinghua.edu.cn/ceph/debian-pacific/ focal main wget -q -O- https://download.ceph.com/keys/release.asc # 2. 安装OSD相关软件 # 方法1: 在管理节点远程安装 cephadm@admin:~/ceph-cluster$ ceph-deploy install --release pacific --osd store01 # 方法2: 在OSD主机手动安装 [root@store01 ~] apt -y install ceph-osd # 3. 确认安装结果 # 自动生成用户ceph [root@store01 ~] tail -n1 /etc/passwd [root@store01 ~] dpkg -l |grep ceph ii ceph-base 16.2.14-1focal amd64 common ceph daemon libraries and management tools ii ceph-common 16.2.14-1focal amd64 common utilities to mount and interact with a ceph storage cluster ii ceph-osd 16.2.14-1focal amd64 OSD server for the ceph storage system ii libcephfs2 16.2.14-1focal amd64 Ceph distributed file system client library ii python3-ceph-argparse 16.2.14-1focal all Python 3 utility libraries for Ceph CLI ii python3-ceph-common 16.2.14-1focal all Python 3 utility libraries for Ceph ii python3-cephfs 16.2.14-1focal amd64 Python 3 libraries for the Ceph libcephfs library [root@store01 ~] ls /etc/ceph/ [root@store01 ~] ps aux|grep ceph ceph 30953 0.0 0.6 24164 11940 ? Ss 21:18 0:00 /usr/bin/python3.8 /usr/bin/ceph-crash store01 39320 0.0 0.0 12000 716 pts/1 S+ 21:22 0:00 grep --color=auto ceph
查看所有可用的osd磁盘 1 2 # 检查并列出OSD节点上所有可用的磁盘的相关信息 cephadm@admin:~/ceph-cluster$ ceph-deploy disk list store01
报错原因是 python 版本问题
1 2 3 # 修改375行,将 if line.startswith('Disk /' ): 更改为 if line.startswith(b'Disk /' ) # 只在'Disk前加一个字母 b 即可 cephadm@admin:~$sudo vim +375 /usr/lib/python3/dist-packages/ceph_deploy/osd.py
1 cephadm@admin:~/ceph-cluster$ ceph-deploy disk list store01
清除OSD磁盘数据 在管理节点上使用ceph-deploy命令擦除计划专用于OSD磁盘上的所有分区表和数据以便用于OSD
注意: 如果硬盘是无数据的新硬盘此步骤可以不做
1 2 ceph-deploy disk zap [-h] [--debug] [HOST] DISK [DISK ...] # 说明此操操作本质上就是执行dd if =/dev/zero of=disk bs=1M count=10
如:
1 cephadm@admin:~/ceph-cluster$for i in {1..3};do ceph-deploy disk zap store0$i /dev/sdb /dev/sdc;done
配置OSD存储结点 对于OSD的相关操作,可以通过 ceph-deploy osd
命令来进行,帮助信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 查看帮助 cephadm@admin:~/ceph-cluster$ ceph-deploy osd --help # 帮助显示:这里提示了两类的存储机制: # 默认情况下用的就是 bluestore类型 # 对于bluestore来说,它主要包括三类数据: --data /path/to/data #ceph 保存的对象数据 --block-db /path/to/db-device #数据库,即为元数据 --block-wal /path/to/wal-device #数据库的 wal 日志 # 生产建议data和wal日志分别存放 # 对于filestore来说,它主要包括两类数据 --data /path/to/data #ceph的文件数据 --journal /path/to/journal #文件系统日志数据 # 对于 osd来说,它主要有两个动作: list 列出osd相关的信息 create 创建osd设备
如: 创建OSD存储所有信息都存储在一起
1 2 3 4 5 cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf osd create --data /dev/sdb # 查看命令执行后的ceph的集群状态 cephadm@admin:~/ceph-cluster$ ceph -s # 查看osd状态 cephadm@admin:~/ceph-cluster$ ceph osd status
1 2 3 4 5 6 7 8 9 10 cephadm@admin:~/ceph-cluster$ ceph-deploy osd list store01 # 查看自动启动相关进程 [root@store01 ~] ps aux|grep ceph # 将第二块磁盘也加入OSD cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf osd create store01 --data /dev/sdc # 每个磁盘对应一个OSD进程 [root@store01 ~] ps aux|grep ceph
每个磁盘生成对应的一个逻辑卷 每个osd磁盘生成一个service 添加后续所有OSD结点的磁盘 1 2 3 4 5 6 7 8 9 10 11 12 13 # 安装软件 # 方法1: 在管理节点远程安装 cephadm@admin:~/ceph-cluster$ ceph-deploy install --release pacific --osd store02 store03 # 方法2: 在OSD主机手动安装 [root@store02 ~]#apt -y install ceph-osd [root@store03 ~]#apt -y install ceph-osd # 接下来通过批量操作的方式,将其他节点主机的磁盘都格式化 for i in {2..3};do ceph-deploy --overwrite-conf osd create store0$i --data /dev/sdb ceph-deploy --overwrite-conf osd create store0$i --data /dev/sdc done
2.2.9 查看集群最终状态 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cephadm@admin:~/ceph-cluster$ ceph -s cluster: id: 75c70a9d-790a-4859-9374-39159d37eca1 health: HEALTH_OK services: mon: 1 daemons, quorum mon01 (age 4h) mgr: mgr01(active, since 3h) osd: 6 osds: 6 up (since 75s), 6 in (since 75s) data: pools: 1 pools, 1 pgs objects: 0 objects, 0 B usage: 1.7 GiB used, 118 GiB / 120 GiB avail pgs: 1 active+clean # 查看管理配置完毕后的osd数量 cephadm@admin:~/ceph-cluster$ ceph-deploy osd list store0{1..3} # 查看状态 cephadm@admin:~/ceph-cluster$ ceph osd status
2.2.10 扩展高可用 实现mgr节点高可用 当前只有一个Mgr节点主机,存在SPOF,添加新的Mgr节点实现高可用
Ceph Manager守护进程以Active/Standby模式运行,部署其它ceph-mgr守护程序可确保在Active节点或其上的ceph-mgr守护进程故障时,其中的一个Standby实例可以在不中断服务的情况下接管其任务。
注意:如果所有Mgr节点故障,将集群将无法正常工作
添加后续的Mgr节点命令格式
1 ceph-deploy mgr create 节点名称
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 1. 在新mgr结点上安装mgr软件 # 方法1:在管理节点远程在mgr02节点上安装Mgr软件 cephadm@admin:~/ceph-cluster$ ceph-deploy install --mgr mgr02 # 方法2:在mgr02节点手动安装软件 [root@mgr02 ~]#apt -y install ceph-mgr # 2. 添加第二个 Mgr节点 cephadm@admin:~/ceph-cluster$ ceph-deploy mgr create mgr02 # 3. 查看 cephadm@admin:~/ceph-cluster$ ceph -s # 结果显示:mgr01节点就是主角色节点,mgr02是从角色节点。 # 关闭mgr01节点,mgr02节点自动成为active节点 [root@mgr01 ~]#poweroff [root@admin ~]#ceph -s
扩展mon结点高可用 当前只有一个mon结点主机,存在SPOF,添加新的mon结点实现高可用
如果 $n$ 个结点,至少需要保证 $\frac{n}{2}$ 个以上的健康mon结点,ceph集群才能正常使用
1 2 3 4 5 # 先在新mon节点安装mon软件 ceph-deploy install --mon mon节点名称 # 添加后续的mon节点命令 ceph-deploy mon add mon节点名称 # 注意:如果add换成destroy,则变成移除mon节点
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # 1. 在新的mon结点安装mon软件 # 方法1:在mon02节点上安装mon软件 cephadm@admin:~/ceph-cluster$ ceph-deploy install --mon mon02 # 方法2:在mon02节点手动安装mon软件也可以 [root@mon02 ~] apt -y install ceph-mon # 2. 添加在mon02节点 cephadm@admin:~/ceph-cluster$ ceph-deploy mon add mon02 # 3. 添加mon03节点 cephadm@admin:~/ceph-cluster$ ceph-deploy install --mon mon03 cephadm@admin:~/ceph-cluster$ ceph-deploy mon add mon03 # 4. 修改ceph配置添加后续的Mon节点信息 cephadm@admin:~/ceph-cluster$vim ceph.conf mon_host = 192.168.192.131,192.168.192.132,192.168.192.133 # 同步ceph配置文件到所有ceph节点主机 cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf config push admin mon0{1,2,3} mgr0{1,2} store0{1,2,3} # 5. 重新生成初始化配置信息 ceph-deploy --overwrite-conf mon create-initial # 注意:为了避免因为认证方面导致的通信失败,推荐使用 --overwrite-conf 参数 # 如果是在一个现有的环境上部署业务,可以先推送基准配置文件 ceph-deploy --overwrite-conf config push mon01 mon02 mon03 # 6. 查看 cephadm@admin:~/ceph-cluster$ ceph -s
2.4 升级Ceph集群 只需要安装升级Ceph安装包,依次升级安装
monitor MGR OSD MDS RADOS网关 升级完同一类型的守护进程后再升级其他类型,最后重启服务(通常不需要关闭存储服务)
检查Ceph守护进程的当前版本
service ceph status
升级Ceph源至期望的版本(如firefly)
只需在 /etc/yum.repos.d/ceph.repo 文件中更新Ceph发行版的名称
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [ceph] name=Ceph package for $basearch baseurl=http://ceph.com/rpm-firefly/e16/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc [ceph-noarch] name=Ceph noarch $basearch baseurl=http://ceph.com/rpm-firefly/e16/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc [ceph-source] name=Ceph nosource $basearch baseurl=http://ceph.com/rpm-firefly/e16/SRMPS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
更新ceph软件
重启monitor守护进程
1 service ceph restart mon osd
检查monitor,osd守护进程版本
1 service ceph status mon osd
检查monitor,osd守护进程状态