ceph 集群部署

Ceph是一种分布式存储系统,它可以将多台服务器组成一个超大集群,把这些机器中的磁盘资源整合到一块儿,形成一个大的资源池(PB级别),然后按需分配给应用使用。

由于我的ceph集群和k8s集群是部署在同三台主机上面的,所以系统初始化在安装k8s时已经完成,直接从下面安装ceph-deploy软件工具开始.

一.初始化环境:

主机规划:

IP地址              主机名称                    部署服务
10.20.9.225     v0-k8s-master               ceph-deploy mon
10.20.9.226     v0-k8s-node-1               osd.0
10.20.9.227     v0-k8s-node-2            osd.1

1.关闭防火墙

#systemctl stop firewalld
#systemctl disable firewalld

2.关闭selinux:

#setenforce 0
#sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config

3.ntp时间服务同步

#timedatectl set-timezone Asia/Shanghai
校对系统时钟
#ntpdate 0.cn.pool.ntp.org

4.设置主机名及同步hosts文件

#hostnamectl --static set-hostname v0-k8s-master
#hostnamectl --static set-hostname v0-k8s-node-1
#hostnamectl --static set-hostname v0-k8s-node-2

5.将host文件同步到三台主机

#cat  /etc/hosts  
10.20.9.225 v0-k8s-master
10.20.9.226 v0-k8s-node-1
10.20.9.227 v0-k8s-node-2

6.配置ssh互信:

# ssh-keygen -t rsa
# ssh-copy-id v0-k8s-master
# ssh-copy-id v0-k8s-node-1
# ssh-copy-id v0-k8s-node-2

二、安装部署工具 ceph-deploy

Ceph 提供了部署工具 ceph-deploy 来方便安装 Ceph 集群,我们只需要在 ceph-deploy 节点上安装即可,里对应的就是 v0-k8s-master 节点,把 Ceph 仓库添加到 ceph-deploy 管理节点,然后安装 ceph-deploy

1、执行命令

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 -rf /etc/yum.repos.d/dl.fedoraproject.org*

安装并启用EPEL存储库的额外软件包:

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2.添加 Ceph 源

cat > /etc/yum.repos.d/ceph.repo <<EOF
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
EOF

3.更新你的仓库并安装ceph-deploy

#yum update && yum install ceph-deploy

4.查看ceph-deploy工具版本:

# ceph-deploy --version
1.5.39

三、创建ceph集群

1、创建用于保存配置详细信息的目录

[root@v0-k8s-master ~]#mkdir -p /etc/ceph && cd /etc/ceph

2、在您创建的用于保存配置详细信息的目录的管理节点上,使用ceph-deploy执行以下步骤,ceph-deploy工具的new命令会部署一个默认名称为ceph的新的ceph集群

[root@v0-k8s-master ceph]# ceph-deploy new v0-k8s-master

我们会发现 ceph-deploy 会在 /etc/ceph 目录下生成几个文件

[root@v0-k8s-master ceph]# ll
total 12
-rw-r--r-- 1 root root  202 Jul 13 16:00 ceph.conf
-rw-r--r-- 1 root root 3006 Jul 13 16:00 ceph-deploy-ceph.log
-rw------- 1 root root   73 Jul 13 16:00 ceph.mon.keyring

其中ceph.conf 为 ceph 配置文件,ceph-deploy-ceph.log 为 ceph-deploy 日志文件,ceph.mon.keyring 为 ceph monitor 的密钥环。

接下来,我们需要修改下 ceph.conf 配置文件,增加副本数为 2,因为我们有两个 osd 节点。

[root@v0-k8s-master ceph]# cat ceph.conf 
[global]
fsid = 639eeac1-da64-44c0-8ac0-6fadb54e1155
mon_initial_members = v0-k8s-master
mon_host = 10.20.9.225
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2   #增加默认副本数为 2
public network=10.20.9.0/24

3.安装ceph:

然后,通过 eph-deploy工具将Ceph软件的二进制包安装到所有的节点上,在管理节点v0-k8s-master执行.

[root@v0-k8s-master ~]#ceph-deploy install v0-k8s-master  v0-k8s-node-1 v0-k8s-node-2

执行后如果遇到如下错误:

