Ceph 之 使用ceph-deploy部署ceph集群

 

上面左边是我的个人微信,如需进一步沟通,请加微信。  右边是我的公众号“Openstack私有云”,如有兴趣,请关注。

环境:

系统centos7.4

ceph版本 ceph version 10.2.10

测试服务器为kvm虚拟机(openstack虚拟机)

本篇文章是记录下自己的部署过程,服务器使用kvm虚拟机,只测试功能,服务器分配如下


节点 服务 cluster network
ceph-1(admin-node) osd.{1,2,},mon.ceph-1 eth0:192.168.1.161/24
ceph-2 osd.{3,4},mon.ceph-2 eth0:192.168.1.162/24
ceph-3 osd.{5,6},mon.ceph-3 eth0:192.168.1.163/24


每个节点在原来系统盘的基础上增加2块osd盘/dev/vdb 、/dev/vdc,集群共有6个osd进程,3个monitor进程。管理节点用作执行ceph-deploy命令,使用ceph-1节点充当。

环境预检

部署集群之前,需要进行环境准备,这些步骤应当设置于集群所有节点

配置免登陆访问

生成ssh-key

# ssh-keygen

对需要访问的机器进行认证

# ssh-copy-id [email protected]   //拷贝到所有节点

关闭防火墙

# systemctl stop firewalld

关闭防火墙自启动

# systemctl disable firewalld

关闭selinux

# setenforce 0

关闭selinux的自启动

# vim /etc/selinux/config

SELINUX=disabled

ntp同步

各osd节点间需要设置时间同步,节点时钟偏差过大会引起pg异常

yum install -y ntp

设置时区为上海:

timedatectl set-timezone Asia/Shanghai

在ntpserver的机器上写入配置文件

# vim /etc/ntp.conf

restrict default nomodify

server  127.127.1.0

fudge   127.127.1.0 stratum 8

# systemctl start ntpd

在需要同步时间的客户端机器上修改配置文件

# vim /etc/ntp.conf

driftfile /var/lib/ntp/drift

server ceph-1

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

ntp客户端同样要启动这个服务

# systemctl start ntpd

检查机器的ntp服务

# ntpq -p

注意:如果使用ntpdate 手动同步,需要先将ntpd服务停止。

hostname设置

Cluster Map中会使用主机hostname作为名称表示,因此hostname需要提前规划

hosts添加

每个节点都添加集群所有节点的hosts,ceph.conf配置文件中会使用到,如下是3个节点的hosts

# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.161 ceph-1192.168.1.162 ceph-2192.168.1.163 ceph-3

配置ceph源

base和epel源使用阿里源

# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

或者163的源:

# wget -O  /etc/yum.repos.d/CentOS-Base-163.repo http://mirrors

不要指望使用ceph官方源,这里需要使用国内第三方源,比如163的ceph源

#cat /etc/yum.repos.d/ceph.repo[ceph]name=Ceph packagesbaseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/x86_64/enabled=1gpgcheck=1priority=2type=rpm-mdgpgkey=http://mirrors.163.com/ceph/keys/release.asc

[ceph-noarch]name=Ceph noarch packagesbaseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch/enabled=1gpgcheck=1priority=2type=rpm-mdgpgkey=http://mirrors.163.com/ceph/keys/release.asc

[ceph-source]name=Ceph source packagesbaseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS/enabled=0gpgcheck=1priority=2type=rpm-mdgpgkey=http://mirrors.163.com/ceph/keys/release.asc

注意这里priority可以设置yum源的优先级,如果你其它源中也有ceph软件包,需要保证这里的ceph.repo的优先级priority比其它的高(值越小越高),为此需要安装下面这个软件包,用以支持yum源的优先级

yum -y install yum-plugin-priorities

下面这些依赖包也需要在每个节点都安装

yum install -y yum-utils snappy leveldb gdiskpython-argparse gperftools-libs ntpdate

内核调整

osd进程可以产生大量线程,如有需要,可以调整下内核最大允许线程数

vi /etc/sysctl.conf kernel.pid_max = 4194303

# echo 'kernel.pid_max = 4194303' >>/etc/sysctl.conf

安装ceph-deploy工具

