centos7.5快速安装ceph文档

  • Post author:
  • Post category:其他


一、环境

使用了3台虚拟机

IP 主机名 作用
192.168.1.10 k8s-master01 管理、监控节点
192.168.1.12 k8s-node01 slave1 节点
192.168.1.13 k8s-node02 slave2 节点

查看每台机器的操作系统版本

$ cat /etc/redhat-release
CentOS Linux release 7.5.1708 (Core) 

Ceph要求必须是奇数个监控节点,而且最少3个(做实验1个也是可以的),ceph-adm是可选的,可以把ceph-adm放在monitor上,只不过把ceph-adm单独拿出来架构上看更清晰一些。当然也可以把mon放在 osd上,生产环境下是不推荐这样做的。

  • ADM 服务器硬件配置比较随意,只是用来操作和管理 Ceph;

  • MON 服务器1块硬盘用来安装操作系统;

  • OSD 服务器上用1块1GB的硬盘做Ceph存储,每个osd对应1块硬盘,每个osd需要1个Journal,所以1块硬盘需要1个Journal,如果多个硬盘的话,可以每个区分别对应一个osd硬盘的journal.

所有文件系统采用Ceph官方推荐的xfs,每台存储节点机器上都有一块独立的裸盘,用来挂载ceph分区

$ fdisk -l
磁盘 /dev/xvdf:10.7 GB
......

注意此时挂载的是裸盘,不要手贱去手动给他分区,我先分区后,带来后续很多问题,就让它裸在这里,不要动,后续脚本会自己分区的。

二、安装准备

需要在每个节点上修改host、源、关闭SELINUX、关闭防火墙、同步时间等操作,以下操作3节点都执行

1. 修改/etc/hosts

添加以下地址

192.168.0.101       master
192.168.0.102       slave1
192.168.0.103       slave2

1. 修改源

添加阿里云的ceph源

vim /etc/yum.repos.d/ceph.repo

添加

[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/

gpgcheck=0
[ceph-source]
name=cephsource
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-radosgw]
name=cephradosgw
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0

更新缓存

$ yum makecache

在这里客户端报错解决:

由于docker的Ceph插件rexray对Ceph版本有一定的要求,当Ceph版本为hammer (0.94.10)时,rexray无法成功创建rbd设备。CentOS 7及以上版本,默认安装的就是hammer版本,因此,我们需要安装更高的jewel版本。Ceph的版本可参见。

安装
  为了安装速度,我们可以选用国内源。通常大家使用的国内源包括: 
  

网易 http://mirrors.163.com/ceph
中科大 http://mirrors.ustc.edu.cn/ceph
阿里 http://mirrors.aliyun.com/ceph
添加源
  给yum增加一个Ceph源(这里以网易源为例)。

$ tee /etc/yum.repos.d/ceph.repo <<-'EOF'
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1
EOF

安装依赖
$ yum install -y yum-utils && yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && yum install --nogpgcheck -y epel-release && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && rm -f /etc/yum.repos.d/dl.fedoraproject.org*

  这一步非常重要,如果跳过这一步,直接进行ceph的安装,那么会报如下的错误:

Error: Package: 1:ceph-common-10.2.10-0.el7.x86_64 (Ceph)
           Requires: libbabeltrace.so.1()(64bit)
Error: Package: 1:librados2-10.2.10-0.el7.x86_64 (Ceph)
           Requires: liblttng-ust.so.0()(64bit)
Error: Package: 1:librgw2-10.2.10-0.el7.x86_64 (Ceph)
           Requires: libfcgi.so.0()(64bit)
Error: Package: 1:librbd1-10.2.10-0.el7.x86_64 (Ceph)
           Requires: liblttng-ust.so.0()(64bit)
Error: Package: 1:ceph-common-10.2.10-0.el7.x86_64 (Ceph)
           Requires: libbabeltrace-ctf.so.1()(64bit)

安装Ceph
  最后一步,安装Ceph,这里以安装Ceph-common为例:

$ yum -y install ceph-common

验证Ceph
$ ceph --version
ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe)

  如上便表示安装成功

2. 关闭 SELINUX

修改/etc/selinux/config,将enforcing改为disabled

$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
$ setenforce 0

3. 关闭iptables

$ service iptables stop
$ chkconfig iptables off

4. 同步时间

$ yum -y ntp
$ ntpdate asia.pool.ntp.org

5. 设置免密登录

