三台机器centos7.9
| IP | 作用 |
| :------------: | :----------------: |
| 192.168.44.137 | ceph01、NTP Server |
| 192.168.44.138 | ceph02 |
| 192.168.44.139 | ceph03 |
NTP服务器设置,同步时钟
# NTP SERVER (ntp server 与阿里与ntp时间服务器进行同步)
yum install -y ntp
systemctl start ntpd
systemctl enable ntpd
timedatectl set-timezone Asia/Shanghai
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
# 这样我们的ntp server自动连接到外网,进行同步 (时间同步完成在IP前面会有一个*号)
ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
+193.182.111.143 194.58.204.20 2 u 43 64 1 245.826 -7.418 15.035
+119.28.183.184 100.122.36.196 2 u 40 64 1 46.883 -3.472 0.249
-178.215.228.24 36.224.68.195 2 u 39 64 1 231.376 23.300 14.977
*84.16.67.12 .GPS. 1 u 38 64 1 183.543 -0.667 0.299
# NTP Agent (ntp agent同步ntp server时间)
yum install -y ntp
vim /etc/ntp.conf
server 192.168.44.137 iburst
systemctl restart ntpd
systemctl enable ntpd
# 等待几分钟出现*号代表同步完成
ntpq -pn
# 各个节点上定时同步 节点添加定时同步任务
crontab -e
*/5 * * * * /usr/sbin/ntpdate 192.168.44.137
# ntp时间服务器设置完成后在所有节点修改时区以及写入硬件
timedatectl set-timezone Asia/Shanghai
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
# 查看时间是否一致
date
# 添加host (所有节点)
cat >>/etc/hosts <<EOF
192.168.44.137 ceph-01
192.168.44.138 ceph-02
192.168.44.139 ceph-03
EOF
# ceph01 设置免密 123456为密码
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
for i in ceph-01 ceph-02 ceph-03 ;do
expect -c "
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$i
expect {
"*yes/no*" {send "yesr"; exp_continue}
"*password*" {send "123456r"; exp_continue}
"*Password*" {send "123456r";}
} "
d
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#配置centos、epeo、ceph源
wget -O /etc/yum.repos.d/CentOS-Base-epel.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
wget -O /etc/yum.repos.d/ceph.repo http://down.i4t.com/ceph/ceph.repo
yum clean all
yum makecache
# ceph-01部署节点安装依赖包以及ceph部署工具ceph-deploy
yum install -y python-setuptools
yum install -y ceph-deploy
# 执行ceph-deploy可以看到ceph的版本
ceph-deploy
# ceph创建一个配置目录,后面操作需要在这个目录下进行
mkdir -p /root/ceph-deploy
cd /root/ceph-deploy
# 创建monitor ceph-01代表部署monitor节点
ceph-deploy new ceph-01 --public-network 192.168.44.0/24
#参数设置
# --cluster-network 集群对外的网络
# --public-network 集群内通信的网络
#--public-network建议添加,否则后面添加monitor节点会提示错误
# 执行完毕后我们可以看到在/root/ceph-deploy目录会有为我们生成的一些文件
ls /root/ceph-deploy
# ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
# ceph配置文件 ceph日志文件 keyring主要做身份验证
# 我们可以根据自身需要修改ceph.conf文件,比如上面创建集群中添加的网络,在这里也可以添加
# 添加ceph时间配置
# 添加允许ceph时间偏移
echo "mon clock drift allowed = 2" >>/root/ceph-deploy/ceph.conf
echo "mon clock drift warn backoff = 30" >>/root/ceph-deploy/ceph.conf
# 在 所有节点 安装ceph相关软件包
yum install -y ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds
# 当然如果你不在乎网络问题,也可以使用官方推荐的安装方式,下面的方式会重新给我们配置yum源,这里不太推荐
# ceph-deploy install ceph-01 ceph-02 ceph-03
# 接下来我们需要初始化monitor
cd /root/ceph-deploy
ceph-deploy mon create-initial
# 需要进入到我们之前创建的ceph目录中, 接下来我们在/root/ceph-deploy下面可以看到刚刚生成的一些文件
[root@ceph01 ceph-deploy]# ll -a
总用量 44
drwxr-xr-x 2 root root 244 9月 16 00:38 .
dr-xr-x---. 6 root root 268 9月 16 00:23 ..
-rw------- 1 root root 113 9月 16 00:38 ceph.bootstrap-mds.keyring
-rw------- 1 root root 113 9月 16 00:38 ceph.bootstrap-mgr.keyring
-rw------- 1 root root 113 9月 16 00:38 ceph.bootstrap-osd.keyring
-rw------- 1 root root 113 9月 16 00:38 ceph.bootstrap-rgw.keyring
-rw------- 1 root root 151 9月 16 00:38 ceph.client.admin.keyring
-rw-r--r-- 1 root root 296 9月 16 00:33 ceph.conf
-rw-r--r-- 1 root root 15992 9月 16 00:38 ceph-deploy-ceph.log
-rw------- 1 root root 73 9月 16 00:30 ceph.mon.keyring
# 将我们刚刚生成的文件拷贝到所有的节点上 (拷贝完成后就可以使用ceph -s参数)
ceph-deploy admin ceph-01 ceph-02 ceph-03
ceph -s
# 把配置文件和admin密钥分发到各个节点 禁用不安全模式
ceph config set mon auth_allow_insecure_global_id_reclaim false
# 接下来我们执行ceph -s就可以看到已经初始化完毕
ceph -s
# 我们可以看到cluster.health后面的状态为OK
# 创建 manager daemon (主要用于监控)
# 这里我们只是将ceph-01作为manager daemon节点
ceph-deploy mgr create ceph-01
# 接下来我们在执行ceph -s就会看到有一个刚添加的好的mgr节点
ceph -s
# 查看机器上的块设备 两块盘
lsblk
# 创建osd 添加三台osd集群 节点1执行
cd /root/ceph-deploy/
ceph-deploy osd create ceph-01 --data /dev/sdb
ceph-deploy osd create ceph-02 --data /dev/sdb
ceph-deploy osd create ceph-03 --data /dev/sdb
# 查看ceph osd就可以看到有3台osd节点
ceph -s
# 注意: 只有health状态为OK,证明集群同步正常
# 我们就把ceph完毕3个osd。并且数据总大小为30G
[root@ceph-01 ceph-deploy]# ceph -s
cluster:
id: 82612119-5dbe-4d6b-b481-1ce8827b9ea1
health: HEALTH_OK
services:
mon: 1 daemons, quorum ceph-01 (age 12m)
mgr: ceph-01(active, since 12m)
osd: 3 osds: 3 up (since 27s), 3 in (since 27s)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 27 GiB / 30 GiB avail
pgs:
# 同样查看ceph osd的状态
[root@ceph-01 ceph-deploy]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.02939 root default
-3 0.00980 host hadoop101
0 hdd 0.00980 osd.0 up 1.00000 1.00000
-5 0.00980 host hadoop102
1 hdd 0.00980 osd.1 up 1.00000 1.00000
-7 0.00980 host hadoop103
2 hdd 0.00980 osd.2 up 1.00000 1.00000
# 如果期间我们有需要修改ceph.conf的操作,只需要在ceph-01上修改,使用下面的命令同步到其他节点上
ceph-deploy --overwrite-conf config push ceph-01 ceph-02 ceph-03
# 当添加上3个monitor节点后,monitor会自动进行选举,自动进行高可用
cd /root/ceph-deploy
ceph-deploy mon add ceph-02 --address 192.168.44.138
ceph-deploy mon add ceph-03 --address 192.168.44.139
# monitor节点已经添加成功
ceph -s
[root@ceph-01 ceph-deploy]# ceph -s
cluster:
id: 82612119-5dbe-4d6b-b481-1ce8827b9ea1
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-01,ceph-02,ceph-03 (age 111s)
mgr: ceph-01(active, since 36m)
osd: 3 osds: 3 up (since 25m), 3 in (since 25m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 27 GiB / 30 GiB avail
pgs:
# ceph自带的命令,查看monitor选举情况,以及集群的健康状态
ceph quorum_status --format json-pretty
# 查看mon状态
ceph mon stat
# 查看mon详细的状态
ceph mon dump
# 扩展mgr create后面为ceph节点的名称
cd /root/ceph-deploy
ceph-deploy mgr create ceph-02 ceph-03
# 三个monitor 三个Mgr 三个osd
[root@ceph-01 ceph-deploy]# ceph -s
cluster:
id: 82612119-5dbe-4d6b-b481-1ce8827b9ea1
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-01,ceph-02,ceph-03 (age 12m)
mgr: ceph01(active, since 47m), standbys: ceph-02, ceph-03
osd: 3 osds: 3 up (since 36m), 3 in (since 36m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 27 GiB / 30 GiB avail
pgs:
# 创建资源池Pool 64个pg 和64pgp pg类似目录
ceph osd pool create abcdocker 64 64
# 查看资源池
ceph osd lspools
# 可以通过下面的命令获取到pool详细状态 ceph osd pool get abcdocker 参数
ceph osd pool get abcdocker pg_num
ceph osd pool get abcdocker pgp_num
ceph osd pool get abcdocker size # 三个副本,写一份数据到pool。会有三个副本保证高可用
# 调整pool参数
ceph osd pool set abcdocker size 2
属性 BIT码
layering 1
striping 2
exclusive-lock 4
object-map 8
fast-diff 16
deep-flatten 32
cd /root/ceph-deploy
echo "rbd_default_features = 1" >>ceph.conf
ceph-deploy --overwrite-conf config push ceph-01 ceph-02 ceph-03
# 当然也在rbd创建后手动删除,这种方式设置是临时性,一旦image删除或者创建新的image 时,还会恢复默认值。
rbd feature disable abcdocker/abcdocker-rbd.img deep-flatten
rbd feature disable abcdocker/abcdocker-rbd.img fast-diff
rbd feature disable abcdocker/abcdocker-rbd.img object-map
rbd feature disable abcdocker/abcdocker-rbd.img exclusive-lock
# 需要按照从后往前的顺序,一条条删除
# 查看说明
rbd help create
# -p 指定pool的名称
# 创建rbd需要使用key,可以使用-k参数进行指定,我这里已经默认使用了admin的key,所以不需要指定
rbd create -p abcdocker --image abcdocker-rbd.img --size 1G
# -p pool名称
# --image 镜像名称(相当于块设备在ceph名称) --size 镜像大小 (块大小)
# 创建rbd设备还可以通过下面的方式简写 省略-p和--image参数
rbd create abcdocker/abcdocker-rbd-1.img --size 1G
# 查看rbd
rbd -p abcdocker ls
# 删除rbd 同样,删除rbd也可以简写,或者加入-p和--image
rbd rm abcdocker/abcdocker-rbd-1.img
rbd -p abcdocker ls
# 通过info查看rbd信息
rbd info -p abcdocker --image abcdocker-rbd.img
rbd info abcdocker/abcdocker-rbd.img
# 生成了块设备
rbd map abcdocker/abcdocker-rbd.img
# 查看块设备
rbd device list
# 同样通过fdisk命令看到,现在块设备就相当于我们在服务器上插入了一块硬盘,挂载即可使用
fdisk -l
# 格式化操作
mkfs.ext4 /dev/rbd0
# 挂载使用了
mkdir /mnt/abcdocker
mount /dev/rbd0 /mnt/abcdocker/
cd /mnt/abcdocker/
touch abcdocker
echo "123" >abcdocker
cat abcdocker
# resize参数进行扩容
rbd resize abcdocker/abcdocker-rbd.img --size 2G
# size大小已经修改为2G,对应的object也已经成了7680
rbd info abcdocker/abcdocker-rbd.img
# 扩容之后我们的设备是已经扩容上去,但是我们的文件系统并没有扩容上,接下来我们需要使用resize2fs对文件系统进行扩容
# 关于resize2fs解释:
# 调整ext2ext3ext4文件系统的大小,它可以放大或者缩小没有挂载的文件系统的大小。如果文件系统已经挂载,它可以扩大文件系统的大小,前提是内核支持在线调整大小
# 此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
# 只需要执行resize2fs加上文件系统的地址即可,扩容完毕我们就可以看到/dev/rbd0大小为28G
resize2fs /dev/rbd0
# 查看分区后磁盘
df -h
ls /mnt/abcdocker/
cat /mnt/abcdocker/abcdocker
# 2GiB 512个对象
rbd image 'abcdocker-rbd.img':
size 2 GiB in 512 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 5f3d1d05f9ff
block_name_prefix: rbd_data.5f3d1d05f9ff
format: 2
features: layering
op_features:
flags:
create_timestamp: Sat Sep 17 15:39:00 2022
access_timestamp: Sat Sep 17 15:39:00 2022
modify_timestamp: Sat Sep 17 15:39:00 2022
# 查看所有object
rados -p abcdocker ls | grep rbd_data.5f3d1d05f9ff
# 查看具体的object
rados -p abcdocker stat rbd_data.5f3d1d05f9ff.0000000000000085
# 看到上面的过程 落在pg 1.23ea9f20 目录上 最终落到[2,1,0]osd上
ceph osd map abcdocker rbd_data.5f3d1d05f9ff.0000000000000085
osdmap e23 pool 'abcdocker' (1) object 'rbd_data.5f3d1d05f9ff.0000000000000085' -> pg 1.23ea9f20 (1.20) -> up ([2,1,0], p2) acting ([2,1,0], p2)
# 查看每个对象的落盘的过程
for i in `rados -p ceph-demo ls |grep rbd_data.5f3d1d05f9ff`;do ceph osd map ceph-demo ${i}; done
# 一共分配了21个对象 84M
rados -p abcdocker ls | grep rbd_data.5f3d1d05f9ff | wc -l
# 随着容量的使用这个对象空间会不断增长
watch -n 1 'rados -p abcdocker ls| grep rbd_data.5f3d1d05f9ff | wc -l' # 动态监视一下
dd if=/dev/zero of=test.img bs=1M count=1024 # 写一个G数据进去
ceph health detail
HEALTH_WARN application not enabled on 1 pool(s)
POOL_APP_NOT_ENABLED application not enabled on 1 pool(s)
application not enabled on pool 'abcdocker'
use 'ceph osd pool application enable ' , where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications.
# 资源池没有启用起来 把资源池分类 表示出是那种类型的 方便管理
ceph osd pool application enable abcdocker rbd
# 如果我们在创建pool进行初始化后,就不会提示这个报错rbd pool init
# 当我们初始化后,rbd会将我们的pool修改为rbd格式。 健康状态自然就不会报错
# 设置完毕后,我们通过下面的命令可以看到pool目前的类型属于rbd类型
ceph osd pool application get abcdocker
{
"rbd": {}
}
ceph health detail
HEALTH_WARN 1 daemons have recently crashed
RECENT_CRASH 1 daemons have recently crashed
mon.ceph-01 crashed on host ceph-01 at 2020-09-11 12:01:02.351322Z
# One or more Ceph daemons has crashed recently, and the crash has not yet been archived (acknowledged) by the administrator. This may indicate a software bug, a hardware problem (e.g., a failing disk), or some other problem.
# 一个或多个Ceph守护进程最近崩溃,管理员尚未存档(确认)崩溃。这可能表示软件错误、硬件问题(例如,磁盘故障)或其他问题。
# 这个报错并不影响我们,我们可以通过下面的命令看到crashed进程 (只要我们其他组件都是正常的,那么这一条就多半是误报。生产环境中处理这个故障还是要根据实际情况进行处理,不可以盲目的删除告警)
ceph crash ls
ceph crash ls-new
# 同时还可以使用查看进程详细信息
ceph crash info [ID]
# 处理这个警告
# 第一种方法 (适合处理单个告警)
ceph crash archive <ID>
# 第二种方法 (将所有的crashed打包归档)
ceph crash archive-all
ceph crash ls-new
# 再次查看状态就已经恢复
ceph -s
# 如果没有安装可以通过yum install ceph-radosgw安装
rpm -qa|grep ceph-radosgw
yum whatprovides "*bin/ceph-radosgw"
# 部署对象存储网关 这里我使用ceph-01当做存储网关来使用
cd /root/ceph-deploy
ceph-deploy rgw create ceph-01
# 创建完毕后我们可以查看一下,这里rgw只有一个服务器,那就是ceph-01
ceph -s|grep rgw
rgw: 1 daemon active (ceph-01)
# 并且radosgw监听7480端口
netstat -lntup|grep 7480
curl http://ceph-01:7480
# 接下来我们进行修改一下端口,默认是7480;这里我们将端口修改为80端口
vim /root/ceph-deploy/ceph.conf
[client.rgw.ceph-01]
rgw_frontends = "civetweb port=80"
# client.rgw.[主机名] 这里需要注意修改的主机名
# 还需要注意修改的目录 (这里修改的目录是/root/ceph.conf)
# 修改完毕后,我们将配置分发下去;要让集群的主机都生效
ceph-deploy --overwrite-conf config push ceph-01 ceph-02 ceph-03
# 这里其实只需要复制到rgw网关节点就行,但是为了配置统一,我们将配置文件分发到集群的各个节点
# push到各个机器后并没有生效,push相当于scp。文件没有生效,所以还需要重启rgw
systemctl restart ceph-radosgw.target
# 检查配置 这里我们可以看到80端口对应的服务是radosgw
netstat -lntup|grep 80
# 如果你想让http支持https也是在ceph配置文件中添加参数,具体参考官网https://docs.ceph.com/en/quincy/man/8/radosgw/
[client.rgw.ceph-01]
rgw_frontends = "civetweb port=443"
ssl_certificate=/etc/ceph/keyandcert.pem
cd /root/ceph-deploy/
# --uid 指定一个uid名称 --display-name 指定一个全名
radosgw-admin user create --uid ceph-s3-user --display-name "Ceph S3 User Demo abcdocker"
# 账号: QU20SKAX1N9XYPSIJKK2
# 密码: uiYapPp5QKaQX1lcuXUjq8BLsxKgVCTaxF3H6Q7Y
# 最大只能创建1000个bucket
{
"user_id": "ceph-s3-user",
"display_name": "Ceph S3 User Demo abcdocker",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "ceph-s3-user",
"access_key": "QU20SKAX1N9XYPSIJKK2",
"secret_key": "uiYapPp5QKaQX1lcuXUjq8BLsxKgVCTaxF3H6Q7Y"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"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",
"mfa_ids": []
}
# 安装python-bot包
yum install python-boto
# 编写Python sdk脚本
import boto
import boto.s3.connection
access_key = "QU20SKAX1N9XYPSIJKK2"
secret_key = "uiYapPp5QKaQX1lcuXUjq8BLsxKgVCTaxF3H6Q7Y"
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = '192.168.44.137', port = 80,
is_secure=False, calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('ceph-s3-bucket')
for bucket in conn.get_all_buckets():
print "{name}".format(
name = bucket.name,
created = bucket.creation_date,
)
#执行脚本
python s3.py
ceph-s3-bucket
# 执行完Python脚本,我们可以看到在pool创建了一个default.rgw.backets.index的索引
ceph osd lspools
# 首先我们yum 安装s3cmd
yum install -y s3cmd
# 针对s3cmd我们需要修改一些配置参数
s3cmd --configure
Access Key: QU20SKAX1N9XYPSIJKK2
Secret Key: uiYapPp5QKaQX1lcuXUjq8BLsxKgVCTaxF3H6Q7Y
Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: 192.168.44.137:80 # s3地址
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: 192.168.44.137:80/%(bucket)s # s3访问格式
Use HTTPS protocol [Yes]: no
Test access with supplied credentials? [Y/n] y # 测试验证是否通过
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)
Save settings? [y/N] y # 保存设置
Configuration saved to '/root/.s3cfg'
# 需要将signature_v2 改成true
sed -i 's/signature_v2 = False/signature_v2 = True/g' /root/.s3cfg
# 查看bucket
s3cmd ls
# 创建bucket
s3cmd mb s3://s3cmd-abcdocker-demo
# 查看s3cmd-abcdocker-demo内容
s3cmd ls s3://ceph-s3-bucket
#目前是空文件
#上传/etc目录到s3中的/etc目录 --recursive 递归上传
s3cmd put /etc/ s3://ceph-s3-bucket/etc/ --recursive
# 如果put提示ERROR: S3 error: 416 (InvalidRange)
# 需要将ceph.conf配置文件进行修改,添加mon_max_pg_per_osd = 1000
# 重启ceph-mon
ceph-deploy --overwrite-conf config push ceph-01 ceph-02 ceph-03
systemctl restart ceph-mon@ceph-01
systemctl restart ceph-mon@ceph-01
systemctl restart ceph-mon@ceph-01
# 查看
s3cmd ls s3://ceph-s3-bucket
s3cmd ls s3://ceph-s3-bucket/etc/
# s3cmd 下载 s3cmd下载的命令和上传的一样,只需要把put改成get即可
s3cmd get s3://ceph-s3-bucket/etc/profile proxy-s3
head proxy-s3
# s3cmd 删除
s3cmd del s3://ceph-s3-bucket/etc/profile
s3cmd ls s3://ceph-s3-bucket/etc/profile
# 删除整个目录,需要添加--recursive递归
s3cmd del s3://ceph-s3-bucket/etc/ --recursive
s3cmd ls s3://ceph-s3-bucket
# 最终我们数据会在pools里面生成
ceph osd lspools
1 abcdocker
2 .rgw.root
3 default.rgw.control
4 default.rgw.meta
5 default.rgw.log
6 default.rgw.buckets.index
7 default.rgw.buckets.data
# 发现上传的文件下面pool index为索引,data为数据
rados -p default.rgw.buckets.data ls
rados -p default.rgw.buckets.index ls
# 创建swift风格的用户https://docs.ceph.com/en/quincy/radosgw/swift/auth/
radosgw-admin user list
# 子账号qnhyn:类型swift uid是上面命令的输出
radosgw-admin user create --subuser="ceph-swift-user:swift" --uid="ceph-swift-user" --display-name="swift user" --key-type=swift --access=full
{
"user_id": "ceph-swift-user",
"display_name": "swift user",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [
{
"id": "ceph-swift-user:swift",
"permissions": "full-control"
}
],
"keys": [],
"swift_keys": [
{
"user": "ceph-swift-user:swift",
"secret_key": "w2map7avm3gqwRnhCGdqQZDdacoKRW9VnmKMe4WF"
}
],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"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",
"mfa_ids": []
}
# 安装swift客户端
yum install python36 -y
pip3 install -i https://pypi.douban.com/simple python-swiftclient
swift -v
# 登陆查看
swift -A http://192.168.44.137:80/auth -U ceph-swift-user:swift -K "w2map7avm3gqwRnhCGdqQZDdacoKRW9VnmKMe4WF" list
# 定义环境变量
export ST_AUTH=http://192.168.44.137:80/auth
export ST_USER=ceph-swift-user:swift
export ST_KEY=w2map7avm3gqwRnhCGdqQZDdacoKRW9VnmKMe4WF
# 创建swift-demo bucket(swift说明文档中叫container)
swift list
swift post swift-demo
swift list
# 上传文件
swift upload swift-demo /etc/passwd
# 下载文件
swift download swift-demo etc/passwd
从NAS演化过来的网络存储,
为什么需要使用CephFS。由于RBD不可以多个主机共享同一块磁盘,出现很多客户端需要写入数据的问题,这时就需要CephFS文件系统
MDS存储文件的元数据信息,一般由集群组成。
客户端直接网数据池写数据。
# 高可用安装mds
ceph-deploy mds create ceph-01 ceph-02 ceph-03
# 可以看到,已经有mds了,数量为3个,状态为启动等待的状态
ceph -s
# 因为没有文件系统,没法正常选举。所以3个节点状态是启动,但是后面为等待的状态
ceph -s|grep mds
mds: 3 up:standby
# 创建存储池,数据data,元数据metadata
ceph osd pool create cephfs_data 64 64 #创建名称为cephfs_data 的pool, pg数量为64
# 通常,元数据池最多有几GB的数据,建议使用比较小的PG数,64或者128常用于大型集群
ceph osd pool create cephfs_metadata 64 64
ceph osd pool ls
#cephfs-abcdocker为文件系统名称
#cephfs_metadata 为元数据的pool
#cephfs_data 为数据pool
ceph fs new cephfs-abcdocker cephfs_metadata cephfs_data
#创建完毕后可以通过下面的命令进行查看
ceph fs ls
# 查看mds状态,已经有一个状态为active,另外2个为standb状态
name: cephfs-abcdocker, metadata pool: cephfs_metadata, data pools: [cephfs_data]
# 再次查看ceph, 发现mds 已经有激活的节点了
ceph -s
# 创建挂载点
mkdir /abcdocker
# 执行挂载命令
# ceph-01为mon节点ip,/为挂载/目录 /abcdocker 挂载点地址,name=admin,使用admin用户的权限
mount -t ceph ceph-01:6789:/ /abcdocker -o name=admin
# 这里分配的空间是整个ceph的空间大小
df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 4.2G 46G 9% /
/dev/sda1 2.0G 151M 1.9G 8% /boot
tmpfs 1.9G 24K 1.9G 1% /var/lib/ceph/osd/ceph-0
tmpfs 378M 0 378M 0% /run/user/0
192.168.44.137:6789:/ 8.5G 0 8.5G 0% /abcdocker
# 我们可以看到,挂载完linux内核会自动加载ceph模块
vi abc.txt
# 在内核中挂载性能会比较高一点,但是有一些场景内核可能不太支持,所以可以使用用户FUSE挂载
lsmod |grep ceph
ceph 363016 1
libceph 306750 1 ceph
dns_resolver 13140 1 libceph
libcrc32c 12644 2 xfs,libceph
yum install ceph-fuse -y
# 接下来创建本地的挂载点
mkdir /mnt/abcdocker
# 使用ceph-fuse进行挂载
# client.admin 默认有一个client.admin的用户
# 192.168.44.137:6789 mon地址 (也可以写多个,逗号分隔)
# 如果我们不指定mon,默认找的是/etc/ceph/ceph.conf里面的配置文件
ceph-fuse -n client.admin -m 192.168.44.137:6789 /mnt/abcdocker/
# 挂在完成后我们就可以使用df -h看一下挂载点的状态
df -h
# 可以看到上面的abc.txt文件
cat /mnt/abcdocker/abc.txt