Ceph简介
Ceph是一个PB,EB级别的分布式存储系统,可以提供文件存储,对象存储、和块存储,它可靠性高,易扩展,管理简便,其中对象存储和块存储可以和其他云平台集成。一个Ceph集群中有Monitor节点、MDS节点(用于文件存储)、OSD守护进程。
Ceph组件
Ceph OSD:OSD守护进程,用于存储数据、数据恢复、数据回滚、平衡数据,并通过心跳程序向Monitor提供数据相关的监控信息。一个Ceph集群中至少需要两个OSD守护进程,这两个osd需要在两个物理服务器上,而不是在一台服务器上启动两个osd。
Monitor:维护集群状态的映射信息,包括monmap,osdmap,pgmap;至少需要三个monitor来实现高可用
MDS:存储Ceph文件系统的元数据。
Managers:Ceph Manager守护程序(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。CephManager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于Web的Ceph Dashboard和RESTAPI。高可用性通常至少需要两个
安装环境准备
准备机器,osd节点机器需要两个硬盘,配置4GiB/4vCPU/60G x2
监控节点:
monitor1:192.168.85.128
monitor2:192.168.85.130
monitor3:192.168.85.131
osd节点:
osd1:192.168.85.133
osd2:192.168.85.134
初始化机器
1.修改主机名
在monitor1上操作:
hostnamectl set-hostname monitor1
在monitor2上操作:
hostnamectl set-hostname monitor2
在monitor3上操作:
hostnamectl set-hostname monitor3
在osd1上操作:
hostnamectl set-hostname osd1
在osd2上操作:
hostnamectl set-hostname osd2
2.修改host文件,在各个节点操作
修改各个主机节点hosts文件
/etc/hosts文件如下
192.168.85.128 monitor1 192.168.85.130 monitor2 192.168.85.131 monitor3 192.168.85.133 osd1 192.168.85.134 osd2
3.配置master1到三个节点无密码登陆,在master1上操作
ssh-keygen -t rsa #一直回车就可以
ssh-copy-id -i .ssh/id_rsa.pub monitor1
ssh-copy-id -i .ssh/id_rsa.pub monitor2
ssh-copy-id -i .ssh/id_rsa.pub monitor3
ssh-copy-id -i .ssh/id_rsa.pub osd1
ssh-copy-id -i .ssh/id_rsa.pub osd2
4.初始化机器(各个节点操作)
yum -y install wget net-tools nfs-utils lrzsz gccgcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntplibaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-develepel-release lrzsz openssh-server
yum install deltarpm -y
5.关闭firewalld防火墙(各个节点操作)
停止firewalld服务 停止防火墙,并禁用这个服务
systemctl stop firewalld.service && systemctldisable firewalld.service
安装iptables 如果你要改用iptables的话,需要安装iptables服务
#安装
yum install iptables-services -y
禁用iptables
service iptables stop && systemctl disableiptables
6.时间同步
在master1上
ntpdate cn.pool.ntp.org systemctl start ntpd &&systemctl enable ntpd
在除了master1的其他节点上
ntpdate monitor1
计划任务:
* */1 * * * /usr/sbin/ntpdate monitor1
安装ceph-deploy
1.安装epel源,在各个节点上操作
yum install -y yum-utils&& sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/&& sudo yum install --nogpgcheck -y epel-release && sudo rpm--import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm/etc/yum.repos.d/dl.fedoraproject.org*
2.配置ceph的yum源,在各个节点上操作
cat /etc/yum.repos.d/ceph.repo
[Ceph] name=Ceph packages for$basearch baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/ enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/ enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1
3.安装ceph-deploy
yum update -y #在各个节点上操作
yum install ceph-deploy ceph -y #在master1上操作
yum installyum-plugin-priorities -y #在master1上操作
在除了master1的其他节点上操作
yum install ceph -y
4.创建ceph monitor
(1)创建一个目录,用于保存ceph-deploy 生成的配置文件和密钥信息的,在monitor1上操作,
mkdir /root/ceph-deploy&& cd /root/ceph-deploy
(2) 初始化monitor节点,在monitor1上操作,
ceph-deploy new monitor1 monitor2 monitor3
ls可发现在ceph-deploy目录下多了几个文件,如下面这些
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring ceph.conf #ceph集群配置文件 ceph-deploy-ceph.log #ceph-deploy命令执行结果的日志 ceph.mon.keyring #ceph mon角色的key
(3)修改ceph配置文件,在各个monitor节点操作
cat ceph.conf
[global] fsid = dc97ea52-e32c-404d-9bbc-9d0a90e39e02 mon_initial_members = monitor1, monitor2,monitor3 mon_host =192.168.85.128,192.168.85.129,192.168.85.130 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd_pool_default_size = 2
因为我们环境中有两个OSD,Ceph模式的默认osd副本个数为3,因此需要修改配置文件Ceph.conf,在[global]部分增加如下配置:
osd pool default size = 2
(4)安装ceph集群,在monitor1上操作
ceph-deploy install monitor1 monitor2monitor3 osd1 osd2
上面使用ceph-deploy来安装ceph程序,我们之前通过yum手动在各个节点安装过ceph,为了保证ceph安装成功,这两种方法都需要使用
(5)部署初始监视器并收集密钥,在monitor1上操作
ceph-deploy mon create-initial
ll /root/ceph-deploy 会看到生成很多密钥
ceph.bootstrap-mds.keyring ceph.bootstrap-mgr.keyring ceph.bootstrap-osd.keyring ceph.bootstrap-rgw.keyring ceph.client.admin.keyring ceph.bootstrap-mds.keyring #MDS启动key ceph.bootstrap-osd.keyring #OSD启动key ceph.client.admin.keyring #管理员key
(6)将配置文件和管理密钥分发到各个ceph节点,在monitor1上操作
ceph-deploy admin monitor1 monitor2 monitor3 osd1 osd2
(7)授权,在各个节点操作
chmod +r/etc/ceph/ceph.client.admin.keyring
配置osd,下面步骤均在monitor1上操作
1.给ceph添osd,并完成激活
在osd节点osd1和osd2上操作
mkdir /data/osd1 -p chmod 777 /data/osd1/ chown -R ceph.ceph /data/osd1
2.回到master1上操作,准备osd
ceph-deploy osd prepare osd1:/data/osd1osd2:/data/osd1
3.激活osd:
ceph-deploy osd activate osd1:/data/osd1osd2:/data/osd1
ceph health #查看ceph集群状态,显示如下,在health处看到HEALTH_OK说明集群正常
cluster a53e18df-5c06-46bb-b4db-7c44f64a367e health HEALTH_OK monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0} election epoch 6, quorum 0,1,2 monitor1,monitor2,monitor3 osdmap e14: 2 osds: 2 up, 2 in flags sortbitwise,require_jewel_osds pgmap v618: 320 pgs, 2 pools, 14752 kB data, 23 objects 14146 MB used, 64246 MB / 78393 MB avail 320 active+clean
4.创建ceph pool池
ceph osd pool create testpool 256
5.创建rbd
rbd create testpool/myrbd --size 10240
6.映射块设备到自己机器
rbd feature disable testpool/myrbd object-map fast-diff deep-flatten #禁用一些map,否则客户端挂载不成功 rbd map testpool/myrbd 显示/dev/rbd0,说明映射成功
7.测试客户端挂载使用
mkdir /mnt/firstrbd mkfs.xfs /dev/rbd0 mount /dev/rbd0 /mnt/firstrbd
8.kubernetes对接ceph
可看视频了解,视频链接如下:
https://edu.51cto.com/sd/d7dff
常见错误排查
1.too many PGs per OSD
上面测试客户端挂载之后,我们在monitor1上用ceph -s再次查看集群状态
ceph -s
可看到有警告health HEALTH_WARN
too many PGs per OSD (320 > max300)
clustera53e18df-5c06-46bb-b4db-7c44f64a367e health HEALTH_WARN too many PGs per OSD (320 > max300) monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0} election epoch 4, quorum 0,1,2monitor1,monitor2,monitor3 osdmap e14: 2 osds: 2 up, 2 in flagssortbitwise,require_jewel_osds pgmap v253: 320 pgs, 2 pools, 14752 kBdata, 23 objects 14158 MB used, 64235 MB / 78393 MBavail 320 active+clean
这个警告是因为ceph集群中osd 数量较少,创建了pool,每个pool要占用一些pg ,ceph集群默认每个osd 能有300个pgs,这个默认值是可以调整的,但调整会对集群的性能产生一定影响。如果是测试环境,可以消除这种警告,当然这种警告也可以不用理会。
查询每个osd下最大的pg阈值:
ceph --show-config | grep mon_pg_warn_max_per_osd
#可以看到每个osd默认有300个pg
mon_pg_warn_max_per_osd = 300
解决方法如下:
在monitor1,monitor2,monitor3上修改ceph配置文件,把osd上的pg数量修改成600,cat /etc/ceph/ceph.conf
[global] ... mon_pg_warn_max_per_osd = 600
上面修改好之后重启monitor服务,在monitor1上操作
systemctl restart ceph-mon@monitor1 systemctl restart ceph-mon@monitor2 systemctl restart ceph-mon@monitor3
ceph -s 看到下面的ceph集群状态正常了
cluster a53e18df-5c06-46bb-b4db-7c44f64a367e health HEALTH_OK monmap e1: 3 mons at {monitor1=192.168.85.128:6789/0,monitor2=192.168.85.130:6789/0,monitor3=192.168.85.131:6789/0} election epoch 6, quorum 0,1,2 monitor1,monitor2,monitor3 osdmap e14: 2 osds: 2 up, 2 in flags sortbitwise,require_jewel_osds pgmap v618: 320 pgs, 2 pools, 14752 kB data, 23 objects 14146 MB used, 64246 MB / 78393 MB avail 320 active+clean
2.重启monitor服务报错
systemctl restart ceph-mon@monitor1 systemctl restart ceph-mon@monitor2 systemctl restart ceph-mon@monitor3
如果启动报错,按如下排查
systemctl status ceph-mon@monitor1
报错如下:
Sep 05 22:55:30 monitor1 systemd[1]: start request repeated tooquickly for ceph-mon@monitor1.service Sep 05 22:55:30 monitor1 systemd[1]: Failed to start Ceph clustermonitor daemon.
解决方法:
在各个节点修改配置文件
vim /usr/lib/systemd/system/ceph-mon@.service vim /usr/lib/systemd/system/ceph-mon@.service vim /usr/lib/systemd/system/ceph-mon@.service
把StartLimitInterval=30min加上注释
在各个节点执行如下,重新加载配置文件
systemctl daemon-reload
在monitor1上执行如下,重启,可启动成功
systemctl restart ceph-mon@monitor1 systemctl restart ceph-mon@monitor2 systemctl restart ceph-mon@monitor3
3.全都重新部署
当你在部署时遇到问题,排查过程困难重重的话,那么不妨用如下方法,把集群清空,重新部署,可以执行以下清除Ceph包之后重新开始安装:
在monitor1上操作
cd /root/ceph-deploy ceph-deploy purge monitor1 monitor2 monitor3 osd1 osd2 ceph-deploy purgedata monitor1 monitor2 monitor3 osd1 osd2ceph-deployforgetkeys rm ceph.*