微信公众号搜索 DevOps和k8s全栈技术 ,即可关注公众号,也可扫描文章最后的二维码关注公众号,每天会分享技术文章供大家阅读参考哈~

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数量修改成600cat /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.*

往期精彩文章

kubernetes全栈技术+企业案例演示【带你快速掌握和使用k8s】

kubernetes面试题汇总

DevOps视频和资料免费领取

kubernetes技术分享-可用于企业内部培训

谈谈我的IT发展之路

kubernetes系列文章第一篇-k8s基本介绍

kubernetes系列文章第二篇-kubectl

了解pod和pod的生命周期-这一篇文章就够了

Kubernetes中部署MySQL高可用集群

Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统-超详细文档

k8s1.18多master节点高可用集群安装-超详细中文官方文档

k8s中蓝绿部署、金丝雀发布、滚动更新汇总

运维常见问题汇总-tomcat篇

关于linux内核参数的调优,你需要知道

kubernetes持久化存储volume

kubernetes挂载ceph rbd和cephfs

报警神器Alertmanager发送报警到多个渠道

jenkins+kubernetes+harbor+gitlab构建企业级devops平台

kubernetes网络插件-flannel篇

kubernetes网络插件-calico篇

kubernetes认证、授权、准入控制

限制不同的用户操作k8s资源

面试真题&技术资料免费领取-覆盖面超全~

Prometheus监控MySQL

Prometheus监控Nginx

Prometheus监控Tomcat

linux面试题汇总

测试通过storageclass动态生成pv

通过编写k8s的资源清单yaml文件部署gitlab服务

helm安装和使用-通过helm部署k8s应用

Prometheus Operator-上篇-安装和使用篇

Prometheus Operator-下篇

通过kubeconfig登陆k8s的dashboard ui界面

通过token令牌登陆k8s dashboard ui界面 

kubernetes集群的etcd数据库详细介绍

Linux网络流量监控工具

kubernetes搭建EFK日志管理系统

prometheus operator监控k8s集群之外的haproxy组件         

kubernetes ConfigMap存储卷                                            

技术交流群

学无止境,了解更多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS相关内容,想要获取更多资料和免费视频,可按如下方式进入技术交流群

                            扫码加群????

微信:luckylucky421302

微信公众号

                                     长按指纹关注公众号????

                                       

                                       点击在看少个 bug????

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