设置master免密登录(以root身份)到slave1、slave2,以便执行远程安装。分别这三个节点上存储创建用户且 axida 赋予它root权限。

$ sudo useradd -d /home/axida  -m  axida
$ sudo passwd axida( 输入密码这里建议三台服务器密码设为一致)
//授予无密码sudo权限
$ echo "axida ALL = (root) NOPASSWD:ALL" >> /etc/sudoers.d/axida
$ sudo chmod 0440 /etc/sudoers.d/axida

允许无密码 SSH 登录 因为 ceph-deploy 不支持输入密码,你必须在管理节点上生成 SSH 密钥并把其公钥分发到各 Ceph 节点。 ceph-deploy 会尝试给初始 monitors 生成 SSH 密钥对。生成 SSH 密钥对,使用创建的用户不要用 sudo 或 root 。

$ ssh-keygen

一路Enter,提示 “Enter passphrase” 时,直接回车,口令为空即可。完成后生成id_rsa、id_rsa.pub两个文件。

传输公钥到各节点上

$ ssh-copy-id  axida@master
$ ssh-copy-id  axida@slave1
$ ssh-copy-id  axida@slave2

修改 ~/.ssh/config (若没有则创建),增加内容:

Host    master
    Hostname  master
    User      axida
    Port      22
    IdentityFile ~/.ssh/id_rsa

Host    slave1
    Hostname  slave1
    User      axida
    Port      22
    IdentityFile ~/.ssh/id_rsa

Host    slave2
    Hostname  slave2
    User      axida
    Port      22
    IdentityFile ~/.ssh/id_rsa

这是指定登录时候使用的用户名、密钥、端口等,以实现免密登录。

三、 部署

每个节点手动安装太麻烦,官网有ceph-deploy这个工具统一安装省时省力。我们只需要在master上操作就可以了。

1. 安装

登录到master:

$ yum install ceph-deploy -y
$ mkdir ~/ceph-cluster
$ cd ceph-cluster/

ceph-cluster是我们的工作目录,在这底下操作。

初始化集群,new命令是指定监控节点:

$ ceph-deploy new master

执行成功会在工作目录下生成ceph.conf,ceph.log,ceph.mon.keyring等文件。此时我们还要做个小修改。由于默认是3个osd节点,我们只有两个,等安装好之后会报一个节点有问题,所以需要修改配置,改为2个osd节点

$ echo "osd pool default size = 2"  >> ceph.conf
$ echo "osd max object name len = 256"  >> ceph.conf
$ echo "osd max object namespace len = 64"  >> ceph.conf

接下来3节点都安装,只要在master上执行如下命令,就可以远程安装另外两个节点:

$ ceph-deploy install master slave1 slave2

到这里就等吧,注意第一次登陆别的机器,会提示是否信任,输入yes就行了。没意外就这样输出

完毕!
ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe)

也可用用命令

$ ceph -v
ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe)

有报错就看文章末尾的问题总结。

安装完成后,开始配置。

2. 配置

初始化监控节点:

$ ceph-deploy mon create-initial

查看存储节点硬盘:

$ ceph-deploy disk list slave1

步骤三:创建OSD


步骤5.清空已删除磁盘中的内容



输入命令:

wipefs -af /dev/sdb



完成此项操作后,重启该OSD所在节点的机器

1)准备磁盘分区

[root@node1 ~]# parted /dev/vdb mklabel gpt

[root@node1 ~]# parted /dev/vdb mkpart primary 1M 50%

[root@node1 ~]# parted /dev/vdb mkpart primary 50% 100%

[root@node1 ~]# chown ceph.ceph /dev/vdb1

[root@node1 ~]# chown ceph.ceph /dev/vdb2

//这两个分区用来做存储服务器的日志journal盘

2)初始化清空磁盘数据(仅node1操作即可)

[root@node1 ~]# ceph-deploy disk zap node1:vdc node1:vdd

[root@node1 ~]# ceph-deploy disk zap node2:vdc node2:vdd

[root@node1 ~]# ceph-deploy disk zap node3:vdc node3:vdd

3)创建OSD存储空间(仅node1操作即可)

[root@node1 ~]# ceph-deploy osd create node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2

//创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL日志,

//一个存储设备对应一个日志设备,日志需要SSD,不需要很大

[root@node1 ~]# ceph-deploy osd create node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2

[root@node1 ~]# ceph-deploy osd create node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2

