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

浙公网安备 33010602011771号