ceph-deploy是ceph官方提供的部署工具,它通过ssh远程登录其它各个节点上执行命令完成部署过程,我们可以随意选择一台服务器安装此工具,为方便,这里我们选择ceph-1节点安装ceph-deploy

我们把ceph-1节点上的/data/ceph/deploy目录作为ceph-deploy部署目录,其部署过程中生成的配置文件,key密钥,日志等都位于此目录下,因此下面部署应当始终在此目录下进行

yum install ceph-deploy -y

mkdir -p /data/ceph/deploy

ceph-deploy工具默认使用root用户SSH到各Ceph节点执行命令。为了方便,已经配置ceph-deploy免密码登陆各个节点。如果ceph-deploy以某个普通用户登陆,那么这个用户必须有无密码使用sudo的权限。

安装ceph集群

ceph软件包安装

首先安装ceph软件包到三个节点上。上面我们已经配置好ceph源,因此这里使用--no-adjust-repos参数忽略设置ceph源

# ceph-deploy install --no-adjust-repos ceph-1 ceph-2 ceph-3

创建ceph集群

# ceph-deploy new ceph-1 ceph-2 ceph-3#上步会创建一个ceph.conf配置文件和一个监视器密钥环到各个节点的/etc/ceph/目录,ceph.conf中会有`fsid`,`mon_initial_members`,`mon_host`三个参数 #默认ceph使用集群名ceph

Ceph Monitors之间默认使用6789端口通信, OSD之间默认用6800:7300 范围内的端口通信,多个集群应当保证端口不冲突

配置文件

修改ceph-deploy目录/data/ceph/deploy下的ceph.conf

#/data/ceph/deploy/ceph.conf添加如下参数  osd_journal_size = 5120 osd_pool_default_size = 2osd_pool_default_min_size=1

journal默认5G建议1TB数据5G,4T盘设置20G,这个影响性能的

添加mons

我们这里创建三个Monitor

cd /data/ceph/deployceph-deploy mon create ceph-1 ceph-2 ceph-3#上面命令效果如下#1.write cluster configuration to /etc/ceph/{cluster}.conf#2.生成/var/lib/ceph/mon/ceph-ceph-1/keyring#3.systemctl enable [email protected]#4.systemctl start [email protected]

在一主机上新增监视器时,如果它不是由ceph-deploy new命令所定义的,那就必须把public network加入 ceph.conf配置文件

key管理

为节点准备认证key

ceph-deploy gatherkeys ceph-1 ceph-2 ceph-3#若有需要,可以删除管理主机上、本地目录中的密钥。可用下列命令:#ceph-deploy forgetkeys

osd创建

创建集群,安装ceph包,收集密钥之后,就可以创建osd了

ceph-deploy osd create ceph-1:vdb ceph-1:vdc ceph-2:vdb ceph-2:vdc ceph-3:vdb ceph-3:vdc  #可以create多个osd#如果使用单独的journal盘,可以用这种格式:ceph-1:vdb:/dev/vdf ,意思是在ceph-1上创建一个osd,使用磁盘vdb作为数据盘,osd journal分区从vdf磁盘上划分

每个节点上2个osd磁盘vd{b,c}。如果使用单独的日志盘,一般使用同一个日志盘比如/dev/vdf,使用prepare过程中ceph会自动在/dev/vdf上创建相应的日志分区供osd使用,日志分区的大小由上步骤osd_journal_size 指定
prepare 命令只准备 OSD。在大多数操作系统中,硬盘分区创建后,不用 activate 命令也会自动执行 activate 阶段(通过 Ceph 的 udev 规则)

activate 命令会让 OSD 进入 up 且 in 状态,此命令所用路径和 prepare 相同。在一个节点运行多个OSD 守护进程、且多个 OSD 守护进程共享一个日志分区时,你应该考虑整个节点的最小 CRUSH 故障域,因为如果这个 SSD 坏了,所有用其做日志的 OSD 守护进程也会失效

我们这里直接使用create命令,相当于是prepare + activate

允许3台主机以管理员权限执行 Ceph 命令

ceph-deploy admin ceph-1 ceph-2 ceph-3

需要注意,以上的ceph-deploy命令始终在同一个目录/data/ceph/deploy 下执行,否则会出现配置文件不一致的问题。