[v0-k8s-master][WARNIN] ensuring that /etc/yum.repos.d/ceph.repo contains a high priority
[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph'

解决方法:
执行如下命令

[root@v0-k8s-master ~]#yum remove ceph-release -y
[root@v0-k8s-master ~]#rm  -rf /etc/yum.repos.d/ceph.repo.rpmsave

再重新执行安装

[root@v0-k8s-master ~]#ceph-deploy install v0-k8s-master v0-k8s-node-1 v0-k8s-node-2

如果执行中报如下错误:

[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version

其实真正原因是网络太差,查看进程发现安装进程还在.

# ps -ef | grep yum
root       1742      1  0 03:01 pts/0    00:00:03 /usr/bin/python /usr/bin/yum -y install ceph ceph-radosgw

结果是在后台还运行,也就是还在安装中ceph中

解决办法:

不要强制杀掉yum进程,就让yum在后台慢慢装,等个一小时在查看进程,如果yum进程不在了,可以重新再执行一次安装命令。

[root@v0-k8s-master ceph]#ceph-deploy install v0-k8s-master  v0-k8s-node-1 v0-k8s-node-2

4.查看ceph版本:

[root@v0-k8s-master ceph]#ceph --version
ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)

四、初始化集群

1.在管理节点上(v0-k8s-master)创建你的第一个monitor(监控),部署初始监视器并收集密钥,执行以下命令

[root@v0-k8s-master ceph]# ceph-deploy mon create-initial

执行完成后,本地目录应具有以下密钥环(*.keyring):

[root@v0-k8s-master ceph]# ll
total 164
-rw------- 1 root root    113 Jul 14 11:55 ceph.bootstrap-mds.keyring
-rw------- 1 root root    113 Jul 14 11:55 ceph.bootstrap-mgr.keyring
-rw------- 1 root root    113 Jul 14 11:55 ceph.bootstrap-osd.keyring
-rw------- 1 root root    113 Jul 14 11:55 ceph.bootstrap-rgw.keyring
-rw------- 1 root root    129 Jul 14 11:55 ceph.client.admin.keyring
-rw-r--r-- 1 root root    227 Jul 14 11:55 ceph.conf
-rw-r--r-- 1 root root 103507 Jul 14 11:55 ceph-deploy-ceph.log
-rw------- 1 root root     77 Jul 14 11:55 ceph.mon.keyring
-rw------- 1 root root     73 Jul 14 11:55 ceph.mon.keyring-20180714115522
-rw-r--r-- 1 root root     92 Jul 10 01:03 rbdmap

创建完mon之后,v0-k8s-master节点就成为了mon角色

[root@v0-k8s-master ceph]# ceph status
    cluster 453a5bdd-481e-49da-b70e-eaf5b91f1c04
     health HEALTH_ERR   #目前的健康还是没有处于健康状态,因为还没添加osd
            64 pgs are stuck inactive for more than 300 seconds
            64 pgs stuck inactive
            64 pgs stuck unclean
            no osds
     monmap e1: 1 mons at {v0-k8s-master=10.20.9.225:6789/0}
            election epoch 4, quorum 0 v0-k8s-master
     osdmap e1: 0 osds: 0 up, 0 in
            flags sortbitwise,require_jewel_osds
      pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
            0 kB used, 0 kB / 0 kB avail
                  64 creating

接下来需要创建 OSD 了,OSD 是最终数据存储的地方,这里我们准备了两个 OSD 节点,分别为 osd.0 和 osd.1

2.在ceph-deploy (v0-k8s-master) 上执行如下,创建osd目录并赋予ceph权限.

[root@v0-k8s-master ~]# ssh v0-k8s-node-1
Last login: Sat Jul 14 13:51:38 2018 from 10.20.99.10
[root@v0-k8s-node-1 ~]# mkdir /opt/osd0
[root@v0-k8s-node-1 ~]# chown -R ceph:ceph /opt/osd0
[root@v0-k8s-node-1 ~]# exit
logout
Connection to v0-k8s-node-1 closed.
[root@v0-k8s-master ~]# ssh v0-k8s-node-2
Last login: Sat Jul 14 13:51:39 2018 from 10.20.99.10
[root@v0-k8s-node-2 ~]# mkdir /opt/osd1
[root@v0-k8s-node-2 ~]# chown -R ceph:ceph /opt/osd1
[root@v0-k8s-node-2 ~]# exit
logout
Connection to v0-k8s-node-2 closed.
[root@v0-k8s-master ~]# 

注意:这里执行了 chown -R ceph:ceph 操作,将 osd0 和 osd1 目录的权限赋予 ceph:ceph,否则,接下来执行 ceph-deploy osd activate ... 时会报权限错误。

接下来,我们需要 ceph-deploy 节点执行 prepare OSD 操作,目的是分别在各个 OSD 节点上创建一些后边激活 OSD 需要的信息。

3.由于测试环境的特殊性,本次安装暂时把一个目录 /opt(挂载的数据盘)作为OSD目录,这个/opt 目录的文件类型为ext4的,==未来生产环境要用磁盘来做.

[root@v0-k8s-master ceph]# ceph-deploy --overwrite-conf osd prepare v0-k8s-node-1:/opt/osd0 v0-k8s-node-2:/opt/osd1

4.OK 接下来,我们需要激活 activate OSD

[root@v0-k8s-master ceph]# ceph-deploy osd activate v0-k8s-node-1:/opt/osd0 v0-k8s-node-2:/opt/osd1

看日志,激活也没有问题,最后一步

5.拷贝密钥

通过 ceph-deploy admin 将配置文件和 admin 密钥同步到各个节点,以便在各个 Node 上使用 ceph 命令时,无需指定 monitor 地址和 ceph.client.admin.keyring 密钥。

[root@v0-k8s-master ceph]# ceph-deploy admin v0-k8s-master v0-k8s-node-1 v0-k8s-node-2

说明:一旦创建成功,就可以执行ceph status命令来检查集群状态,当然这个阶段集群不会处于监控状态

确保你对 ceph.client.admin.keyring 有正确的操作权限

只在admin主机执行即可

#chmod +r /etc/ceph/ceph.client.admin.keyring

至此,Ceph 存储集群已经搭建完毕了,我们可以查看那一下集群是否启动成功!

6.检查集群状态

[root@v0-k8s-master ceph]# ceph health
HEALTH_ERR 64 pgs are stuck inactive for more than 300 seconds; 64 pgs stuck inactive; 64 pgs stuck unclean

发现集群报错了,经排查错误日志:

# tail -100f /var/log/ceph/ceph-osd.0.log 

2018-07-14 14:09:46.168025 7f7847616ac0  1 journal close /var/lib/ceph/osd/ceph-0/journal
2018-07-14 14:09:46.995715 7f7847616ac0  4 rocksdb: [db/db_impl.cc:217] Shutdown: canceling all background work
2018-07-14 14:09:46.995913 7f7847616ac0  4 rocksdb: [db/db_impl.cc:343] Shutdown complete
2018-07-14 14:09:46.996028 7f7847616ac0 -1  ** ERROR: osd init failed: (36) File name too long

log意思是说,文件名太长。各种搜索一番后,发现原来我用的文件系统是ext4,CentOS推荐使用xfs的文件系统。但是磁盘不能重新格式化,所以我就在ceph配置文件中增加参数,限制文件名的长度.

在配置文件添加如下内容

[root@v0-k8s-master ~]# vim /etc/ceph/ceph.conf 
[global]
# for ext4
osd max object name len = 256
osd max object namespace len = 64

7.同步文件

[root@v0-k8s-master ceph]# ceph-deploy --overwrite-conf admin v0-k8s-master v0-k8s-node-1 v0-k8s-node-2

#之后重启osd服务

[root@v0-k8s-node-1 ~]# systemctl restart  ceph-osd.target
[root@v0-k8s-node-1 ~]# systemctl status ceph-osd.target
[root@v0-k8s-node-2 ~]# systemctl restart  ceph-osd.target
[root@v0-k8s-node-2 ~]# systemctl status ceph-osd.target

再查看集群状态,已经是HEALTH_OK

[root@v0-k8s-master ~]# ceph -s
    cluster 453a5bdd-481e-49da-b70e-eaf5b91f1c04
     health HEALTH_OK
     monmap e1: 1 mons at {v0-k8s-master=10.20.9.225:6789/0}
            election epoch 4, quorum 0 v0-k8s-master
     osdmap e10: 2 osds: 2 up, 2 in
            flags sortbitwise,require_jewel_osds
      pgmap v31: 64 pgs, 1 pools, 0 bytes data, 0 objects
            10511 MB used, 363 GB / 393 GB avail
                  64 active+clean

至此集群就算部署完成了.

五、集群扩展

纵向扩展ceph集群

1.扩容一个osd,我们将v0-k8s-master也作为osd一个节点,并加入集群中.

从 ceph-deploy 节点准备 OSD

[root@v0-k8s-master ~]# ssh v0-k8s-master
[root@v0-k8s-master ~]# mkdir /opt/osd3
[root@v0-k8s-master ~]# chown -R ceph:ceph /opt/osd3
[root@v0-k8s-master ~]# cd /etc/ceph/
[root@v0-k8s-master ~]# ceph-deploy osd prepare v0-k8s-master:/opt/osd3/

激活 OSD

[root@v0-k8s-master ceph]# ceph-deploy osd activate v0-k8s-master:/opt/osd3/

一旦你新加了 OSD , Ceph 集群就开始重均衡,把归置组迁移到新 OSD 。可以用下面的 ceph 命令观察此过程:

[root@v0-k8s-master ceph]# ceph -w
    cluster 453a5bdd-481e-49da-b70e-eaf5b91f1c04
     health HEALTH_OK
     monmap e1: 1 mons at {v0-k8s-master=10.20.9.225:6789/0}
            election epoch 4, quorum 0 v0-k8s-master
     osdmap e17: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v64: 64 pgs, 1 pools, 0 bytes data, 0 objects
            15767 MB used, 544 GB / 590 GB avail
                  62 active+clean
                   2 activating

2018-07-14 15:00:47.985022 mon.0 [INF] pgmap v63: 64 pgs: 16 activating, 48 active+clean; 0 bytes data, 15767 MB used, 544 GB / 590 GB avail
......

2. 扩容monitor节点,在v0-k8s-node-1和v0-k8s-node-2上部署monitor.

[root@v0-k8s-master ceph]# vim ceph.conf 
public network = 10.20.9.0/24

在管理节点(v0-k8s-master)上通过ceph-deploy工具进行部署,执行以下命令:

[root@v0-k8s-master ceph]# ceph-deploy mon add v0-k8s-node-1
[root@v0-k8s-master ceph]# ceph-deploy mon add v0-k8s-node-2

新增 Monitor 后,Ceph 会自动开始同步并形成法定人数。你可以用下面的命令检查法定人数状态:

[root@v0-k8s-master ceph]# ceph -s
    cluster 395aec1f-5af8-4074-9d41-5806074576b6
     health HEALTH_OK
     monmap e3: 3 mons at {v0-k8s-master=10.20.9.225:6789/0,v0-k8s-node-1=10.20.9.226:6789/0,v0-k8s-node-2=10.20.9.227:6789/0}
            election epoch 6, quorum 0,1,2 v0-k8s-master,v0-k8s-node-1,v0-k8s-node-2
     osdmap e16: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v39: 64 pgs, 1 pools, 0 bytes data, 0 objects
            15681 MB used, 584 GB / 599 GB avail
                  64 active+clean
[root@v0-k8s-master ceph]# 

至此,ceph集群部署完成,下面就是怎么使用的了.

删除mon节点:

[root@v0-k8s-master ~]# ceph-deploy mon destroy v0-k8s-node-1

实在不行重新定义一个新集群

则使用以下命令重新声明monitor新集群

# ceph-deploy new v0-k8s-master v0-k8s-node-1 v0-k8s-node-2
# ceph-deploy  --overwrite-conf mon  create-initial

想清理我搭建的这个集群的话,可以使用以下命令

清理配置

#ceph-deploy purgedata v0-k8s-master  v0-k8s-node-1 v0-k8s-node-2
#ceph-deploy forgetkeys

# 清理 Ceph 安装包

[root@v0-k8s-master ~]#ceph-deploy purge v0-k8s-master  v0-k8s-node-1 v0-k8s-node-2

 

参考文档:

    http://docs.ceph.org.cn/start/intro/

              https://www.cnblogs.com/icloud/p/6115447.html

    https://www.cnblogs.com/netmouser/p/6876846.html
    https://blog.csdn.net/aixiaoyang168/article/details/78788703
    http://blog.51cto.com/freshair/2057132
         https://www.jianshu.com/p/bbd4545161b0
              https://blog.csdn.net/mailjoin/article/details/79695016

 

posted @ 2018-08-04 19:19  梦徒  阅读(2726)  评论(1)    收藏  举报