Planet Ceph

Aggregated news from external sources

  • March 27, 2017
    Debug Ceph Docker containers

    For the last couple of weeks, Erwan Velu and I have been busy refactoring the entire ceph-docker code base. Through these cosmetic changes, we implemented new mechanisms to finely grained debug containers at run time. This article was co-written with Erwan Velu and will explain what we worked on. I. Rationale People tend to believe …Read more

  • March 24, 2017
    从hammer到jewel的RGW升级实战-by秦牧羊

    前言 本篇来自秦牧羊的一篇分享,讲述的是从hammer升级到jewel的过程,以及其中的一些故障的处理,是一篇非常详细的实战分享 初始状态 pool状态 root@demo:/home/demouser# rados lspoolsrbd.cn.rgw.root.cn-zone1.rgw.root.cn-zone1.rgw.domain.cn-zone1.rgw.control.cn-zone1.rgw.gc.cn-zone1.rgw.buckets.index.cn-zone1.rgw.buckets.extra.cn-zone1.rgw.buckets.cn-zone1.log.cn-zone1.intent-log.cn-zone1.usage.cn-zone1.users.cn-zone1.users.email.cn-zone1.users.swift.cn-zone1.users.uid ceph.conf配置 [client.radosgw.us-zone1] rgw dns name = s3.ceph.work rgw frontends = fastcgi host = ceph.work rgw region = cn rgw region root pool = .cn.rgw.root rgw zone = us-zone1 rgw zone root pool = .cn-zone1.rgw.root keyring = /etc/ceph/ceph.client.radosgw.keyring rgw socket path = /home/ceph/var/run/ceph-client.radosgw.us-zone1.sock log file = /home/ceph/log/radosgw.us-zone1.log rgw print …Read more

  • March 24, 2017
    小文件测试数据准备

    前言 在看一个Linux Vault 2017的资料的时候,看到红帽分享的一个测试的过程,里面关于小文件元数据性能测试的,环境准备的还比较好,可以作为一种测试模型 测试用例 测试用例一: 使用find -name 测试 find -size 测试测试用例二: 使用find -name 测试 find -size 测试 测试用例三: 使用rmdir进行测试 总结 本篇就是记录一个测试模型 变更记录 Why Who When 创建 武汉-运维-磨渣 2017-03-24 Source: zphj1987@gmail (小文件测试数据准备)

  • March 23, 2017
    编译的Ceph二进制文件过大问题

    前言 在ceph的研发群里看到一个cepher提出一个问题,编译的ceph的二进制文件过大,因为我一直用的打包好的rpm包,没有关注这个问题,重新编译了一遍发现确实有这个问题 本篇就是记录如何解决这个问题的 打rpm包的方式 用我自己的环境编译的时候发现一个问题,编译出来的rpm包还是很大,开始怀疑是机器的原因,换了一台发现二进制包就很小了,然后查询了很多资料以后,找到了问题所在 在打rpm包的时候可以通过宏变量去控制是否打出一个的debug的包,这个包的作用就是把二进制文件当中包含的debug的相关的全部抽离出来形成一个新的rpm包,而我的环境不知道什么时候在/root/.rpmmacros添加进去了一个 d%ebug_package %{nil} 搜寻资料后确定就是这个的问题,这个变量添加了以后,在打包的时候就不会进行debug相关包的剥离,然后打出的包就是巨大的,可以这样检查自己的rpmbuild的宏变量信息 [root@host1 ceph-10.2.6]# rpmbuild –showrc|grep debug_package %{!?__debug_package: %{?__debug_package:%{__debug_install_post}}-14: _enable_debug_packages 1-14: debug_package %global __debug_package 1-14: install %{?_enable_debug_packages:%{?buildsubdir:%{debug_package}}} 如果开启了debug包抽离(默认就是开启的),那么rpmbuild在打包的过程中会有个调用 /usr/lib/rpm/find-debuginfo.sh –strict-build-id -m –run-dwz –dwz-low-mem-die-limit 10000000 –dwz-max-die-limit 110000000 /root/rpmbuild/BUILD/ceph-10.2.5 这个就是rpmbuild过程中,进行抽离debug信息的操作,也就是缩小二进制的过程,这个并不能直接执行命令,需要用rpmbuild -bb ceph.spec 打包的时候内部自动进行调用的 上面是rpm打包过程中进行的二进制缩小,那么如果我们是源码编译安装时候,如何缩小这个二进制,答案当然是可以的 源码编译安装的方式 ./configure 后make生成的二进制文件就在./src下面了我们以ceph-mon为例进行抽离 这个-O3并没有影响到太多的生成的二进制的大小,—with-debug会有一定的影响,关键还是strip的这个操作 ./configure –with-debug CXXFLAGS=-O3 CFLAGS=-O3 CCASFLAGS=-O3 所以默认的就行 如果整体进行安装就使用make install-strip安装即可 [root@host1 ceph-10.2.6]# make install-strip[root@host1 …Read more

  • March 22, 2017
    Ceph实现数据的’不拆分’

    前言 之前看过一个朋友一篇文章,讲述的是Vsan为什么使用的是两副本,而ceph则大多数情况下需要三副本,当时个人观点是这个并不是关键点,但是在仔细考虑了问题的出发点以后,这个也可以说是其中的一个点一个集群数据丢失可以从多方面去看 发生丢失数据的事件,这个来说,出现这个事件的概率是一致的,同等硬件情况下没有谁的系统能够说在两副本情况下把这个出现坏盘概率做的比其他系统更低 发生坏盘事件以后,数据丢失波及的范围,这个就是那个朋友提出的一个观点,对于Vsan来说因为文件的不拆分,也就是在丢了的情况下,只是局部数据的丢失,而ceph的数据因为拆分到整个集群,基本上说就是全军覆没了,这一点没有什么争议 一般来说,ceph都是配置的分布式文件系统,也就是数据以PG为组合,以对象为最小单元的形式分布到整个集群当中去,通过控制crush能够增加一定的可用概率,但是有没有办法实现真的丢盘的情况下,数据波及没有那么广,答案当然是有的,只是需要做一些更细微的控制,前端的使用的接口也需要做一定的改动,本篇将讲述这个如何去实现,以及前端可能需要的变动 方案实现 首先来一张示意图,来介绍大致的实现方式,下面再给出操作步骤 主要包括三步 横向划条带 创建对应规则 根据规则创建相关存储池 横向划条带 创建虚拟根 ceph osd crush add-bucket default-a rootceph osd crush add-bucket default-b rootceph osd crush add-bucket default-c rootceph osd crush add-bucket default-d root 创建虚拟主机 ceph osd crush add-bucket host1-a hostceph osd crush add-bucket host2-a hostceph osd crush add-bucket host3-a hostceph osd crush add-bucket host1-b …Read more

  • March 19, 2017
    How many objects will move when changing a crushmap ?

    After a crushmap is changed (e.g. addition/removal of devices, modification of weights or tunables), objects may move from one device to another. The crush compare command can be used to show what would happen for a given rule and replication count. In the following example, two new OSDs are added to the crushmap, causing 22% …Read more

  • March 16, 2017
    基于Docker UI 配置ceph集群

    前言 前一篇介绍了docker在命令行下面进行的ceph部署,本篇用docker的UI进行ceph的部署,目前来说市面上还没有一款能够比较简单就能直接在OS上面去部署Ceph的管理平台,这是因为OS的环境差异化太大,并且包的版本,以及各种软件的适配都可能造成失败,而docker比较固化环境,因此即使一个通用的UI也能很方便的部署出一个Cpeh集群 本篇就是对Docker UI部署集群做一个实践,对ceph了解,对docker了解,对dokcer的UI操作进行一定的了解的情况下,再做实践会比较好,总体上还是比较简单的 安装并运行portainer 安装软件 cd /optwget https://github.com/portainer/portainer/releases/download/1.12.1/portainer-1.12.1-linux-amd64.tar.gztar xvpfz portainer-1.12.1-linux-amd64.tar.gzcd portainer 运行软件 ./portainer -H unix:///var/run/docker.sock -p “:9999” 注意下这里-H是指定的docker的连接,也就是要控制哪个docker,这个支持本地的sock的方式,也支持远程的tcp的方式,这个进入ui界面后还可以添加更多的-p是指定的访问的接口 扩展知识 如何在centos7下面启用 remote api打开文件 /usr/lib/systemd/system/docker.service 在 $INSECURE_REGISTRY 后面添加 -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock ExecStart=/usr/bin/dockerd-current –add-runtime docker-runc=/usr/libexec/docker/docker-runc-current –default-runtime=docker-runc –exec-opt native.cgroupdriver=systemd –userland-proxy-path=/usr/libexec/docker/docker-proxy-current $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock 修改好了后 [root@lab8106 ~]#systemctl daemon-reload[root@lab8106 ~]#systemctl restart docker …Read more

  • March 15, 2017
    基于docker部署ceph以及修改docker image

    前言 容器和ceph的结合已经在一些生产环境当中做了尝试,容器的好处就是对运行环境的一个封装,传统的方式是集成为ISO,这个需要一定的维护量,而容器的相关操作会简单很多,也就有了一些尝试,个人觉得如果玩的转容器可以考虑,当然得懂ceph,不然两套系统在一起,问题都不知道是哪个的,就比较麻烦了 本篇是基于之前我的填坑群里面的牛鹏举的一个问题,他的环境出现了创建osd的时候权限问题,我这边没遇到,现在实践了一遍,感觉应该是之前目录提前创建了的问题 实践步骤 安装docker yum install docker 下载ceph镜像 这个镜像是sebastien维护的,他是redhat的ceph工程师,ceph-ansible的负责人,很多一线的资料都是来自他的分享,这个是一个集成好的镜像 docker pull ceph/daemon 准备好一些目录 mkdir -p /etc/cephmkdir -p /var/lib/ceph/ 注意只需要做这个两个目录,不要创建子目录,docker内部有相关的操作 创建一个mon sudo docker run -d –net=host –name=mon -v /etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph -e MON_IP=192.168.8.106 -e CEPH_PUBLIC_NETWORK=192.168.0.0/16 ceph/daemon mon MON_IP就是宿主机的IP地址 执行完了后 [root@lab8106 ceph]# docker ps -lCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES86ed05173432 ceph/daemon “/entrypoint.sh mon” About …Read more

  • March 14, 2017
    Predicting which Ceph OSD will fill up first

    When a device is added to Ceph, it is assigned a weight that reflects its capacity. For instance if osd.1 is a 1TB disk, its weight will be 1.0 and if osd.2 is a 4TB disk, its weight will be 4.0. It is expected that osd.1 will receive exactly four times more objects than osd.2. …Read more

  • March 6, 2017
    在线动态修改ulimit

    前言 系统中有些地方会进行资源的限制,其中的一个就是open file的限制,操作系统默认限制的是1024,这个值可以通过各种方式修改,本篇主要讲的是如何在线修改,生产上是不可能随便重启进程的 实践 查看系统默认的限制 [root@lab8106 ~]# ulimit -a|grep openopen files (-n) 1024 默认的打开文件是1024 [root@lab8106 ~]# ps -ef|grep ceph-osdceph 28176 1 0 18:08 ? 00:00:00 /usr/bin/ceph-osd -f –cluster ceph –id 0 –setuser ceph –setgroup cephroot 28619 26901 0 18:10 pts/3 00:00:00 grep –color=auto ceph-osd[root@lab8106 ~]# cat /proc/28176/limits |grep openMax open files 1048576 1048576 files ceph …Read more

  • February 28, 2017
    python执行rados命令例子

    前言 我们以前的管理平台在python平台下面做的,内部做的一些操作采用的是命令执行,然后解析的方式去做的,ceph自身有python的rados接口,可以直接调用原生接口,然后直接解析json的方式,这样更靠近底层在看ceph-dash内部的实现的时候,发现里面的获取集群信息的代码可以留存备用 代码实例 #!/usr/bin/env python# -*- coding: UTF-8 -*-import jsonfrom rados import Radosfrom rados import Error as RadosErrorclass CephClusterCommand(dict): “”” Issue a ceph command on the given cluster and provide the returned json “”” def __init__(self, cluster, **kwargs): dict.__init__(self) ret, buf, err = cluster.mon_command(json.dumps(kwargs), ”, timeout=5) if ret != 0: self[‘err’] = err else: self.update(json.loads(buf))config={’conffile’: …Read more

  • February 27, 2017
    Containerize Ceph: store config options in monitor KV store

    During the last CDM (Ceph Developer Monthly), I presented a blueprint that will help Ceph playing nicely when it’s being containerized. I. Containerized Ceph: generating Ceph config file While running a containerized version of Ceph in Kubernetes, generating the ceph.conf is complex but crucial since containers have to be as self-sufficient as possible. We can …Read more

Careers