Ceph网络通信
性能评价:带宽和延迟
稳定可靠:不丢包,网络中断时,重连等异常处理
RGW
RGW 高可用
rgw是无状态化的服务,用HAProxy达到负载均衡的效果,用 keepalive确保 HAProxy的高可用
【无状态服务运行过程中的所有数据(除日志和监控数据)都存在容器实例里的文件系统中,如果实例停止或者删除,则这些数据都将丢失,无法找回;而对于有状态服务,凡是已经挂载了存储卷的目录下的文件内容都可以随时进行备份,备份的数据可以下载,也可以用于恢复新的服务。但对于没有挂载卷的目录下的数据,仍然是无法备份和保存的,如果实例停止或者删除,这些非挂载卷里的文件内容同样会丢失。 】
# 查看有几个rgw可用
ceph -s
在两个节点部署rgw,两个节点共享vip, 外界通过vip (virtual_ipaddress) 访问 rgw. haproxy也部署两个在两个节点,这样一挂另一个能顶上
# 在keepalived.conf里面设置vip
yum install keepalived -y
# 两个节点都装,haproxy.cfg里加上两个节点的ip和rgw的端口
yum install haproxy -y
ceph 与k8s
StorageClass可以接各种provisioner, ceph或者云存储,nfs都可以
pv
静态是指管理员提前创建好pv
动态是指用sc
ceph 关联 k8s 用的是ceph-csi
RBD块设备
1、比如你分配了10g,它会根据你使用容量的增长才增长,节约了空间
2、每个文件被切割成obj, obj落到pg上 pg在逻辑分区pool里,pool里的对象根据crush map 分到对应的osd上
create pool --> create rbd image --> map 成 裸盘 就能用了
扩容 rbd resize ,resize2fs /dev/rbd0 完成扩容,不用卸载掉mount的块设备,前提是没有分区的
RGW
1、数据最终落在osd上, 将node-1设置成了网关
2、默认的端口是7480,可以改成80
3、使用需要创建user,编写脚本,用上user info,创建bucket ,通过bucket操作对象(上传、下载和删除文件或文件夹在bucket里),就能访问rgw
不用脚本就用 s3cmd,用命令行操作
4、通过
ceph osd lspools
可以看到index 和 data,分别存的是索引和数据的pool
OSD
scale out 增加节点
ceph官网有教程
scale up 同一台机器增加硬盘
ceph-deploy osd create node-1 --data /dev/sdc
rebalancing 重分布
加osd,会进行rebalancing, 如下图,增加节点后,移动pg(而不是obj, 若obj,计算量太大),一块一块加,这样比较好,不要对业务造成冲击
# 一秒钟显示一次
watch -n1 'ceph -s'
# 重分布参数调节 osd_max_backfills:"1" 验证是比较好的
ceph --admin-daemon /var/run/ceph/ceph-mon.node-1.asok config show|grep max_b
#暂停rebalance
ceph osd set norebalance
ceph osd set nobackfill
# 取消暂停
ceph osd unset nobackfill
ceph osd unset norebalance
更换osd
# 如果一块盘坏了,可以通过它看到信息
dmesg
# 有的盘没坏,块坏了,就会很拖ceph的性能,找到它通过延迟特别大
ceph osd perf
# 踢掉osd.5
systemctl stop ceph-osd@5
ceph osd out osd.5
# 换盘前先等数据重分布 100%
ceph -s
# crush map 角度也删掉它
ceph osd crush rm osd.5
ceph osd rm osd.5
# 把认证的key也删掉
ceph auth rm osd.5
网络
# 客户端是走public network, 重分布是 cluster_network。网络分开
cat /etc/ceph/ceph.conf
卸载
集群测试
mon
mon 挂掉一个对集群没有影响
tail -f /var/log/ceph/ceph-mon.node-3.log
如果三个挂掉两个就不能用了,因为选举算法 paxos 要求在线的mon要超过半数 1.5个。那么5个mon 最多挂两个
mds 对应cephfs
mds两台机器挂掉不影响,只是warn,警告说没有standby的,只要有一个可用即可
RGW
因为它是无状态的,得在前面加个负载均衡器,它才能一个挂掉,自己切换过来
osd
3副本的话,坏两个还能用。但是这个同步很慢
压测
用 fio或者是bench 压测
fio用于虚拟机内部测试
ceph测试用bench
rbd help bench
K8s 与手工版ceph 集成
1、storageClass 是最先进的,自动创建pv,pvc
Each StorageClass has a provisioner 它来决定用什么(rbd nfs,CephFs等)来提供pv。
2、之前的开发者必须是全栈,得懂存储才能写yaml,那样显然不合适
volume 需要开发者要定义存储,定义存储访问的方式,然后容器去引用存储,里面涉及到很多存储的细节信息
k8s管理员要预先把需要的存储空间定义好,然后通过pvc调用pv即可。这样开发就免去了一道工序,只需要调用即可