ceph简介及高可用集群搭建
微信公众号搜索 DevOps和k8s全栈技术 ,即可关注公众号,也可扫描文章最后的二维码关注公众号,每天会分享技术文章供大家阅读参考哈~Ceph简介Ceph是一个PB,EB级别的分布式存...
微信公众号搜索 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数量修改成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.*
往期精彩文章
kubernetes全栈技术+企业案例演示【带你快速掌握和使用k8s】
Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统-超详细文档
k8s1.18多master节点高可用集群安装-超详细中文官方文档
jenkins+kubernetes+harbor+gitlab构建企业级devops平台
通过kubeconfig登陆k8s的dashboard ui界面
prometheus operator监控k8s集群之外的haproxy组件
技术交流群
学无止境,了解更多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS相关内容,想要获取更多资料和免费视频,可按如下方式进入技术交流群
扫码加群????
微信:luckylucky421302
微信公众号
长按指纹关注公众号????
点击在看少个 bug????
更多推荐
所有评论(0)