Ceph分布式存储安装
1.环境
系统版本:centos7.4 x86_64 server
ceph版本:12.2.13 luminous(stable)
hostname|public-network| role
—|—|—|—
kf-ceph-admin | 145.170.34.188| admin、ceph-deploy
kf-ceph-node1 | 145.170.34.189| osd、mgr、mon
kf-ceph-node2 | 145.170.34.190| osd
kf-ceph-node3 | 145.170.34.191| osd
kf-ceph-client | 145.170.34.193|
2.安装
2.1 ceph-deploy快速部署ceph集群
2.1.1 添加磁盘
给三台node节点机器添加一块5G以上的磁盘(本次环境为10G)
2.1.2 关闭防火墙和selinux(或配置防火墙策略)
~]# systemctl stop firewalld
~]# systemctl disable firewalld
~]# setenforce 0
~]# sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config
2.1.3 配置时间同步(所以节点)
使用admin上配置
(1).安装ntp
yum install -y ntp
vi /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#注释掉上级时间服务器地址
# 新增
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
#当外部NTP服务器无法连接时,使用本机为NTP服务器
(2).启动NTP时间服务器:service ntpd start
(3).设置NTP开机自动启动:chkconfig ntpd on
(4).设置NTP开机自启动:systemctl enable ntpd
(5).查看NTP是否正常运行:netstat -tlunp | grep ntp
(6).其他所以节点:
yum install -y ntp
ntpdate 时间服务器ip
2.1.4 配置hosts解析
cat >>/etc/hosts<<EOF
145.170.34.188 kf-ceph-admin
145.170.34.189 kf-ceph-node1
145.170.34.190 kf-ceph-node2
145.170.34.191 kf-ceph-node3
145.170.34.193 kf-ceph-client
EOF
2.1.5 添加用户并配置sudo权限
useradd cephadmin
~]# echo "dayi123"| passwd --stdin cephadmin
~]# echo "cephadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin
~]# chmod 0440 /etc/sudoers.d/cephadmin
在admin设备上用root用户添加.ssh/config配置文件,这样ceph-deploy 就能用所建的用户名登录ceph节点了,如下
[root@admin ~]#mkdir ~/.ssh
[root@admin ~]# vim ~/.ssh/config
Host kf-ceph-node1
Hostname kf-ceph-node1
User cephadmin
Host kf-ceph-node2
Hostname kf-ceph-node2
User cephadmin
Host kf-ceph-node3
Hostname kf-ceph-node3
User cephadmin
2.1.6 配置cephadmin用户免秘钥登录
~]# su - cephadmin
~]$ ssh-keygen
~]$ ssh-copy-id -i cephadmin@kf-ceph-node1
~]$ ssh-copy-id -i cephadmin@kf-ceph-node2
~]$ ssh-copy-id -i cephadmin@kf-ceph-node3
~]$ ssh-copy-id -i cephadmin@kf-ceph-client
2.1.7 在admin设备安装ceph-deploy,用root用户执行
配置ceph yum源
[root@admin ~]# vi /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
重建一下yum元数据,并开启yum缓存,更新yum源
yum clean all
yum makecache
yum update
[root@admin ~]# vi /etc/yum.conf
keepcache=1
安装ceph-deploy
[root@admin ~]# yum install ceph-deploy -y
2.1.8 部署ceph
注意:以下操作没有特别说明,均在admin设备操作
创建集群操作目录
[root@admin ~]# su - cephadmin
[cephadmin@admin ~]$ sudo mkdir cluster ## ceph-deploy命令需要在此目录执行
[cephadmin@kf-ceph-admin ~]$ sudo yum install -y wget unzip
依赖安装
[cephadmin@admin ~]$ sudo wget -c https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip
[cephadmin@admin ~]$ sudo unzip distribute-0.7.3.zip #若没有unzip命令先安装yum -y install unzip
[cephadmin@admin ~]$ cd distribute-0.7.3
[cephadmin@admin distribute-0.7.3]$ sudo python setup.py install
集群创建
[cephadmin@admin ~]$ cd cluster/ # cd 回到家目录
[cephadmin@admin cluster]$ sudo ceph-deploy new node1
[cephadmin@admin cluster]$ ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring #集群创建成功后会有这三个文件
说明:
ceph.conf 集群配置文件
ceph-deploy-ceph.log 使用ceph-deploy部署的日志记录
ceph.mon.keyring mon的验证key文件
安装luminous-12.2.13
配置国内ceph yum源,三个node设备均操作 root用户
yum -y install epel-release
vim /etc/yum.repos.d/ceph.repo #admin设备之前有创建过这个文件,可以把里面的内容替换掉,如下
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
保存退出后重建一下yum元数据
sudo yum clean all
sudo yum makecache
在node1 node2 node3 上面用 cephadmin用户安装ceph和ceph-radosgw
sudo yum install ceph ceph-radosgw -y #以上设备都需要执行
验证:在node1、node2、node3、client上面看一下ceph版本
sudo ceph --version
ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
2.1.9 集群初始化
在admin设备上面用 cephadmin 用户执行,初始化mon
[cephadmin@admin cluster]$ sudo ceph-deploy mon create-initial
赋予各个节点使用命令免用户名权限:
[cephadmin@admin cluster]$ sudo ceph admin kf-ceph-node1 kf-ceph-node2 kf-ceph-node3
安装ceph-mgr:只有luminous才有,为使用dashboard做准备
[cephadmin@admin cluster]$ sudo ceph-deploy mgr create kf-ceph-node1 ##我这里规划的node1
创建osd
注意:各个节点上提供存储空间的磁盘大小不能太小,最好50G以上,注意检查磁盘名字
[cephadmin@admin cluster]$ sudo ceph-deploy osd create --data /dev/vdb kf-ceph-node1 #这里省略,我有8块存储磁盘/dev/sdb /dev/sdc /dev/sdd ......
[cephadmin@admin cluster]$ sudo ceph-deploy osd create --data /dev/vdb kf-ceph-node2 #这里省略,同上
[cephadmin@admin cluster]$ sudo ceph-deploy osd create --data /dev/vdb kf-ceph-node3 #这里省略,同上
命令中/dev/sdb是在各个节点上为osd准备的空闲磁盘(无需分区格式化,如果有分区需要指定具体分区),个人建议不要分区
通过以下命令查看
ssh kf-ceph-node1 lsblk -f
查看集群状态:
[cephadmin@admin cluster]$ ssh kf-ceph-node1 sudo ceph -s
如果显示health_ok,3个osd up就成功了
2.1.10.在ceph.kf-ceph-node1上面配置Dashboard
把ceph-mgr和ceph-mon安装在同一个主机上,最好只有一个ceph-mgr
[root@kf-ceph-node1 ~]# su - cephadmin
创建管理域密钥
[cephadmin@kf-ceph-node1 ~]$ sudo ceph auth get-or-create mgr.kf-ceph-node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
[mgr.kf-ceph-node1]
key = AQD6vmBjLYc+IxAAEVZobOJu78KrWEbYvg4YWQ==
开启ceph-mgr 管理域
[cephadmin@kf-ceph-node1 ~]$ sudo ceph-mgr -i kf-ceph-node1
查看ceph状态,确认mgr的状态为active
[cephadmin@kf-ceph-node1 ~]$ sudo ceph status
cluster:
id: aec06bc6-428c-49ff-a2c1-2d84808bcb54
health: HEALTH_OK
services:
mon: 1 daemons, quorum node1
mgr: node1(active, starting)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0B
usage: 3.01GiB used, 12.0GiB / 15.0GiB avail
pgs:
打开dashboard模块:
[cephadmin@kf-ceph-node1 ~]$ sudo ceph mgr module enable dashboard
绑定开启dashboard模块的ceph-mgr节点的ip地址:
[cephadmin@kf-ceph-node1 ~]$ sudo ceph config-key set mgr/dashboard/kf-ceph-node1/server_addr 145.170.34.189 ##这个是kf-ceph-node1的ip
2.1.11.在ceph.kf-ceph-node1上面创建存储池
创建存储池,创建存储池相关命令需要在mon节点执行:
[cephadmin@kf-ceph-node1 ~]$ sudo ceph osd pool create kvm-backup 128 128 #这里的kvm-backup为pool名字,名字随意取
#扩展:少于 5 个 OSD 时可把 pg_num 设置为 128
OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
**注意:这个地方一定要注意,我22个osd,理论上需要写4096,但是4096需要后面加参数,我这里按计算公式来计算出来的 22*100/3 (22为osd数量、100是默认值、3是副本数量,副本数量默认是3
初始化存储池:
[cephadmin@kf-ceph-node1 ~]$ sudo rbd pool init kvm-backup
浏览器登录:
http://192.168.1.21:7000
2.1.12 集群节点的扩容方法
再加一个新的集群节点node4
-
1 主机名配置和绑定
-
2 在node4上yum install ceph ceph-radosgw -y安装软件
-
3 在部署节点node1上同步配置文件给node4. ceph-deploy admin node4
-
4 按需求选择在node4上添加mon或mgr或osd等
2.2 创建Ceph块存储
另备一台主机,系统centos7用来作为c1ient。主机名为kf-ceph-c1ient,ip:145.170.34.193。修改hosts文件实现和admin节点的主机名互通。
为客户端安装ceph
2.2.1.yum环境配置
[root@kf-ceph-client ~]# yum -y install epel-release
[root@kf-ceph-client ~]# vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
#开启yum缓存
[root@kf-ceph-client ~]# vi /etc/yum.conf
keepcache=1
[root@kf-ceph-client ~]# yum clean all
[root@kf-ceph-client ~]# yum makecache
[root@kf-ceph-client ~]# yum -y install python-setuptools
2.2.2.创建ceph存储池用户cephadmin
[root@kf-ceph-client ~]# useradd cephadmin
[root@kf-ceph-client ~]# passwd cephadmin
2.2.3.授权cephu用户sudo权限
[root@kf-ceph-client ~]# vim /etc/sudoers
在root ALL=(ALL) ALL行下面新增一行
cephadmin ALL=(ALL) NOPASSWD:ALL
2.2.4.切换到cephadmin用户登录
[root@kf-ceph-client ~]# su - cephadmin
2.2.5.安装ceph
[cephadmin@kf-ceph-client ~]$ sudo yum install ceph ceph-radosgw -y
安装完成后用ceph --version 查看版本信息是否为12.2.13
2.2.6.在admin节点上同步配置文件到client
方式1:可以上传admin节点授权信息到/etc/ceph/目录,并授权可读权限(就是前文提到的那三个文件,client安装完是没有授权文件的,需要手动上传)
方式2:使用以下命令可不用手动进行同步
进入cluser文件夹
[cephadmin@kf-ceph-admin cluster]$ ceph-dep1oy admin kf-ceph-client
修改client节点下该文件的读权限
[cephadmin@kf-ceph-client ~]$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
2.2.7.修改ceph.conf文件,解决映射镜像时出现问题
[cephadmin@kf-ceph-client ~]$ sudo vi /etc/ceph/ceph.conf
rbd_default_features = 1
2.2.8.client节点创建块设备镜像:单位是M,这里创建4个G(根据存储池大小按需分配)
[cephadmin@kf-ceph-client ~]$ sudo rbd create ceshi10 --size 40960
注意:若不是用的默认存储池名rbd,需要指定一下存储池的名字,如下
sudo rbd create --pool backup(这个是存储池名) --image kvm-backup(这个是镜像名) --image-format 2 --image-feature layering --size 20480000(大小为20T)
2.2.9.将镜像映射成块设备到client节点主机
[cephadmin@kf-ceph-client ~]$ sudo rbd map ceshi10 --name client.admin
没有报错的话应该会提示/dev/rbd0
注意:如果不是默认的rbd存储池,映射的时候需要加上存储池名字,如下
sudo rbd map kvm-backup/ceshi10 --name client.admin
因为rbd镜像的一些特性,OS kernel并不支持,所以映射报错
错误:rbd: sysfs write failed
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (2) No such file or directory
解决方法: disable掉相关特性
rbd feature disable kvm-backup/ceshi10 exclusive-lock object-map fast-diff deep-flatten
查看映射(如果要取消映射, 可以使用rbd unmap /dev/rbd0)
[root@kf-ceph-client mnt]# rbd showmapped
id pool image snap device
0 kvm-backup ceshi10 - /dev/rbd0
2.2.10.client节点格式化块设备
mkfs.xfs /dev/rbd0 #建议xfs格式
如果格式化的空间较大,这里需要的时间比较久,等待即可
2.2.11.挂载刚刚格式化完的块设备
mount /dev/rbd0 /mnt/
cd /mount
注意: 块存储是不能实现同读同写的,请不要两个客户端同时挂载进行读写
说明:client端不建议直接使用root用户来操作!
2.2.11.块存储扩容与裁减
- 在线扩容
经测试,分区后不能在线扩容,直接使用/dev/rbd0才可以
ceph集群的一个存储节点上,调整对应设备的大小。假设设备名字时ceshi10。扩容成50G
# rbd resize --size 8000 rbd_pool/volume1
然后到挂载了rbd设备机器上,调整块设备上的文件系统。注意下面针对的是xfs文件系统
# xfs_growfs -d /mnt/
如果是ext4文件系统,使用resize2fs命令。
resize2fs /dev/rbd0 #不损耗数据的格式化
- 块存储裁减
不能在线裁减.裁减后需重新格式化再挂载,所以请提前备份好数据
再裁减回40G
# rbd resize --size 5000 rbd_pool/volume1 --allow-shrink
重新格式化挂载
# umount /mnt/
# mkfs.xfs -f /dev/rbd0
# mount /dev/rbd0 /mnt/
再次查看,确认裁减成功
df -h |tail -1
/dev/rbd0 4.9G 33M 4.9G 1% /mnt
2.2.12 删除块存储
# umount /mnt/
# rbd unmap /dev/rbd0
# ceph osd pool delete rbd_pool rbd_pool --yes-i-really-really-mean-it
pool 'rbd_pool' removed
2.3 创建ceph对象存储
2.3.1 在kf-ceph-node1上创建rgw
在cluster目录下执行
[cephadmin@kf-ceph-admin cluster]$ ceph-deploy rgw create kf-ceph-node1
在kf-ceph-node1节点
[cephadmin@kf-ceph-node1 ~]$ sudo lsof -i:7480
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
radosgw 2274468 ceph 37u IPv4 2547341 0t0 TCP *:7480 (LISTEN)
[cephadmin@kf-ceph-node1 ~]$ sudo ceph -s
cluster:
id: ffc3078b-a5d7-4713-9cd4-a4b2cdde39a6
health: HEALTH_OK
services:
mon: 1 daemons, quorum kf-ceph-node1
mgr: kf-ceph-node1(active)
osd: 3 osds: 3 up, 3 in
rgw: 1 daemon active
data:
pools: 4 pools, 32 pgs
objects: 187 objects, 1.09KiB
usage: 3.03GiB used, 297GiB / 300GiB avail
pgs: 32 active+clean
修改7480端口(可选)
#将7480端口修改为80端口
# 修改 Ceph 配置文件
$ sudo vim /etc/ceph/ceph.conf
# 在 [global] 节点下增加
[client.rgw.admin]
rgw_frontends = "civetweb port=80"
# 重启 Ceph 对象网关
$ systemctl restart ceph-radosgw.target
2.3.2 在客户端测试连接对象网关
[root@kf-ceph-client /]# radosgw-admin user create --uid="rgwuser" --display-name="This is first rgw test user"
{
"user_id": "rgwuser",
"display_name": "This is first rgw test user",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "rgwuser",
"access_key": "6QWYF2LE85KZW25EA4R2",
"secret_key": "2cVmjRRED8nCfIMrnmlbFNhdNMD0YrOxOOrZsPMX"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw"
}
注意:记住 access_key 和 secret_key 值,测试访问 S3 接口时需要使用
如果用户的access_key忘记可通过以下命令查看
[root@kf-ceph-client /]# radosgw-admin user info --uid rgwuser
2.3.3 s3连接ceph对象网关
AmazonS3是一种面向Internet的对象存储服务.我们这里可以使用s3工具连接ceph的对象存储进行操作
- 1客户端安装s3cmd工具,并编写ceph连接配置文件
# yum install s3cmd
创建并编写下面的文件,key文件对应前面创建测试用户的key
vim /root/.s3cfg
[default]
access_key = 6QWYF2LE85KZW25EA4R2
secret_key = 2cVmjRRED8nCfIMrnmlbFNhdNMD0YrOxOOrZsPMX
host_base = 145.170.34.189:7480
host_bucket = 145.170.34.189:7480/%(bucket)
cloudfront_host = 145.170.34.189:7480
use_https = False
- 2命令测试
列举所有 Buckets
$ s3cmd ls
创建 bucket,且 bucket 名称是唯一的,不能重复。
s3cmd mb s3://my-bucket-name
删除空 bucket
s3cmd rb s3://my-bucket-name
列举 Bucket 中的内容
s3cmd ls s3://my-bucket-name
上传 file.txt 到某个 bucket,
s3cmd put file.txt s3://my-bucket-name/file.txt
上传并将权限设置为所有人可读
s3cmd put --acl-public file.txt s3://my-bucket-name/file.txt
批量上传文件
s3cmd put ./* s3://my-bucket-name/
下载文件
s3cmd get s3://my-bucket-name/file.txt file.txt
批量下载
s3cmd get s3://my-bucket-name/* ./
删除文件
s3cmd del s3://my-bucket-name/file.txt
来获得对应的bucket所占用的空间大小
s3cmd du -H s3://my-bucket-name
设置S3 bucket的Public权限
s3cmd setacl s3://myexamplebucket.calvium.com/ --acl-public --recursive
2.4 创建ceph文件存储
每个CephFS文件系统至少需要一个MDS(metadata server),一般是三个。CephFS 是个与 POSIX 标准兼容的文件系统.(Ceph块设备和Ceph对象存储不使用MDS)。
Ceph MDS: Ceph文件存储类型存放与管理元数据metadata的服务
2.4.1 在admin部署节点上同步配置文件,并创建mds服务(也可以做多个mds实现HA)
ceph-deploy mds create kf-ceph-node1
ceph-deploy mds create kf-ceph-node2
ceph-deploy mds create kf-ceph-node3
2.4.2 一个Ceph文件系统需要至少两个RADOS存储池,一个用于数据,一个用于元数据。
#ceph osd pool create cephfs_data 32
#ceph osd pool create cephfs_metadata 32
2.4.3 创建文件系统。
#ceph fs new cephfs cephfs_metadata cephfs_data
查看mds状态。
#ceph mds stat
cephfs-1/1/1 up {0=kf-ceph-node3=up:active}, 2 up:standby
2.4.4 客户端准备验证key文件
- 说明: ceph默认启用了cephx认证,所以客户端的挂载必须要验证
在集群节点(node1,node2,node3)上任意一台查看密钥字符串
# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQBKvGBjk3eCMBAAkSGso9W8MMKeay0Vae1qIQ==
在客户端上创建一个文件记录密钥字符串
# vim admin.key # 创建一个密钥文件,复制粘贴上面得到的字符串
AQBKvGBjk3eCMBAAkSGso9W8MMKeay0Vae1qIQ==
2.4.5 客户端挂载(挂载ceph集群中跑了mon监控的节点, mon监控为6789端口)
# mount -t ceph kf-ceph-node1:6789:/ /nfs -o name=admin,secretfile=/root/admin.key
或者直接
# mount -t ceph 145.170.34.189:6789:/ /nfs -o name=admin,secret=AQD2EWpcZasXIBAAzcdvbJxrwwgR1eDJHTz1lQ==
验证
df -h |tail -1
node1:6789:/ 3.8G 0 3.8G 0% /mnt # 大小不用在意,场景不一样,pg数,副本数都会影响
2.4.6 删除文件存储方法
- 1 在客户端上删除数据,并umount所有挂载
# rm /mnt/* -rf
# umount /mnt/
- 2.停掉所有节点的mds(只有停掉mds才能删除文件存储)
# systemctl stop ceph-mds.target
# systemctl stop ceph-mds.target
# systemctl stop ceph-mds.target
- 3 回到集群任意一个节点上(node1,node2,node3其中之一)删除
如果要客户端删除,需要在node1上ceph-deploy admin client同步配置才可以
# ceph fs rm cephfs --yes-i-really-mean-it
# ceph osd pool delete ceph_metadata --yes-i-really-really-mean-it
pool 'cephfs_metadata' removed
# ceph osd pool delete ceph_pool --yes-i-really-really-mean-it
pool 'cephfs_pool' removed
- 4 再次mds服务再次启动
# systemctl start ceph-mds.target
# systemctl start ceph-mds.target
# systemctl start ceph-mds.target