(2)Ceph 部署
Ceph部署之前
1、每个节点都要添加 3个20G的硬盘
2 、每个节点都要做ceph 的yum添加
3、每台节点都需要修改主机名
4、每台安装ntp服务 时钟服务,并同步时钟
5、每台配置ssh 免密登陆认证
分别修改主机名
#hostnamectl set-hostname ceph128
#hostnamectl set-hostname ceph129
#hostnamectl set-hostname ceph130
配置DNS或者配置hosts
182.16.0.128 ceph128
182.16.0.129 ceph129
182.16.0.130 ceph132
配置NTP服务
yum -y install ntpdate ntp
ntpdate cn.ntp.org.cn
systemctl restart ntpd ntpdate && systemctl enable ntpd ntpdate
配置 rpm
https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/ceph.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
关闭 selinux
Vi /etc/selinux/config= disabled
setenforce 0
Useradd ceph
Passwd ceph
echo “ceph ALL = (root) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/ceph
chmod 0440 /etc/sudoers.d/ceph
su - ceph
export username=ceph
ssh-keygen
ssh-copy-id ceph@ceph129
[root@ceph128 ceph]# cat ceph.client.admin.keyring
[client.admin]
key = AQBYtVJd4DYmIRAAm0Kxzqiy+c+R5+8yjJSC5Q==
[root@ceph128 ceph]#
#开始安装节点ceph-deploy epel-release python-pip
安装 ceph-deploy
#sudo yum install -y ceph-deploy epel-release python-pip
部署节点
ceph-deploy new ceph128 ceph129 ceph132
ls
cat ceph.conf
[global]
……….
public network = 192.168.20.0/24
cluster network = 192.168.20.0/24
yum install -y epel-release ceph ceph-radosgw
[ceph@ceph128 my-cluster]$ ceph-deploy mon create-initial
[ceph@ceph128 my-cluster]$ ceph-deploy admin ceph128 ceph129 ceph132
软件安装完毕 开始配置磁盘组
如果web iu 部署好出现 磁盘 down 问题 需要手动 激活
命令如下
ceph-deploy osd activate ceph128:/dev/sdb ceph128:/dev/sdc ceph128:/dev/sdd
[ceph@ceph128 my-cluster]$ ceph-deploy mgr create ceph128 ceph129 ceph132
ceph mgr module enable dashboard
这时报错,查看有文件,只是权限不对
修改权限
[ceph@ceph128 my-cluster]$ sudo chown -R ceph /etc/ceph
服务开启并且监听
访问是否可以成功
http://182.16.0.128:7000/
任何普通的Linux主机(RHEL或基于debian的)都可以充当Ceph客户机。客户端通过网络与Ceph存储集群交互以存储或检索用户数据。Ceph RBD支持已经添加到Linux主线内核中,从2.6.34和以后的版本开始。
182.16.0.103为客户端做如下操作
1修改主机名
[root@ceph103 ~]#
hostnamectl
set-hostname ceph103 cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
182.16.0.128 ceph128
182.16.0.129 ceph129
182.16.0.132 ceph132
182.16.0.103 ceph103
[root@ceph103 ~]#
2修改ceph源文件
yum install wget
wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/ceph.repo
3创建 目录
mkdir -p /etc/ceph
3 安装ceph‘
yum install epel-release
yum -y install ceph
cat /etc/ceph/ceph.client.rbd.keyring
ceph auth get-or-create client.rbd mon ‘allow r’ osd ‘allow class-read object_prefix rbd_children, allow rwx pool=rbd’ |tee ./ceph.client.rbd.keyring
注:client.rbd为客户端名 mon之后的全为授权配置
#客户端配置解析
创建文件夹
[root@ceph103 ~]# mkdir -p /etc/ceph
拷贝配置文件及密钥到客户机
[ceph@ceph128 my-cluster]$ scp ceph.client.rbd.keyring [email protected]:/etc/ceph
[ceph@ceph128 my-cluster]$ scp ceph.conf [email protected]:/etc/ceph
uname -r
modprobe rbd
echo $?
wget -O /etc/yum.repos.d/ceph.repo
https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/ceph.repo
查看密钥文件
cat /etc/ceph/ceph.client.rbd.keyring
ceph -s --name client.rbd
3.2 客户端创建块设备及映射
在服务端182.16.0.128执行如下命令
( 1) 创建块设备
默认创建块设备,会直接创建在rbd 池中,但使用 deploy 安装后,该rbd池并没有创建。
ceph osd lspools # 查看集群存储池
ceph osd pool create rbd 50 # 50 为 place group 数量,由于我们后续测试,也需要更多的pg,所以这里设置为50
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
• 少于 5 个 OSD 时可把 pg_num 设置为 128
• OSD 数量在 5 到 10 个时,可把pg_num 设置为 512
• OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
• OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算pg_num 取值
创建一个容量为5105M的rbd块设备
[root@ceph103 ~]# rbd create rbd1 --size 5105 --name client.rbd
182.16.0.103客户端查看查看rbd1块设备
[root@ceph103 ~]# rbd ls --name client.rbd
[root@ceph103 ~]# rbd ls -p rbd --name client.rbd
[root@ceph103 ~]# rbd list --name client.rbd
查看rbd1块设备信息
[root@ceph103 ~]# rbd --image rbd1 info --name client.rbd
[root@ceph103 ~]# rbd map --image rbd1 --name client.rbd
layering: 分层支持
• exclusive-lock: 排它锁定支持对
• object-map: 对象映射支持(需要排它锁定(exclusive-lock))
• deep-flatten: 快照平支持(snapshot flatten support)
• fast-diff: 在client-node1上使用krbd(内核rbd)客户机进行快速diff计算(需要对象映射),我们将无法在CentOS内核3.10上映射块设备映像,因为该内核不支持对象映射(object-map)、深平(deep-flatten)和快速diff(fast-diff)(在内核4.9中引入了支持)。为了解决这个问题,我们将禁用不支持的特性,有几个选项可以做到这一点:
1)动态禁用
rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
2) 创建RBD镜像时,只启用 分层特性。
rbd create rbd2 --size 10240 --image-feature layering --name client.rbd
3)ceph 配置文件中禁用
rbd_default_features = 1
[root@ceph103 ~]# rbd feature disable rbd1 exclusive-lock object-map fast-diff deep-flatten --name client.rbd
对rbd1进行映射
[root@ceph103 ~]# rbd map --image rbd1 --name client.rbd
查看本机已经映射的rbd镜像
[root@ceph103 ~]# rbd showmapped --name client.rbd
查看磁盘rbd0大小
格式化rbd0
创建挂在目录并进行挂载
[root@ceph103 ~]# mkdir /mnt/ceph-disk1
[root@ceph103 ~]# mount /dev/rbd0 /mnt/ceph-disk1/
[root@ceph103 ceph-disk1]# dd if=/dev/zero of=/mnt/ceph-disk1/file1 count=100 bs=1M
[root@ceph103 ~]# wget -O /usr/local/bin/rbd-mount
https://raw.githubusercontent.com/aishangwei/ceph-demo/master/client/rbd-mount
[root@ceph103 ~]# chmod +x /usr/local/bin/rbd-mount
[root@ceph103 ~]# wget -O /etc/systemd/system/rbd-mount.service
https://raw.githubusercontent.com/aishangwei/ceph-demo/master/client/rbd-mount.service
[root@ceph103 ~]# systemctl daemon-reload
[root@ceph103 ~]# systemctl enable rbd-mount.service
卸载手动挂载的目录,进行服务自动挂载测试
[root@ceph103 ~]# umount /mnt/ceph-disk1
[root@ceph103 ~]# systemctl start rbd.mount.srevice
Ceph:RBD在线扩容容量
Ceph管理端的操作
查询pool总容量及已经分配容量
[root@ceph128 ~]# ceph df
查看已经存在的pool
[root@ceph128 ~]# ceph osd lspools
查看已经有的rbd
[root@ceph128 ~]# rbd ls -p rbd
开始对rbd1进行动态扩容
[root@ceph128 ~]# rbd resize rbd/rbd1 --size 7168
Ceph客户端的操作
[root@ceph103 ~]# rbd showmapped
[root@ceph103 ~]# df -h
[root@ceph103 dev]# xfs_growfs -d /mnt/ceph-disk1
libcephfs库在支持其多个客户机实现方面发挥着重要作用。它具有本机Linux内核驱动程序支持,因此客户机可以使用本机文件系统安装,例如,使用mount命令。它与SAMBA紧密集成,支持CIFS和SMB。Ceph FS使用cephfuse模块扩展到用户空间(FUSE)中的文件系统。它还允许使用libcephfs库与RADOS集群进行直接的应用程序交互。作为Hadoop HDFS的替代品,Ceph FS越来越受欢迎 。
只有Ceph FS才需要Ceph MDS;其他存储方法的块和基于对象的存储不需要MDS服务。Ceph MDS作为一个守护进程运行,它允许客户机挂载任意大小的POSIX文件系统。MDS不直接向客户端提供任何数据;数据服务仅由OSD完成。
[ceph@ceph128 my-cluster]$ ceph-deploy mds create ceph129
这里有两个一个服务名:
sudo systemctl start ceph-mds@ceph129
sudo systemctl enable ceph.target
查看现有的PG:
[root@ceph128 ~]# ceph -s
计算可以还可以创建PG并创建
MDS需要使用两个Pool,一个Pool用来存储数据,一个Pool用来存储元数据
[ceph@ceph128 my-cluster]$ ceph osd pool create cephfs_data 64
[ceph@ceph128 my-cluster]$ ceph osd pool create cephfs_metadata 32
我们创建一个FS
[root@ceph128 ~]# ceph fs new cephfs cephfs_metadata cephfs_data
查看创建的Ceph FS
[root@ceph129 ~]# ceph fs ls
查看mds状态
[root@ceph128 ~]# ceph mds stat
查看集群中所创建的池
[root@ceph128 ~]# ceph osd pool ls
查看FS
[root@ceph128 ~]# ceph fs ls
新建一个用并赋予不同的权限
[ceph@ceph128 my-cluster]$ ceph auth get-or-create client.cephfs mon ‘allow r’ mds ‘allow rw path=/’ osd ‘allow rw pool=cephfs_data’ -o ceph.client.cephfs.keyring
把生成的公钥拷贝到客户机对应目录下
[ceph@ceph128 my-cluster]$ scp
ceph.client.cephfs.keyring [email protected]:/etc/ceph
5.2 通过内核驱动和FUSE客户端挂载Ceph FS
在Linux内核2.6.34和以后的版本中添加了对Ceph的本机支持。
[root@ceph103 ~]# mkdir /mnt/cephfs
ceph auth get-key client.cephfs // 在 ceph fs服务器上执行,获取key
一种是直接使用公钥明文挂载
[root@ceph103 ~]# mount -t ceph ceph129:6789:/ /mnt/cephfs/
-o name=cephfs,secret=AQA0/Vtdy4WcIBAA7vRd/mqsMUSYMsq8KOjf/w==
另外一种是使用公钥文件进行挂载
[root@ceph103 ceph]# cp ceph.client.cephfs.keyring cephfskey //复制一份公钥文件
[root@ceph103 ceph]# vi cephfskey //修改公钥文件,删除多余行
如下图所示
[root@ceph103 ceph]# mount -t ceph ceph129:6789:/ /mnt/cephfs
-o name=cephfs,secretfile=/etc/ceph/cephfskey
加入开机自启文件
[root@ceph103 ceph]# echo “ceph129:6789:/ /mnt/cephfs ceph
name=cephfs,secretfile=/etc/ecph/cephfskey,_netdev,noatime 0 0” >> /etc/fstab
Ceph文件系统由LINUX内核本地支持;但是,如果您的主机在较低的内核版本上运行,或者您有任何应用程序依赖项,您总是可以使用FUSE客户端让Ceph挂载Ceph FS
查看是否安装ceph-fuse包
[root@ceph103 ceph]# rpm -qa|grep ceph-fuse
若没有安装就进行安装
yum -y intall ceph-fuse
[root@ceph103 ~]# ceph-fuse -keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m ceph219L6789 /mnt/cephfs
加入开机启动项
echo “id=cephfs,keyring=/etc/ceph/ceph.client.cephfs.keyring /mnt/cephfs
fuse.ceph defaults 0 0 _netdev” >> /etc/fstab
注:因为 keyring文件包含了用户名,所以fstab不需要指定用了
5.3 将Ceph FS 导出为NFS服务器
网络文件系统(Network Filesystem, NFS)是最流行的可共享文件系统协议之一,每个基于unix的系统都可以使用它。不理解Ceph FS类型的基于unix的客户机仍然可以使用NFS访问Ceph文件系统。要做到这一点,我们需要一个NFS服务器,它可以作为NFS共享重新导出Ceph FS。NFS-ganesha是一个在用户空间中运行的NFS服务器,使用libcephfs支
持Ceph FS文件系统抽象层(FSAL)。
[root@ceph128 ~]# yum install nfs-utils nfs-ganesha
[root@ceph128 ~]# systemctl start rpcbind; systemctl enable rpcbind
[root@ceph128 ~]# systemctl start rpc-statd.service
[root@ceph129 ~]# vi /etc/ganesha/ganesha.conf
#通过提供Ganesha.conf 启动NFS Ganesha守护进程
[root@ceph129 ~]# ganesha.nfsd -f /etc/ganesha.conf -L /var/log/ganesha.log -N NIV_DEBUG
[root@ceph129 ~]# showmount -e
[root@ceph103 ~]# yum install -y nfs-utils
[root@ceph103 ~]# mkdir /mnt/cephnfs
[root@ceph103 ~]# mount -o rw,noatime ceph129:/ /mnt/cephnfs
对于生产环境,建议您在物理专用机器上配置RGW。但是,如果您的对象存储工作负载不太大,您可以考虑将任何监视器机器作为RGW节点使用。RGW是一个独立的服务,它从外部连接到Ceph集群,并向客户端提供对象存储访问。在生产环境中,建议您运行多个RGW实例,由负载均衡器屏蔽,如下图所示:
[root@ceph128 ~]# yum -y install ceph-radosgw
[ceph@ceph128 my-cluster]$ ceph-deploy rgw create ceph128 ceph129 ceph132
[root@ceph128 ~]# vi /etc/ceph/ceph.conf
[ceph@ceph128 my-cluster]$ sudo systemctl restart
[email protected]
注:当使用负载均衡的时候才需要进行配置,配置之后就使用80端口,这里是测试,所有就不进行修改
删除池的命令:ceph osd pool delete rbd rbd --yes-i-really-really-mean-it
[ceph@ceph128 my-cluster]$ wget
https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/pool
[ceph@ceph128 my-cluster]$ wget
https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/create_pool.sh
对脚本附加执行权限
[ceph@ceph128 my-cluster]$ chmod +x create_pool.sh
修改脚本内容
[ceph@ceph128 my-cluster]$ vi create_pool.sh
执行脚本创建池
[ceph@ceph128 my-cluster]$ sudo ./create_pool.sh
因为权限不对,因此复制到当前文件夹中
[ceph@ceph128 my-cluster]$ sudo cp
/var/lib/ceph/radosgw/ceph-rgw.ceph128/keyring ./
查看是否可以使用key文件进行集群访问
[ceph@ceph128 my-cluster]$ ceph -s -k keyring --name client.rgw.ceph128
4.2 使用 S3 API 访问 Ceph 对象存储
[root@ceph128 ~]# radosgw-admin user create --uid=radosgw --display-name=“radosgw”
注意:请把 access_key 和 secret_key 保存下来 ,如果忘记可使用:radosgw-admin user info --uid … -k … --name …
———————————————————————————————————
“user”: “radosgw”,
“access_key”: “DF2LWSS0JW8MP19W0V3H”,
“secret_key”: “KpIMc5hsUFwOmom1NUNuy8I7R3DHgE0tbrSBK01L”
[root@ceph103 ~]# yum install s3cmd
生成一个配置文件,在当前目录下,输入128生成的key
[root@ceph103 ~]# s3cmd –configure
注:国家只支持US
注:域名一定要进行配置,才可以时候api进行访问
s3cmd mb s3://first-bucket
s3cmd ls
s3cmd put /etc/hosts s3://first-bucket
s3cmd ls s3://first-bucket