对象存储网关RadosGW
部署RadosGW服务
将ceph-mgr1、ceph-mgr2服务器部署为高可用的radosGW服务
apt install radosgw #ubuntu
yum install ceph-radosgw # centos
在deploy服务将ceph-mgr1和ceph-mgr2初始化为radosGW服务
ceph-deploy rgw create ceph-mgr2
验证radosgw服务状态
查看radosgw的存储池类型
ceph osd pool ls
查看默认radosgw的存储池信息:
radosgw-admin zone get --rgw-zone=default --rgw-zonegroup=default
.rgw.root: 包含realm(领域信息),比如 zone 和 zonegroup.
default.rgw.log: 存储日志信息,用于记录各种l0g 信息。
default.rgw.control: 系统控制池,在有数据更新时,通知其它 RGW 更新缓存。
default.rqw.meta: 元数据存储池,通过不同的名称空间分别存储不同的rados 对象,这些名称空间包括用戶UID 及其bucket 映射信息的名称空间 users.uid、用戶的密钥名称空间
users.keys、用戶的email 名称空间 users.email、用戶的subuser 的名称空间 users.swift,以及bucket 的名称空间root 等。
default.rgw.buckets.index: 存放bucket 到object 的索引信息。
default.rgw.buckets.data: 存放对象的数据。
default.rgw.buckets.non-ec: 数据的额外信息存储池
default.rgw.users.uid: 存放用户信息的存储池。
default.rgw.data.root: 存放bucket 的元数据,结构体对应 RGWBucketInfo,比如存放桶名、桶1D、data_pool 等。
查看存储池类型,默认是副本池,replicated_rule
ceph osd pool get default.rgw.buckets.data crush_rule
默认的副本数 3
ceph osd pool get default.rgw.log size
默认pgp和pg 32
ceph osd pool get default.rgw.log gpg_num
ceph osd pool get default.rgw.log gp_num
radosgw http高可用
自定义http端口
在mgr2上操作
vim /etc/ceph/ceph.conf
[client.rgw.ceph-mgr2]
rgw_host = ceph-mgr2
rgw_frontends = civetweb port=9900
systemctl restart ceph-radosgw@rgw.ceph-mgr2.service
浏览器就可以直接访问了ip:9900
高可用
mgr1和mgr2都修改下
vim /etc/ceph/ceph.conf
[client.rgw.ceph-mgr2]
rgw_host = ceph-mgr2
rgw_frontends = civetweb port=9900
[client.rgw.ceph-mgr1]
rgw_host = ceph-mgr1
rgw_frontends = civetweb port=9900
systemctl restart ceph-radosgw@rgw.ceph-mgr2.service
安装haproxy
apt install haproxy -y
vim /etc/haproxy/haproxy.cfg
listen ceph-rgw
bind 172.31.6.203:80
mode tcp
server 172.31.6.104 172.31.6.104:9900 check inter 3s fall 3 rise 5
server 172.31.6.104 172.31.6.104:9900 check inter 3s fall 3 rise 5
service haproxy restart
重启后直接访问浏览器就可以了
radosgw https:在rgw节点生成签名证书并配置radosgw启用SSL
cd /etc/ceph
mkdir certs
cd certs/
openssl genrsa -out civetweb.key 2048
openssl req -new -x509 -key civetweb.key -out civetweb.crt -subj "/CN=rgw.magedu.net"
touch /root/.rnd #如果有警告执行这个步骤,重新签发下
cat civetweb.key civetweb.crt > civetweb.pem
配置ceph.conf
vim /etc/ceph/ceph.conf
[client.rgw.ceph-mgr1]
rgw_host = ceph-mgr1
rgw_frontends = "civetweb port=9900+9443s ssl_certificate=/etc/ceph/certs/civetweb.pem"
systemctl restart ceph-radosgw@rgw.ceph-mgr1.service
haproxy配置https
apt install haproxy -y
vim /etc/haproxy/haproxy.cfg
listen ceph-rgw
bind 172.31.6.203:443
mode tcp
server 172.31.6.104 172.31.6.104:9443 check inter 3s fall 3 rise 5
server 172.31.6.104 172.31.6.104:9943 check inter 3s fall 3 rise 5
service haproxy restart
日志及其他优化配置
mkdir /var/log/radosgw
chown ceph.ceph /var/log/radosgw
配置ceph.conf
vim /etc/ceph/ceph.conf
[client.rgw.ceph-mgr1]
rgw_host = ceph-mgr1
rgw_frontends = "civetweb port=9900+9443s ssl_certificate=/etc/ceph/certs/civetweb.pem error_log_file=/var/log/radosgw/civetweb.error.log access_log_file=/var/log/radosgw/civetweb.access.log request_timeout_ms=30000 num_threads=200"
systemctl restart ceph-radosgw@rgw.ceph-mgr1.service
然后访问测试,直接看下访问日志
客户端(s3cmd)测试数据读写
rgw监听在rgw.magedu.net这个域名
vim /etc/ceph/ceph.conf
[client.rgw.ceph-mgr1]
rgw_host = ceph-mgr1
rgw_frontends = civetweb port=9900
rgw_dns_name = rgw.magedu.net
systemctl restart ceph-radosgw@rgw.ceph-mgr1.service
创建rgw账户,将这两个key保存好。access_key和secret_key
radosgw-admin user create --uid="user1" --display-name="user1"
安装s3cmd 2.0.1-2版本
sudo apt-cache madison s3cmd
sudo apt install s3cmd
添加域名解析
vim /etc/hosts
172.31.6.105 rgw.magedu.net
配置s3cmd
s3cmd --configure
配置文件保存在/home/cephadmin/.s3cfg,如果配置错了可以直接vim修改
创建bucket
s3cmd mb s3//myserver
s3cmd ls
验证上传数据
s3cmd mb s3://images #创建bucket
wget https://img1.jcloudcs.com/portal/brand/2021/fl1-2.jpg #下载一个图片
s3cmd put fl1-2.jpg s3://images #上传文件
s3cmd put --recursive test/ s3://images #上传目录
s3cmd ls s3://images #验证
s3cmd get s3://images/fl1-2.jpg /opt/ #下载数据
删除文件
s3cmd ls s3://images/
s3cmd rm s3://images/fl1-2.jpg
s3cmd ls s3://images/
查看bucket权限
s3cmd info s3://video
授予匿名用户GetObject权限:,给video放一个短视频,授权之后就可以浏览器直接访问了
vim ceph-cluster/s3cmd-dir/video-single_policy
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::video/*"
]
}]
}
s3cmd setpolicy video-single_policy s3://video #授权
s3cmd info s3://video