最后查看集群状态:

[[email protected] deploy]# ceph -w
    cluster 87fd3c2d-7d79-4857-bebe-bc584dcf7dd6
     health HEALTH_WARN
            too few PGs per OSD (21 < min 30)
     monmap e2: 3 mons at {ceph-1=192.168.1.161:6789/0,ceph-2=192.168.1.162:6789/0,ceph-3=192.168.1.163:6789/0}
            election epoch 8, quorum 0,1,2 ceph-1,ceph-2,ceph-3
     osdmap e31: 6 osds: 6 up, 6 in
            flags sortbitwise,require_jewel_osds
      pgmap v61: 64 pgs, 1 pools, 0 bytes data, 0 objects
            201 MB used, 209 GB / 209 GB avail
                  64 active+clean
2018-05-24 14:48:31.947364 mon.0 [INF] pgmap v61: 64 pgs: 64 active+clean; 0 bytes data, 201 MB used, 209 GB / 209 GB avail

ceph-deploy常用命令

  • 允许一主机以管理员权限执行 Ceph 命令
ceph-deploy admin {host-name [host-name]...}#拷贝ceph.conf和client.admin.keyring到远程主机上
  • 把改过的配置文件分发给集群内各主机
ceph-deploy --overwrite-conf config push node{1..3}
  • ceph-deploy执行后的清除
#卸载指定节点上的ceph软件包  ceph-deploy uninstall {hostname [hostname] ...}#清除数据   #如果只想清除 /var/lib/ceph下的数据、并保留Ceph安装包ceph-deploy purgedata {hostname} [{hostname} ...]#要清理掉 /var/lib/ceph 下的所有数据、并卸载 Ceph 软件包ceph-deploy purge {hostname} [{hostname} ...]
  • 清除磁盘操作
#查看某节点上所有磁盘ceph-deploy disk list {node-name [node-name]...}#清除指定磁盘上的分区,用于重装ceph集群#ceph-deploy disk zap {osd-server-name}:{disk-name}例如: ceph-deploy disk zap ceph-1:/dev/vdb 
  • monitor操作
#从某个节点上移除Ceph MON进程ceph-deploy mon destroy {host-name [host-name]...}#ceph集群至少需要一个mon进程,但一个mon进程无法保证高可靠性。确保你删除一个监视器后,集群仍能正常工作。

总结

通过ceph-deploy命令基本上可以很方便快捷的搭建一套ceph集群,在使用之前主要是需要规划好主机名和网络,实际生产环境中应该要考虑ceph的cluster网络和业务网络分离,需要有2个网口。在安装之前有一些预配置比较繁琐,主要是主机间的ssh互信、时间同步、防火墙、yum源更改到国内等。

ceph-deploy 部署过程主要是:

  • 安装ceph 软件包:
ceph-deploy install ceph-1 ceph-2 ceph-3
  • 创建集群:
ceph-deploy new ceph-1 ceph-2 ceph-3
  • 安装mon:
ceph-deploy mon create  ceph-1 ceph-2 ceph-3
  • 准备认证key:
ceph-deploy gatherkeys  ceph-1 ceph-2 ceph-3
  • 创建osd:
ceph-deploy create osd  ceph-1 ceph-2 ceph-3
  • 赋予主机管理权限:
ceph-deploy admin  ceph-1 ceph-2 ceph-3

如果忘了子命令,可以通过加-h 查看。

原文地址:http://blog.51cto.com/yuweibing/2119861

时间: 2024-08-10 07:01:56

Ceph 之 使用ceph-deploy部署ceph集群的相关文章

Kubernetes/3.使用Kubeadm部署k8s集群

使用Kubeadm部署k8s集群 kubeadm是一个提供了"kubeadm init"和"kubeadm join"最佳实践命令,且用于快速构建一个kubernetes集群的工具,你可以使用此工具快速构建一个kubernetes学习环境.通过本章节的学习,你将能够使用kubeadm工具,成功构建出一个基础的kubernetes集群环境. 环境准备 Hosts文件准备 Docker环境配置 其他准备工作 使用Kubeadm部署k8s集群 参考文档 备注 环境准备 i