再次激活: ceph-deploy osd activate k8s-master03:sdc1:/dev/sdb1

好吧,先不管了,暂时能用。最后,我们把生成的配置文件从master同步部署到其他几个节点,使得每个节点的ceph配置一致:

$ ceph-deploy --overwrite-conf admin master slave1 slave2

测试

看一下配置成功了没?

$ ceph health
HEALTH_OK

如果pool设置失败的话可以删除掉重新添加即可。

更详细一点:

[root@master ceph-cluster]# ceph -s
    cluster 38a7726b-6018-41f4-83c2-911b325116df
     health HEALTH_OK
     monmap e1: 1 mons at {ceph-mon=192.168.128.131:6789/0}
            election epoch 2, quorum 0 ceph-mon
     osdmap e46: 8 osds: 8 up, 8 in
      pgmap v72: 256 pgs, 1 pools, 0 bytes data, 0 objects
            276 MB used, 159 GB / 159 GB avail
                 256 active+clean

部署过程中如果出现任何奇怪的问题无法解决,可以简单的删除一切从头再来:

$ ceph-deploy purge master slave1 slave2
$ ceph-deploy purgedata master slave1 slave2
$ ceph-deploy forgetkeys

如果要用命令行管理服务启动、关闭等,使用如下

$ systemctl start ceph-mon.target
$ systemctl stop ceph-mon.target
$ systemctl start ceph-osd.target
$ systemctl stop ceph-osd.target
$ systemctl start ceph.target
$ systemctl stop ceph.target

设置开机启动

$ systemctl enable ceph-mon.target
$ systemctl enable ceph-osd.target
$ systemctl enable ceph.target 

查看磁盘树

$ ceph osd tree
ID WEIGHT  TYPE NAME                                  UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.00980 root default                                                                 
-2 0.00490     host slave1                                   
 0 0.00490         osd.0                                   up  1.00000          1.00000 
-3 0.00490     host slave2                                   
 1 0.00490         osd.1                                   up  1.00000          1.00000

验证Ceph

当显示状态健康时,可写入数据并查看数据。

创建一个普通文本文件testfile.txt,并向其写入数据。

$ echo "hello liberalman" > testfile.txt

创建一个pool。格式为:rados mkpool {pool-name},执行:

$ rados mkpool data
successfully created pool data

将文件写入pool。格式为:rados put {object-name} {file-path} –pool={pool-name},执行:

$ rados put test-object-1 testfile.txt --pool=data

如果文件不大,应该很快就写完并成功了。如果卡主较长时间,则可能是出错了,需要排查问题。

查看文件是否存在于pool中,格式为:rados -p {pool-name} ls,执行:

$ rados -p data ls
test-object-1

确定文件的位置。格式为:ceph osd map {pool-name} {object-name},执行:

$ ceph osd map data test-object-1
osdmap e13 pool 'data' (1) object 'test-object-1' -> pg 1.74dc35e2 (1.2) -> up ([1,0], p1) acting ([1,0], p1)

从pool中读取文件。格式为:rados get {object-name} –pool={pool-name} {file-path} ,执行:

$ rados get test-object-1 --pool=data myfile

当前目录下读出一个myfile。可比对myfile和原文件testfile.txt是否相同

$ diff myfile testfile.txt

发现没有区别,是一样的文件。

从pool中删除文件。格式为:rados rm {object-name} –pool={pool-name},执行:

$ rados rm test-object-1 --pool=data

遇到问题

1.

[d-awsbj-sqe-kubernetes-1514262171][WARNIN] No data was received after 300 seconds, disconnecting...
[d-awsbj-sqe-kubernetes-1514262171][INFO  ] Running command: sudo ceph --version
......

到目标机器上查看,发现yum命令锁死了,一直有个yum的进程存在,但是安装ceph包没安装成功,导致等待300s后调用ceph命令找不到。原来这台机器yum很慢,官方源下载龟速,还掉线。我手动将进程全部杀了,修改源为阿里云的源,然后直接在该机器上执行

yum -y install ceph ceph-radosgw

重新安装好之后,再回master执行ceph_deploy。还发现ceph-deploy竟然会自动把我配置的阿里云的源替换成ceph官网的源,看来只能手动执行yum安装了。

2.

如果出现任何网络问题,首先确认节点可以互相无密码ssh,各个节点的防火墙已关闭或加入规则

3. HostNotFound

