首页 > 其他分享 >ceph通过tgt配置多路径的数据一致性问题

ceph通过tgt配置多路径的数据一致性问题

时间:2024-01-08 18:06:48浏览次数:30  
标签:缓存 多路径 tgt iscsi direct ceph rbd 客户端

前言

使用librbd通过tgt出iscsi,多路径数据是一致的,由于环境的原因,切换为kernel rbd 出iscsi,然后通过不同的iscsi路径写入后,发现在rbd端就出现了数据没有刷新的问题

问题分析

这里有个类似的问题

https://github.com/ceph/ceph-csi/issues/461

这个是通过把rbd map到不同的节点,通过dd写入的时候发现数据不同步,需要通过增加参数direct才能保证数据一致,我们通过官网的描述和这个issue里面的回答可以看到

https://docs.ceph.com/docs/luminous/rbd/rbd-config-ref/

The kernel driver for Ceph block devices can use the Linux page cache to improve performance.

rbd内核客户端是会通过linux page cache来改善性能的,而librbd是可以通过参数关闭缓存的,这个在我以前的理解里面krbd是没有缓存的,实际上这个是存在缓存的

而通过tgt的客户端写入,数据到了tgt,而tgt可以利用kernel的rbd page缓存一点数据,然后就没下刷到后端了,从另外一个客户端读取数据的时候就看到数据是没刷过去的,这个跟把rbd格式化文件系统,然后map到两台机器,一台写入,另外一台查看,也是存在看不到数据的情况

而issue里面也说的很清楚,这个同步写的过程应该交给上层软件去控制,也就是软件去控制o_direct的写入

问题复现

复现问题比较容易,配置kernel rbd,map到服务器,然后配置tgt,两台机器配置相同的tgt,然后通过iscsi客户端连接两台tgt的iscsi server,那么iscsi的客户端机器就增加了两个盘符
直接对裸盘进行dd的写入

dd if=/dev/urandom   of=/dev/sdc bs=512 count=8000

写完以后在 rbdmap的机器上面执行

sha512sum /dev/rbd/rbd/testrbd

两台机器都执行检查,这个时候默认情况下,得到的输出是不一致的

解决问题

配置文件增加一个配置

<target iqn.2008-09.com.example:server.target2>
    backing-store /dev/rbd/rbd/testrbd
    bsoflags direct
    #write-cache off
</target>

增加一个bsoflags direct就可以保证数据一致性了,下面的写缓存应该是客户端那边的缓存,缓存客户端的数据还没来到rbd这边,来到以后也是direct的写,也是能保证一致性的,所以可以保留

测试过程中还遇到另外一个问题backing-store如果写成direct-store,下面的配置的参数就不能生效了,所以这个地方需要注意下



标签:缓存,多路径,tgt,iscsi,direct,ceph,rbd,客户端
From: https://blog.51cto.com/zphj1987/9148082

相关文章

  • 配置一个支持librbd的tgtd
    前言配置文件如下<targetiqn.2008-09.com.example:server.libdiskb>bs-typerbd<backing-storerbd/test4M>block-size512lbppbe0</backing-store></target>注意一定要用这个格式写配置文件,否则出现无法解析参数的问题......
  • k8s 对接 cephfs 文件系统
    创建资源池cephosdpoolcreatecephfs_data128cephosdpoolcreatecephfs_metadata128文件系统需要两个资源池,一个用于存储数据体,一个用于存放索引信息及其他数据相关信息。创建文件系统cephfsnewcephfscephfs_metadatacephfs_data获取admin秘钥cephauthg......
  • Proxmox VE 超融合集群销毁Ceph Pool
    作者:田逸(formyz)销毁CephPool的目的一套五节点的ProxmoxVE超融合集群,当初为有效利用资源,配备了Nvme高性能磁盘和大容量的SATA机械磁盘(如图所示),高性能Nvme磁盘用于虚拟机的系统盘、数据库的数据存储盘,而大容量的机械盘则用于存储诸如图片、视频、共享数据等对性能要求不高的场景。......
  • Nginx转发解析长域名多路径域名
    ​Nginx解析短域名,例如:访问http://192.168.1.23可直接跳转到http://192.168.1.23/webroot/decisionserver{listen90;server_namelocalhost;#匹配/转到/webroot/decision上;#^(.*)$表示/后任意部分,除非和其他location匹配否则一律转向/webroot/dec......
  • Kubernetes-集群Rook-Ceph快照
    部署条件Rookofficiallysupportsv1snapshotsforKubernetesv1.20+.Installthesnapshotcontrollerandsnapshotv1CRDasrequired.Moreinfocanbefoundhere.安装快照控制器和CRD:安装快照CRD:gitclonehttps://github.com/kubernetes-csi/external-snapshotter.git......
  • Rook-Ceph中扩容OSD数量
    修改发现磁盘扫描间隔vimrook/deploy/examples/operator.yaml#Thedurationbetweendiscoveringdevicesintherook-discoverdaemonset.-name:ROOK_DISCOVER_DEVICES_INTERVALvalue:"60"下发资源kubectlapply-frook/deploy/examples/operator.yaml添加OSD磁盘vim......
  • Kubernetes-集群卸载Rook-Ceph
    删除storageclass和pvc(卸载卷、删除卷声明等,根据实际情况修改)kubectldelete-frook/deploy/examples/csi/cephfs/pod.yamlkubectldelete-frook/deploy/examples/csi/cephfs/pvc.yamlkubectldelete-nrook-cephcephblockpoolreplicapoolkubectldelete-frook/deploy/......
  • ceph应用-RBD、radosgw对象存储、cephfs
    块存储(RBD)用于K8S、openstack、linux中直接挂载。类似使用iscsi块存储一样。块存储使用案例#1.创建存储池#语法:cephosdpoolcreate<存储池名><PG>[<PGP>][{replicated|erasure}]# PG:指定存储池的pg数量# PGP:指定存储池pgp数量,一般与pg相同。不填写默认就是和PG......
  • pve 配置Ceph
    1.服务器的磁盘配置。检查服务器的阵列卡,看是否可以将磁盘设置为Job模式,如果没有这个功能,需要对ceph使用的测试做成raid0 ,如果所有磁盘作为ceph磁盘,可以考虑将阵列卡设置为HBA模式,但是有些阵列卡也不支持。这种只能将这些磁盘设置为raid0.2.ceph 存储如果设置3副本,则......
  • ceph集群搭建详细教程(ceph-deploy)
    ceph-deploy比较适合生产环境,不是用cephadm搭建。相对麻烦一些,但是并不难,细节把握好就行,只是命令多一些而已。实验环境服务器主机public网段IP(对外服务)cluster网段IP(集群通信)角色deploy192.168.2.120用于部署集群、管理集群ceph-node1192.168.2.121192.168.6......