Ceph 三种存储方式
一、配置块存储
创建块设备之前需要创建存储池,存储池相关命令需要在mon节点执行--也就是规划好的node1节点 创建存储池:
[ceph@node1 ~]$ sudo ceph osd pool create rbd 128 128 pool 'rbd' created
注释: 创建pool
# 若少于5个OSD, 设置pg_num为128。
# 5~10个OSD,设置pg_num为512。
# 10~50个OSD,设置pg_num为4096。
初始化存储池:
[ceph@node1 ~]$ sudo rbd pool init rbd
准备客户端client(客户端操作):
升级client内核到最新版本 更新前,内核版本为:
[root@client ~]# uname -r
3.10.0-1160.el7.x86_64
升级方法 导入key
[root@client ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装elrepo的yum源
[root@client ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
查看可用的系统内核包
[root@client ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
安装内核
[root@client ~]# yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
查看内核默认启动顺序
[root@client ~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (6.5.7-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-c2103ce40fd641b2bb0b9118ead8f4ff) 7 (Core)
选择处于0位置的新内核为默认启动内核
[root@client ~]# grub2-set-default 0
[root@client ~]# reboot
重启后的内核版本:
[root@client ~]# uname -r
6.5.7-1.el7.elrepo.x86_64
删除旧内核
[root@client ~]# yum remove kernel -y client
安装ceph: 环境准备参考部署ceph文档开头环境准备的2-5步 安装依赖包、epel、配置ceph源
[root@client ~]# yum install -y python-setuptools epel-release
[root@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
[root@client ~]# yum install ceph ceph-radosgw -y
[root@client ~]# ceph --version
ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
修改client下该文件的读权限:
[root@client ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
修改client下的ceph配置文件:
这一步是为了解决映射镜像时出错问题
[root@client ~]# vi /etc/ceph/ceph.conf
#在global section下添加:
rbd_default_features = 1
client节点创建块设备镜像:单位是M,这里是4个G
[root@client ~]# rbd create foo --size 4096 client
节点映射镜像到主机:
[root@client ~]# rbd map foo --name client.admin /dev/rbd0 client
节点格式化块设备:
[root@client ~]# mkfs.ext4 -m 0 /dev/rbd/rbd/foo
client节点mount块设备:
[root@client ~]# mkdir /mnt/ceph-block-device
[root@client ~]# mount /dev/rbd/rbd/foo /mnt/ceph-block-device
客户端重起之后,设备需要重新作映射,不然可能会卡死,有需要做开机挂载可以在/etc/rc.local中进行映射和挂载
在/mnt/ceph-block-device写入数据,测试:
[root@client ceph-block-device]# vim /etc/rc.local
二、配置对象存储
由于客户端已经升级了内核,并安装了客户端,在做对象存储是就不在进行客户端配置了
# 在node1上创建rgw对象网关,端口为7480
[ceph@admin my-cluster]$ ceph-deploy rgw create node1
[ceph@admin my-cluster]$ ceph-deploy rgw create node2
[ceph@admin my-cluster]$ ceph-deploy rgw create node3
node1查看 :
# 在客户端测试连接对象网关。连接对象存储需要用户账号秘钥连接,所以需要再客户端创建用户秘钥 #创建账号秘钥,如下所示(radosgw-admin命令其实是yum -y install ceph-common安装的)
[root@client ceph-block-device]# radosgw-admin user create --uid="Yebati" --display-name="Yebati"
{
"user_id": "Yebati",
"display_name": "Yebati",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "Yebati",
"access_key": "F9OL8KWEEB3HM811Z3UW",
"secret_key": "zKzFupLsI5LiU4NEuUEQGHu4hadN7H9uVF7MNgDd"
}
],
"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"
}
[root@client ~]# yum install s3cmd -y
#安装s3模块,用于连接对象存储#安装好s3包后就会有s3cmd命令用于连接对象存储,为了方便,我们可以把一些连接参数写成一个.s3cfg文件,s3cmd命令默认会去读这个文件。
[root@client ~]# vim /root/.s3cfg #创建文件,并写入一下内容
[default]
access_key = "F9OL8KWEEB3HM811Z3UW"
secret_key = "zKzFupLsI5LiU4NEuUEQGHu4hadN7H9uVF7MNgDd"
host_base = 192.168.1.8:7480
host_bucket = 192.168.1.8:7480/%(bucket)
cloudfront_host = 192.168.1.8:7480
use_https = False
# s3cmd命令测试连接对象存储
[root@client ceph]# s3cmd mb s3://Yebati
#创建一个名为Yebati的桶,桶的概念可理解为目录
[root@client ~]# s3cmd put /var/log/yum.log s3://Yebati
upload: '/var/log/yum.log' -> 's3://Yebati/yum.log' [1 of 1]
6094 of 6094 100% in 1s 4.95 KB/s done
[root@client ~]# s3cmd get s3://Yebati/yum.log
# 生成带签名的url
[root@client ~]# s3cmd signurl s3://Yebati/yum.log $(date -d 'now + 1 year' +%s)
http://192.168.1.8:7480/Yebati/yum.log?AWSAccessKeyId=F9OL8KWEEB3HM811Z3UW&Expires=1729409249&Signature=ZSF%2Bkng7zQ7f%2BNjXY2LHfHtNTk8%3D
三、 配置文件系统
# 创建Ceph文件存储 # 要运行Ceph文件系统, 你必须先创建至少带一个mds的Ceph存储集群(Ceph块设备和Ceph对象存储不使用MDS)。 # Ceph MDS: Ceph文件存储类型存放与管理元数据metadata的服务。
#第1步、 在node1节点创建mds服务(最少创建一个mds,也可以做多个mds实现HA)
[cephu@admin my-cluster]$ ceph-deploy mds create node1 node2 node3
#第2步、 一个Ceph文件系统需要至少两个RADOS存储池,一个用于存放数据,一个用于存放元数据,下面我们就来创建这两个池
[root@node1 ceph]# ceph osd pool create ceph_data 16 #创建ceph_data池,用于存数据
[root@node1 ceph]# ceph osd pool create ceph_metadata 8 #创建ceph_metadata池,用于存元数据
#第3步、创建ceph文件系统,并确认客户端访问的节点
[root@node1 ceph]# ceph fs new cephfs ceph_metadata ceph_data
new fs with metadata pool 9 and data pool 8
#cephfs就是ceph文件系统名,即客户端挂载点,ceph_metadata是上一步创建的元数据池,ceph_data是上一步创建的数据此,这两个池的顺序不能乱
[root@node1 ~]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [ceph_data ]
# 客户端挂载
[root@node1 ~]# cd /etc/ceph
[root@node1 ceph]# cat ceph.client.admin.keyring
[client.admin]
key = AQC4FjFlBv+aMhAAg3H+Dq3xGxbQcA8/f2IUTg==
#在node1上查看客户端的秘钥文件内容,这个文件叫ceph.client.admin.keyring,其中admin是用户名 [client.admin] #admin是用户名key = AQC4FjFlBv+aMhAAg3H+Dq3xGxbQcA8/f2IUTg== #这个就是客户端的秘钥
[root@client ~]# mkdir /etc/ceph && cd /etc/ceph
#在cline客户端创建一个/etc/ceph目录
[root@client ceph]# echo 'AQC4FjFlBv+aMhAAg3H+Dq3xGxbQcA8/f2IUTg==' >> admin.key
#新建一个秘钥文件,并把从node1上看到的客户端秘钥复制到这个文件里来
[root@client ceph]# mkdir /cephfs_data
先创建一个目录作为挂载点
[root@client ceph]# mount.ceph node1:6789:/ /cephfs_data/ -o name=admin,secretfile=/etc/ceph/admin.key
#解读:node1:6789:/ /cephfs_data/,其中6789是mon的端口,客户端挂载连接找mon的,因为我们node1上创建了3个mon,所以这里写node2,node3都可以,斜杠表示找根,找node1的根就是找我们在node1上创建的cephfs文件系统,/cephfs_data/表示挂载到本地的ceph_data目录,-o表示指定参数选项,name=admin,secretfile=/etc/ceph/admin.key 表示使用用户名为admin,秘钥使用/etc/ceph/admin.key秘钥文件进行连接。
[root@client ceph]# df -h