其实不是找不到域名,而是ssh访问失败了,可能是网络不通、密钥认证不通过,所以好好检查想自己ssh免密登录那块做对了没有。

4. connection detected need for sudo

打开/etc/sudoers,注释掉原来的规则,改成对我们的用户ceph,不做检查

#Defaults    requiretty
Defaults:ceph !requiretty

5. 64 pgs undersized

$ ceph health

HEALTH_WARN 64 pgs degraded; 64 pgs stuck degraded; 64 pgs stuck unclean; 64 pgs stuck undersized; 64 pgs undersized

是因为配置中默认osd=3,备份=2,与实际不符,更改配置文件ceph.conf,增加以下两行:

osd_pool_default_size = 2
osd_pool_default_min_size = 1

(不过没有生效,怀疑需要重启集群,待测试),或者添加一个osd节点(有些说法是要最少3个osd)

出现HEALTH_WARN,先查看一下rbd的大小,如果osd数目小于这个数字,就会出错,所以需要手动将数量设置为与目前osd个数相同。

$ ceph osd pool get rbd size
$ ceph osd pool set rbd size 1
$ ceph osd pool set rbd min_size 1

问题1:ceph-deploy部署的方式。就算我3个osd装在两台机器上,osd pool default size还是要设置为2,才行,不然还是会提示 degraded; pgs stuck unclean

$ ceph osd pool set rbd size 2

然后

$ ceph health
HEALTH_OK

答案1:因为ceph deploy 默认吧osd 设置在同一个bucket下面,而ceph算法规则默认将不同的备份数分发到不同的不同的bucket下,所以ceph认为你的bucket少于你的备份 数从而报这个错。要避免这个问题可以手动部署ceph不用cephdeploy,或者手动去修改

由于做试验的时候,使用的机器台数不同,以及osd数量不同,会出现,HEALTH_WARN pgs degraded,undersized 等警告,这个时候需要调整池子的大小,size,min_size.

特别是单机安装的时候,容易出现这种错误。

ceph的进程:

这三种进程分布于集群中的服务器上,服务器中可以只运行一种,也可以多个同时运行,推荐为一个服务器运行一种,使得负载均衡

  • osd 守护进程:即为存储守护进程
  • mon 守护进程:监视器守护进程
  • mds 守护进程:元数据守护进程

查看本机上运行那些ceph进程

$ ps  aux |grep ceph

ceph的文件:

可以在配置文件中修改位置

  • 配置文件:默认 /etc/ceph/ceph.conf
  • 日志文件:默认 /var/log/ceph
  • 运行时文件:默认 /var/run/ceph

每个进程的管理套接字位置:/var/run/ceph/cluster-name.asok

使用管理套接字查看osd.0的运行时配置信息:

$ ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | less

配置文件ceph.conf

集群启动后,每个守护进程从配置文件 /etc/ceph/ceph.conf中查看配置信息

[ global ]
#该配置下设置应用于所有ceph守护进程
[ osd ]
#该配置下设置应用于所有osd守护进程
#或者重写global配置
[ osd.0 ]
#该配置设置应用于osd 0进程,或者重写前面配置
[ mon ]
#该配置应用于所有监视器进程
[ mds ]
#该配置应用于所有元数据服务进程

查看pool,默认rbd

$ ceph osd pool ls
rbd

需要注意, pg_num只能增加, 不能缩小.

ceph osd pool set rbd pg_num 64

Error EEXIST: specified pg_num 64 <= current 128

There are unfinished transactions remaining. You might consider running yum-complete-transaction, or “yum-complete-transaction –cleanup-only” and “yum history redo last”, first to finish them. If those don’t work you’ll have to try removing/installing packages by hand (maybe package-cleanup can help).

清除yum缓存

yum clean all

清理未完成的yum事物

yum-complete-transaction –cleanup-only

这就说明ceph-deploy工具能够自动的去分区,而不需要我们先分区,之前我因为先分区,执行

[root@sqh0 cluster]# ceph-deploy osd prepare sqh0:/dev/sdb1

但后面会报诸多错误。请一定要谨慎应对。另外通过执行结果我们也可以看到/var/lib/ceph/osd/ceph-0已经初始化到了/dev/sdb1这个分区上了,下面我们需要命令去激活这个osd就行了。


http://blog.csdn.net/styshoo/article/details/55471132


http://blog.csdn.net/lk142500/article/details/77880386


作者:Liberalman

链接:https://www.jianshu.com/p/26829d796064