CEPH安装与使用
1.Ceph介绍
Ceph 是高度可靠、易于管理,并免费的分布式存储系统,在一个系统中提供对象存储、块设备存储和文件系统服务。
官网文档: https://docs.ceph.com/en/latest/
2. Ceph 核心组件及功能介绍
Ceph的核心组件包括Ceph OSD、Ceph Monitor、Ceph Manager和Ceph MDS。
OSD的英文全称是Object Storage Device,它的主要功能是存储数据、复制数据、平衡数据、恢复数据等,并通过检查其他Ceph OSD守护程序的心跳来向 Ceph 监视器和管理器提供一些监视信息。通常至少需要3个Ceph OSD才能实现冗余和高可用性。
Monitor 负责监视Ceph集群,维护Ceph集群的健康状态、各种Map图,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。
Ceph Manager 守护程序(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager守护程序还托管基于Python的模块来管理和公开Ceph集群信息,包括基于Web的Ceph仪表板和REST API。高可用性通常至少需要两个管理器。
MDS全称是Ceph MetaData Server,主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的。
1、基础架构图
Ceph最底层、最核心的是RADOS,RADOS自身是一个完整的分布式对象存储系统,它具有可靠、智能、分布式特性,主要由OSD、Monitor。
LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多语言。
RADOSGW基于REST协议网关,兼容S3和Swift。
RBD基于linux内核客户端和QEMU/KVM驱动提供分布式块设备。
CEPHFS提供了POSIX(可移植操作系统接口)接口,直接通过客户端挂载使用,通过内核的net模块与RADOS交互。
2、数据读写图
3、Cephfs
2. Ceph安装
ceph分布式文件系统存储使用octopus版本,与以前版本不同的是,octopus是采用了docker容器化的安装方式,并且使用了Prometheus和Grafana作为监控管理平台。Ceph安装需要python3环境及docker ce的环境。
2.1安装python3
Python3及docker ce环境,每台机器都要进行安装。
1、依赖升级
安装前对本虚拟机各个依赖进行升级,使用yum update -y命令进行更新。
2、安装所需依赖
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel zlib1g-dev zlib*
3、下载python3
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
4、解压
tar -xvf Python-3.6.8.tar.xz
5、创建编译安装目录
mkdir -p /usr/local/python3
6、编译安装
cd Python-3.6.8
./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl
make && make install
7、创建软链接
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
ln -s /usr/local/python3/bin/virtualenv /usr/local/bin/virtualenv
8、检查是否安装成功
python3 -V
pip3 -V
2.2安装ceph
1、配置docker国内镜像源
配置在/etc/docker目录下daemon.json文件,配置完毕之后,将docker进行重启,否则镜像有可能会pull不下来。
daemon.json:
{
"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com","https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.12:5000","10.1.60.194:1180"]
}
2、安装cephadm(主节点):
1)使用curl下载最新的cephadm脚本:
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
chmod +x cephadm
2)安装cephadm到当前节点
./cephadm add-repo --release octopus
./cephadm install
3)使用以下命令确认cephadm已经加入PATH环境变量,可能需要退出命令行界面重新登录:
which cephadm
cephadm --help
3、引导集群(主节点):
1)创建ceph目录:
mkdir -p /etc/ceph
2)构建主机点:
cephadm bootstrap --mon-ip 10.1.61.151 --ssh-config config
注:由于本公司虚拟机ssh端口非默认22,所以需要在这里指定config文件,否则无法与其他机器建立连接,config文件的简单配置如下:
Host *
User root
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
ConnectTimeout=30
Port 19222
该命令执行以下操作:
l 在本地主机上为新集群创建monitor 和 manager daemon守护程序。
l 为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的/root/.ssh/authorized_keys文件中。
l 将与新群集进行通信所需的配置文件保存到/etc/ceph/ceph.conf。
l 向/etc/ceph/ceph.client.admin.keyring写入client.admin管理secret key的副本。
l 将public key的副本写入/etc/ceph/ceph.pub。
注:安装完毕后,下面会有个网址及密码,第一次登录,使用提供的密码登录,然后修改密码即可,如下:
修改密码后登录到ceph dashboard
安装完毕查看/etc/ceph下的目录文件结构及文件内容:
查看镜像和拉取的容器docker images:
docker ps:
此时已经运行了以下组件:
l ceph-mgr ceph管理程序
l ceph-monitor ceph监视器
l ceph-crash 崩溃数据收集模块
l prometheus监控组件
l grafana 监控数据展示dashboard
l alertmanager prometheus告警组件
l node_exporter prometheus节点数据收集组件
4、安装ceph工具包(主节点)
安装ceph-common包,里面包含了所有的ceph命令,其中包括ceph,rbd,mount.ceph(用于安装CephFS文件系统)等:
cephadm add-repo --release octopus
cephadm install ceph-common
安装完毕后确认该命令(ceph -v)是否能够使用:
5、将其他主机添加到集群中(主节点)
要将新主机添加到群集,请执行两个步骤:
1)在新主机的根用户authorized_keys文件中安装集群的公共SSH密钥:
ssh-copy-id -f -i /etc/ceph/ceph.pub root@eb61152
ssh-copy-id -f -i /etc/ceph/ceph.pub root@eb61153
ssh-copy-id -f -i /etc/ceph/ceph.pub root@eb61154
2)告诉Ceph,新节点是集群的一部分:
ceph orch host add eb61151
ceph orch host add eb61152
ceph orch host add eb61153
ceph orch host add eb61154
3)查看ceph纳管的所有节点:
注意执行完该步骤后,需要等待其他机器下载镜像及启动ceph进程,通过前面的ceph dashboard查看节点是否已经加入进来。
添加完成后ceph会自动扩展monitor到另外的节点,mgr节点会在第二个自动扩展,作为备用节点
6、部署 OSD(主节点)
所有群集主机上的存储设备清单可以显示为:
ceph orch device ls
如果满足以下所有条件,则认为存储设备可用:
l 设备必须没有分区。
l 设备不得具有任何LVM状态。
l 不得安装设备。
l 该设备不得包含文件系统。
l 该设备不得包含Ceph BlueStore OSD。
l 设备必须大于5 GB。
Ceph拒绝在不可用的设备上配置OSD。
1)告诉Ceph使用任何可用和未使用的存储设备:
ceph orch apply osd --all-available-devices
2)也可手动添加(手动添加每台主机都要执行)
ceph orch daemon add osd eb61151:/dev/sdb
ceph orch daemon add osd eb61152:/dev/sdb
...
添加完毕后,每台节点都会启动一个osd的docker进程
7、部署MDS
要使用CephFS文件系统,需要一个或多个MDS守护程序。如果使用较新的版本来创建新的文件系统,则会自动创建这些文件。
部署元数据服务器:
两个64的数字代表了pg_num数和pgp_num数,新版本会自动根据当前集群的配置自动配置,不需要指定只使用 ceph osd pool create cephfs_data,后面的cephfs_data为创建的池名称,可以自行更改
1)存储池cephfs_data:
[root@eb61151~]# ceph osd pool create cephfs_data 64 64
pool 'cephfs_data' created
2)元数据存储池cephfs_metadata :
[root@eb61151~]# ceph osd pool create cephfs_metadata 64 64
pool 'cephfs_metadata' created
3)创建cephfs文件系统(一个元数据存储池和一个数据存储池作为cephfs文件系统):
[root@eb61151~]# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 3 and data pool 2
4)查看创建的文件系统:
[root@eb61151~]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
5)启动部署mds进程:
[root@eb61151~]# ceph orch apply mds cephfs --placement="4 eb61151 eb61152 eb61153 eb61154 "
注:由于ceph的存储池默认是3副本机制,为了节省空间,我们可以改为2副本即一份主文件、一份备份文件。
6)查看存储池副本数:
ceph osd pool get cephfs_data size
7)设置存储池副本数:
ceph osd pool set cephfs_data size2
同理可将其他池也设置为2副本节省空间。
8、创建挂载目录
1)挂载设置
在主节点上/mnt下创建cephfs目录,需要将其他机器的根目录挂载到当前目录下,修改ip地址,port,挂载路径,secret,根据实际生成的修改,secret在/etc/ceph下之前生成的ceph.client.admin.kerying,执行下面的命令,所有的机器上都需要执行。
mount -t ceph 10.1.61.151:6789,10.1.61.152:6789,10.1.61.153:6789,10.1.61.154:6789:/ /mnt/cephfs -o name=admin,secret=AQDm/nlhapeJBxAAVB+mrpPCSliGvzerc6aD1w==
2)配置开机自启动挂载
在所有机器的/etc/fstab文件末尾,添加下面的文本。
10.1.61.151:6789,10.1.61.152:6789,10.1.61.153:6789,10.1.61.154:6789:/ /mnt/cephfs ceph name=admin,secret=AQDm/nlhapeJBxAAVB+mrpPCSliGvzerc6aD1w==,noatime,_netdev 0 2
2.3 常见问题
1、重启失败
docker重启后,ceph有时会重启失败,此时需要重新启动所有的机器上的ceph,在每台机器上执行systemctl restart ceph.target。
出现warning,有时候可以查看免密登录是否配置的有问题。
2、配置ceph集群免密(举例主节点免密登录其他节点)
1)在 (主节点)上执行命令:ssh-keygen -t rsa
[root@iZ23f31fmtgZ ~]# ssh-keygen -t rsa
然后一直回车,就可以在 /root/.ssh目录下看到公钥【id_rsa.pub】和私钥【id_rsa】
[root@iZ23f31fmtgZ ~]# cd /root/.ssh
[root@iZ23f31fmtgZ .ssh]# ls
id_rsa id_rsa.pub known_hosts
2)同样的操作在 (其他节点) 中执行一遍。
3)依次在其他节点的/root/.ssh目录下新建文件authorized_keys
[root@iZ23f31fmtgZ ~]# cd /root/.ssh/
[root@iZ23f31fmtgZ .ssh]# ls
id_rsa id_rsa.pub known_hosts
[root@iZ23f31fmtgZ .ssh]# touch authorized_keys
[root@iZ23f31fmtgZ .ssh]# ls
authorized_keys id_rsa id_rsa.pub known_hosts
[root@iZ23f31fmtgZ .ssh]#
4)然后将主节点机器中的公钥放到其他节点机器的authorized_keys中
可以使用复制命令 scp /root/.ssh/id_rsa.pub root@10.1.35.52:/root/.ssh/authorized_keys(如果复制报错就手动将公钥依次加入到其他节点authorized_keys中)
[root@iZ23f31fmtgZ .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTtp1CHV1D0TwuSLmiOOpmaxanI40SFNEjM2PVnmlwOMYIezABwnO4OcpyV7J04c9Tc+FKDADClWZRu0iG3SlX+8v5EIujfkf9RszO6hcCeYGp55mBhJ7dwfE0WTS19j6yTNksILtM60TcNk0Z/zG6vZI1gGW/XFs5s78Bk0pPuMmV8fUEF3bZXI5yJ9iqqtNvOX4KqN8O60JV7UAPg0NAW6lyutw7+1xJ7gvfeh8C2Vkzi5czyE7m+nlJ3oddvmKJF7wHLxN3kKqWMHEte9izZ9KC/unIB2MD44XUEypCSHeAsl4MEefe/SV5iCoAHdR18VoF4gENuAbsr3diqRQh root@localhost.localdomain
[root@iZ23f31fmtgZ .ssh]#
5)执行命令ssh [B机器ip] (默认22端口),测试配置是否成功
[root@localhost .ssh]# ssh [ip]
Last login: Tue Apr 25 19:1:47 2017 from 60.190.237.82
Welcome to aliyun Elastic Compute Service!
见下图,说明主节点机器免密登录其他节点机器成功。
Ps:如果其他节点登录主节点免密也是一样的操作。
3、安装cephadm到当前节点报错
解决办法卸载pywin32包,重新安装即可
./cephadm add-repo --release octopus
4.Ceph使用
1、资源监控
Ceph Dashboard: https://10.1.61.152:8443/#/dashboard
Ceph Grafana : https://10.1.61.151:3000
2、告警处理
1)mon c is low on available space节点根目录空间不足
查看节点空间情况
释放空间
解除告警
或者修改配置ceph.conf把容忍值调低mon_data_avail_warn = 10
3、常用命令
https://tool.4xseo.com/a/15737.html