标签:ceph-deploy
上面左边是我的个人微信,如需进一步沟通,请加微信。 右边是我的公众号“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 root@ceph-2 //拷贝到所有节点
关闭防火墙
# 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/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.161 ceph-1
192.168.1.162 ceph-2
192.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 packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/x86_64/
enabled=1
gpgcheck=1
priority=2
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=1
priority=2
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS/
enabled=0
gpgcheck=1
priority=2
type=rpm-md
gpgkey=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官方提供的部署工具,它通过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源,因此这里使用--no-adjust-repos
参数忽略设置ceph源
# ceph-deploy install --no-adjust-repos ceph-1 ceph-2 ceph-3
# 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 = 2
osd_pool_default_min_size=1
journal默认5G建议1TB数据5G,4T盘设置20G,这个影响性能的
我们这里创建三个Monitor
cd /data/ceph/deploy
ceph-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 ceph-mon@ceph-1
#4.systemctl start ceph-mon@ceph-1
在一主机上新增监视器时,如果它不是由ceph-deploy new
命令所定义的,那就必须把public network
加入 ceph.conf配置文件
为节点准备认证key
ceph-deploy gatherkeys ceph-1 ceph-2 ceph-3
#若有需要,可以删除管理主机上、本地目录中的密钥。可用下列命令:#ceph-deploy forgetkeys
创建集群,安装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 下执行,否则会出现配置文件不一致的问题。
最后查看集群状态:
[root@ceph-1 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 命令
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 查看。
标签:ceph-deploy
原文地址:http://blog.51cto.com/yuweibing/2119861