利用shipyard部署swarm集群及管理容器

shipyard是一个web管理容器的工具 服务器列表: 10.0.22.232    swarm-manage 10.0.22.244    swarm-node-1 10.0.22.245    swarm-node-2 部署swarm集群: swarm-manage #curl -s https://shipyard-project.com/deploy | bash -s Digest: sha256:8a60ad2ee9bd1e4e3d2e50b4c61ed510a158c8ca632

使用kubeadm部署kubernetes集群

使用kubeadm部署kubernetes集群 通过docker,我们可以在单个主机上快速部署各个应用,但是实际的生产环境里,不会单单存在一台主机,这就需要用到docker集群管理工具了,本文将简单介绍使用docker集群管理工具kubernetes进行集群部署. 1 环境规划与准备 本次搭建使用了三台主机,其环境信息如下:| 节点功能 | 主机名 | IP || ------|:------:|-------:|| master | master |192.168.1.11 || slave1

Kubernetes学习之路(一)之Kubeadm部署K8S集群

一个星期会超过多少阅读量呢??发布一篇,看看是否重新在51上写学习博文,有老铁支持嘛?? 使用kubeadm部署集群 节点名称 ip地址 部署说明 Pod 网段 Service网段 系统说明 k8s-master 192.168.56.11 docker.kubeadm.kubectl.kubelet 10.244.0.0/16 10.96.0.0/12 Centos 7.4 k8s-node01 192.168.56.12 docker.kubeadm.kubelet 10.244.0.0/1

MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)

MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)  OneAPM蓝海讯通7月3日 发布 推荐 4 推荐 收藏 14 收藏,1.1k 浏览 MariaDB 作为 Mysql 的一个分支,在开源项目中已经广泛使用,例如大热的 openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的. MariaDB Galera Cluster 介绍 MariaDB 集群是 MariaDB 同步多主机集群.它仅支持 XtraDB/ Inn

使用docker安装部署Spark集群来训练CNN(含Python实例)

使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上本文链接,不甚感激! http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器,每台有8个tesla-GPU,然而平时做实验都只使用了其中的一个GPU,实在暴遣天物! 于是想用spark来把这些GPU都利用起来.听闻d

Shell脚本快速部署Kubernetes集群系统

本文紧跟上节所讲的手动部署Kubernetes管理Docker篇所写,本篇主要内容利用Shell脚本完成快速部署Kubernetes集群.上节博文看过的朋友也能感觉到部署过程相对比较简单,那么,出于简化工作流程,推进运维自动化角度来说,于是花了2/3天时间写这个部署Kubernetes脚本. 运维工作中,常常会遇到部署各种各样的服务,建议:常规部署都应该尽量使用脚本完成,一方面提高自身脚本编写能力,另一方面推进运维自动化. 详细部署说明文档:http://lizhenliang.blog.51c

脚本自动部署构架集群和监控状态

脚本自动部署构架集群和监控状态 shell脚本编写自动部署.初始配置.并启动nginx反向代理服务 1 #!/bin/bash 2 systemctl disable firewalld 3 systemctl stop firewalld 4 setenforce 0 5 #### 6 yum install epel-release -y 7 yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel 8 yum

单台服务器部署zookeeper集群

单台部署集群 不建议使用单台部署多台服务,因为并没有实现冗余.使用多台服务器部署zookeeper集群才是生产环境使用的方案. 系统环境 [[email protected] ~]# uname -rm 2.6.32-504.el6.x86_64 x86_64 [[email protected] ~]# cat/etc/redhat-release CentOS release 6.6 (Final) 设置java堆 交换会严重降低zookeeper的性能,所以设置java对大小非常重要.为了

Linux环境快速部署Zookeeper集群

一.部署前准备: 1.下载ZooKeeper的安装包:http://zookeeper.apache.org/releases.html 我下载的版本是zookeeper-3.4.9. 2.将下载的zookeeper-3.4.9包放到/opt目录下,目录结构如下图所示: 3.在/tmp目录下新建一个zookeeper目录,并在zookeeper目录下新建一个data目录. 4.三台linux系统的ip: ip1:10.43.98.6 ip2:10.43.98.8 ip3:10.43.98.18