ceph分布式存储集群部署及应用

2023-11-17

分布式文件系统(Distributed File System)

  • 分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
  • 分布式文件系统的设计基于C/S模式

常用分布式文件系统
Lustre、Hadoop、FastDFS、Ceph、GlusterFS

什么是Ceph

  • Ceph是一个分布式文件系统
  • 具有高扩展、高可用、高性能的特点
  • Ceph可以提供对象存储、块存储、文件系统存储
  • Ceph可以提供PB级别的存储空间
  • 软件定义存储作为存储行业的一大发展趋势,已经越来越受到市场认可

Ceph组件

  • OSDs:存储设备
  • Monitors:集群监控组件
  • RBD:操纵块设备镜像的工具
  • MDSs:存放文件系统的元数据(对象存储和块存储不需要该组件)
  • Client:Ceph客户端

安装ceph

一、安装前准备

1、物理机作为所有节点yum源

[root@room9pc01 soft]# mkdir /var/ftp/ceph
[root@room9pc01 soft]# ls
rhcs2.0-rhosp9-20161113-x86_64.iso
[root@room9pc01 soft]# mount rhcs2.0-rhosp9-20161113-x86_64.iso /var/ftp/ceph/
[root@room9pc01 soft]# ls /var/ftp/ceph/
rhceph-2.0-rhel-7-x86_64  rhel-7-server-openstack-9-rpms  rhscon-2.0-rhel-7-x86_64
[root@room9pc01 soft]# cd /var/ftp/ceph/rhceph-2.0-rhel-7-x86_64/
[root@room9pc01 rhceph-2.0-rhel-7-x86_64]# ls
EULA  GPL  MON  OSD  README  RPM-GPG-KEY-redhat-release  Tools  TRANS.TBL
############################################################################
[root@client10 ~]# vim /etc/yum.repos.d/dvd.repo		//客户端配置yum源
[Centos]
name=Centos7.4
baseurl=ftp://192.168.4.254/rhel7
enabled=1
gpgcheck=0
[MON]
name=MON
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/MON
enabled=1
gpgcheck=0
[OSD]
name=OSD
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/OSD
enabled=1
gpgcheck=0
[Tools]
name=Tools
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/Tools
enabled=1
gpgcheck=0
[root@client10 ~]# yum repolist
已加载插件:fastestmirror
Centos                                                            | 4.1 kB  00:00:00     
MON                                                               | 4.1 kB  00:00:00     
OSD                                                               | 4.1 kB  00:00:00     
Tools                                                             | 3.8 kB  00:00:00     
(1/8): MON/primary_db                                             |  40 kB  00:00:00     
(2/8): OSD/group_gz                                               |  447 B  00:00:00     
(3/8): Centos/primary_db                                          | 4.0 MB  00:00:00     
(4/8): OSD/primary_db                                             |  31 kB  00:00:00     
(5/8): MON/group_gz                                               |  489 B  00:00:00     
(6/8): Tools/group_gz                                             |  459 B  00:00:00     
(7/8): Centos/group_gz                                            | 137 kB  00:00:00     
(8/8): Tools/primary_db                                           |  31 kB  00:00:00     
Determining fastest mirrors
源标识                                  源名称                                      状态
Centos                                  Centos7.4                                   4,986
MON                                     MON                                            41
OSD                                     OSD                                            28
Tools                                   Tools                                          33
repolist: 5,088
[root@client10 ~]# for i in 11 12 13
> do
> scp /etc/yum.repos.d/dvd.repo 192.168.4.$i:/etc/yum.repos.d/
> done						//拷贝yum文件给其余node主机

2、修改/etc/hosts并同步到其他主机

[root@client10 ~]# vim /etc/hosts
192.168.4.10 client10
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
[root@client10 ~]# for i in 11 12 13; do scp /etc/hosts 192.168.4.$i:/etc/; done

3、配置ssh无密码连接

[root@node1 ~]# ssh-keygen -N '' -f /root/.ssh/id_rsa		//在node1上创建密钥
[root@node1 ~]# for i in 10 11 12 13
> do
>   ssh-copy-id 192.168.4.$i
> done				//传密钥给其他主机(包括自己)

4、配置NTP时间同步(物理机作为NTP服务器)

[root@room9pc01 ~]# vim /etc/chrony.conf		//修改物理机时间同步配置文件
server 0.centos.pool.ntp.org iburst
allow 192.168.4.0/24
local stratum 10
[root@room9pc01 ~]# systemctl restart chronyd
#################################################################
[root@node1 ~]# vim /etc/chrony.conf		//修改node节点时间同步配置文件
#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 192.168.4.254 iburst				//以物理机作为时间同步服务器
[root@node1 ~]# systemctl restart chronyd
[root@node1 ~]# for i in 10 12 13		
> do
>   scp /etc/chrony.conf 192.168.4.$i:/etc/
> done		
[root@node1 ~]# for i in client10 node2 node3
> do
>   ssh $i "systemctl restart chronyd"
> done		
[root@node1 ~]# chronyc sources -v		//查看时间同步情况

5、为每台node节点主机添加3块20G虚拟磁盘

二、部署ceph集群

1、安装部署软件

[root@node1 ~]# yum -y install ceph-deploy		//以node1作为部署主机,安装ceph部署工具
[root@node1 ~]# ceph-deploy --help
[root@node1 ~]# mkdir ceph-cluster		//创建ceph-deploy命令工作目录
[root@node1 ~]# cd ceph-cluster/

2、部署集群配置

[root@node1 ceph-cluster]# ls
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3		//这里将3台monitor装在node节点上,实际生产环境应独立出来
[root@node1 ceph-cluster]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
[root@node1 ceph-cluster]# cat ceph.conf 
[global]
fsid = 8b8cc6ac-7792-4541-82d1-e0e6bcfb640a
mon_initial_members = node1, node2, node3
mon_host = 192.168.4.11,192.168.4.12,192.168.4.13
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

3、给所有节点安装软件包

[root@node1 ceph-cluster]# ceph-deploy install node1 node2 node3
[root@node1 ceph-cluster]# rpm -qa |grep ceph
libcephfs1-10.2.2-38.el7cp.x86_64
ceph-osd-10.2.2-38.el7cp.x86_64
ceph-deploy-1.5.33-1.el7cp.noarch
ceph-base-10.2.2-38.el7cp.x86_64
ceph-mds-10.2.2-38.el7cp.x86_64
ceph-common-10.2.2-38.el7cp.x86_64
ceph-mon-10.2.2-38.el7cp.x86_64
ceph-selinux-10.2.2-38.el7cp.x86_64
python-cephfs-10.2.2-38.el7cp.x86_64
ceph-radosgw-10.2.2-38.el7cp.x86_64

4、初始化所有节点的mon服务(主机名解析必须对)

[root@node1 ceph-cluster]# ceph-deploy mon create-initial
[root@node2 ~]# ceph -s 		//任意主机查看集群状态
    cluster e865557c-60fd-4f40-af88-7cfa7457e3e2
     health HEALTH_ERR
            no osds
     monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
            election epoch 4, quorum 0,1,2 node1,node2,node3
     osdmap e1: 0 osds: 0 up, 0 in
            flags sortbitwise
      pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
            0 kB used, 0 kB / 0 kB avail
                  64 creating

5、磁盘分区(这里以node1操作为例)

[root@node1 ceph-cluster]# lsblk			//分区之前查看磁盘分区大小
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   20G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
vdb           252:16   0   20G  0 disk 
vdc           252:32   0   20G  0 disk 
vdd           252:48   0   20G  0 disk
[root@node1 ceph-cluster]# parted /dev/vdb mklabel gpt		//定义分区表格式
[root@node1 ceph-cluster]# parted /dev/vdb mkpart primary 1 50%		//vdb分区,将前50%作为一个分区
[root@node1 ceph-cluster]# parted /dev/vdb mkpart primary 50% 100%		//vdb分区,将后50%作为一个分区
[root@node1 ceph-cluster]# lsblk				//查看分区后的磁盘分区大小   
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   20G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
vdb           252:16   0   20G  0 disk 
├─vdb1        252:17   0   10G  0 part 		//vdb1和vdb2分别作为vdc和vdd的缓存盘
└─vdb2        252:18   0   10G  0 part 
vdc           252:32   0   20G  0 disk 
vdd           252:48   0   20G  0 disk
[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb1		//修改分区所有者,临时生效
[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb2
[root@node1 ceph-cluster]# vim /etc/udev/rules.d/70-vdb.rules			//修改分区所有者,永久生效
{DEVNAME}=="/dev/vdb1",OWNER="ceph",GROUP="ceph"
{DEVNAME}=="/dev/vdb2",OWNER="ceph",GROUP="ceph"

6、初始化清空磁盘数据(在node1上操作)

[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdc node1:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdc node2:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdc node3:vdd

7、创建osd存储空间(在node1上操作)

[root@node1 ceph-cluster]# ceph-deploy osd create node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2
[root@node1 ceph-cluster]# ceph-deploy osd create node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2
[root@node1 ceph-cluster]# ceph-deploy osd create node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2
[root@node1 ceph-cluster]# ceph -s		//查看集群状态
    cluster e865557c-60fd-4f40-af88-7cfa7457e3e2
     health HEALTH_OK			//健康状态为OK,集群创建成功
     monmap e1: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
            election epoch 4, quorum 0,1,2 node1,node2,node3
     osdmap e35: 6 osds: 6 up, 6 in					//6个osd存储设备		
            flags sortbitwise
      pgmap v83: 64 pgs, 1 pools, 0 bytes data, 0 objects
            202 MB used, 119 GB / 119 GB avail				//集群提供120G存储空间
                  64 active+clean

三、创建Ceph块存储

1、查看共享池

[root@node1 ceph-cluster]# ceph osd lspools
0 rbd,			//rbd共享池空间为120G

2、创建镜像,查看镜像(在任意node节点操作,均可识别)

[root@node2 ~]# rbd create demo-image --image-feature layering --size 10G		//默认从rbd中取出10G空间创建镜像demo-image
[root@node2 ~]# rbd create rbd/image --image-feature layering --size 10G		//指定从rbd中取出10G空间创建镜像image
[root@node2 ~]# rbd list				//列出镜像
demo-image
image
[root@node2 ~]# rbd info image				//查看镜像信息
rbd image 'image':
	size 10240 MB in 2560 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.1037238e1f29
	format: 2
	features: layering
	flags:

3、动态调整容量

[root@node2 ~]# rbd resize --size 5G image --allow-shrink		//缩小容量为5G
Resizing image: 100% complete...done.
[root@node2 ~]# rbd info image
rbd image 'image':
	size 5120 MB in 1280 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.1037238e1f29
	format: 2
	features: layering
	flags:
[root@node2 ~]# rbd resize --size 15G image		//扩大容量至15G
Resizing image: 100% complete...done.
[root@node2 ~]# rbd info image
rbd image 'image':
	size 15360 MB in 3840 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.1037238e1f29
	format: 2
	features: layering
	flags:

4、客户端通过KRBD访问

[root@client10 ~]# yum -y install ceph-common
[root@node1 ceph-cluster]# cd /etc/ceph/
[root@node1 ceph]# ls
ceph.client.admin.keyring  ceph.conf  rbdmap  tmpgIWUMA
[root@node1 ceph]# scp ceph.conf 192.168.4.10:/etc/ceph/		//拷贝ceph集群配置文件(包含集群信息)至客户端
[root@node1 ceph]# scp ceph.client.admin.keyring client10:/etc/ceph/		//拷贝连接密钥至客户端,否则客户端无权限访问ceph集群
[root@client10 ~]# ls /etc/ceph/
ceph.client.admin.keyring  ceph.conf  rbdmap
[root@client10 ~]# rbd map image			//将集群内镜像image映射为客户端本地磁盘
/dev/rbd0
[root@client10 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   20G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
rbd0          251:0    0   15G  0 disk				//客户端增加一个15G分区
[root@client10 ~]# rbd showmapped			//查看镜像挂载情况
id pool image snap device    
0  rbd  image -    /dev/rbd0
[root@client10 ~]# rbd unmap /dev/rbd0		//卸载分区
[root@client10 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   20G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
[root@client10 ~]# rbd map image		//重新映射镜像image为客户端本地磁盘

5、客户端格式化、挂载分区

[root@client10 ~]# mkfs.xfs /dev/rbd0		//格式化分区
[root@client10 ~]# mount /dev/rbd0 /mnt/
[root@client10 ~]# echo "test" > /mnt/test.txt		//写入测试文件

6、创建镜像快照

[root@node1 ceph]# rbd snap ls image		//查看镜像快照
[root@node1 ceph]# rbd snap create image --snap image-snap1		//给image镜像创建名为image-snap1的快照
[root@node1 ceph]# rbd snap ls image
SNAPID NAME            SIZE 
     4 image-snap1 15360 MB

7、还原快照

[root@client10 ~]# rm -rf /mnt/test.txt 
[root@client10 ~]# ls /mnt/test.txt
ls: 无法访问/mnt/test.txt: 没有那个文件或目录
[root@client10 ~]# umount /mnt		//卸载/mnt
[root@node1 ceph]# rbd snap rollback image --snap image-snap1		//还原快照
Rolling back to snapshot: 100% complete...done.
[root@client10 ~]# mount /dev/rbd0 /mnt		//重新挂载/mnt
[root@client10 ~]# ls /mnt		//查看还原情况
test.txt

8、创建、删除克隆快照镜像

[root@node1 ceph]# rbd snap protect image --snap image-snap1		//克隆快照之前,需要先保护快照,否则勿删后,克隆的快照镜像无法使用
[root@node1 ceph]# rbd snap rm image --snap image-snap1		//删除快照失败
rbd: snapshot 'image-snap1' is protected from removal.
2019-06-03 11:45:06.908919 7fabef8bcd80 -1 librbd::Operations: snapshot is protected
[root@node1 ceph]# rbd clone image --snap image-snap1 image-clone --image-feature layering		//使用image的快照image-snap1克隆一个新的image-clone镜像
[root@node1 ceph]# rbd list		//查看镜像
demo-image
image
image-clone
[root@node1 ceph]# rbd info image-clone
rbd image 'image-clone':
	size 15360 MB in 3840 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.104b238e1f29
	format: 2
	features: layering
	flags: 
	parent: rbd/image@image-snap1				//克隆镜像数据来源于快照image-snap1
	overlap: 15360 MB
[root@node1 ceph]# rbd flatten image-clone		//如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时
[root@node1 ceph]# rbd info image-clone
rbd image 'image-clone':
	size 15360 MB in 3840 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.104b238e1f29
	format: 2
	features: layering
	flags:
[root@node1 ceph]# rbd snap unprotect image --snap image-snap1		//取消快照保护
[root@node1 ceph]# rbd snap rm image --snap image-snap1		//删除快照

9、块存储应用案例:物理机作为客户端部署虚拟机,虚拟机调用ceph块存储
(1)ceph认证账户

[root@room9pc01 ~]# yum -y install ceph-common
[root@room9pc01 ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/
[root@room9pc01 ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
[root@room9pc01 ~]# ls /etc/ceph/
ceph.client.admin.keyring  ceph.conf  rbdmap
[root@room9pc01 ~]# vim secret.xml		//创建secret文件,使kvm虚拟机也能访问ceph块存储
<secret ephemeral='no' private='no'>
    <usage type='ceph'>
        <name>client.admin secret</name>
    </usage>
</secret>
[root@room9pc01 ~]# virsh secret-define --file secret.xml 		//生成UUID账户信息
生成 secret 4a126092-b631-43d0-b70f-2a5eb628a4ae
[root@room9pc01 ~]# virsh secret-list
 UUID                                  用量
--------------------------------------------------------------------------------
 4a126092-b631-43d0-b70f-2a5eb628a4ae  ceph client.admin secret
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 [root@room9pc01 ~]# virsh secret-undefine 4a126092-b631-43d0-b70f-2a5eb628a4ae		//删除UUID
已删除 secret 4a126092-b631-43d0-b70f-2a5eb628a4ae
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@room9pc01 ~]# virsh secret-define --file secret.xml 		//重新生成UUID
生成 secret 328305b0-a53c-4134-b3b4-490fe7af4657
[root@room9pc01 ~]# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
	key = AQAV3vNczPvQCBAA9UHZSC3jiL3NblRULDEcVw==
[root@room9pc01 ~]# virsh secret-set-value \
> --secret 328305b0-a53c-4134-b3b4-490fe7af4657 \
> --base64 AQAV3vNczPvQCBAA9UHZSC3jiL3NblRULDEcVw==		//设置secret,添加账户密钥
secret 值设定

(2)新建虚拟机(new),编辑虚拟机配置文件new.xml

[root@node1 ceph]# rbd create vm1-image --image-feature layering --size 20G		//创建镜像vm1-imgae
[root@node1 ceph]# rbd list
demo-image
image
image-clone
vm1-image
[root@room9pc01 ~]# virsh edit new
    <disk type='network' device='disk'>		//修改disk区域,type改为network
      <driver name='qemu' type='raw'/>
      <auth username='admin'>
        <secret type='ceph' uuid='328305b0-a53c-4134-b3b4-490fe7af4657'/>		//修改UUID
      </auth>
      <source protocol='rbd' name='rbd/vm1-image'>		//源文件为ceph镜像
        <host name='192.168.4.11' port='6789'/>
      </source>
      <target dev='vda' bus='virtio'/>		//修改bus接口类型
      <address type='pci' domain='0x0000' bus='0x22' slot='0x07' function='0x0'/>
    </disk>

(3)kvm查看虚拟机new,即为ceph集群上的一块磁盘

四、创建ceph文件系统

(1)部署node3主机作为mds节点(注:一般mds节点应为独立主机,且需要配置NTP、相同yun源以及无密码远程,并安装ceph-mds)

[root@node3 ~]# rpm -qa |grep ceph-mds
ceph-mds-10.2.2-38.el7cp.x86_64
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy mds create node3		//启动node3主机的mds服务
[root@node3 ~]# systemctl status ceph-mds@node3.service 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@node1 ceph-cluster]# ceph-deploy admin mds_node		//同步配置文件和密钥至mds节点,由于node3之前已做相关配置,故省略此步操作
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

(2)创建存储池

[root@node3 ~]# ceph osd lspools				//查看共享池
0 rbd,
[root@node3 ~]# ceph osd pool create cephfs_data 128				//创建存储池的block区域
[root@node3 ~]# ceph osd pool create cephfs_metadata 128		//创建存储池的inode区域
[root@node3 ~]# ceph osd lspools
0 rbd,1 cephfs_data,2 cephfs_metadata,
[root@node3 ~]# ceph mds stat		//参看mds状态
e2:, 1 up:standby

(3)创建ceph文件系统

[root@node3 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data		//创建文件系统,注意先写metadata池,再写data池
[root@node3 ~]# ceph mds stat
e5: 1/1/1 up {0=node3=up:active}
[root@node3 ~]# ceph fs ls				//查看文件系统
name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

(4)客户端挂载

[root@client10 ~]# mount -t ceph 192.168.4.11:6789:/ /mnt/cephfs/ \
> -o name=admin,secret=AQAV3vNczPvQCBAA9UHZSC3jiL3NblRULDEcVw==		//挂载ceph文件系统的根目录至客户端本地目录/mnt/media,secret为ceph密钥文件中的key值
[root@client10 ~]# df -h /mnt/cephfs/				//查看挂载的文件系统
文件系统             容量  已用  可用 已用% 挂载点
192.168.4.11:6789:/  120G  500M  120G    1% /mnt/media

五、创建对象存储

部署node3主机作为rgw节点(注:一般rgw节点应为独立主机,且需要配置NTP、相同yun源以及无密码远程,并安装ceph-radosgw)

[root@node3 ~]# rpm -qa |grep ceph-radosgw
ceph-radosgw-10.2.2-38.el7cp.x86_64
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@node1 ceph-cluster]# ceph-deploy install --rgw rgw_node		//独立rgw节点主机需要安装ceph-radosgw
[root@node1 ceph-cluster]# ceph-deploy admin rgw_node		//同步配置文件和密钥至rgw节点,由于node3之前已做相关配置,故省略此步操作
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@node1 ceph-cluster]# ceph-deploy rgw create node3		//启动node3的rgw服务
[root@node3 ~]# systemctl status ceph-radosgw@rgw.node3.service		//查看node3节点rgw服务启动情况
[root@node3 ~]# vim /etc/ceph/ceph.conf
#添加以下配置,修改rgw服务端口
[client.rgw.node3]
host = node3
rgw_frontends = "civetweb port=8000"
[root@node3 ~]# systemctl restart ceph-radosgw@rgw.node3.service 
[root@node3 ~]# netstat -ntulp |grep :8000

部署完以上对象存储服务器之后,需要开发相应的程序运用该对象存储服务

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ceph分布式存储集群部署及应用 的相关文章

  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 在 scapy 中通过物理环回发送数据包

    我最近发现了 Scapy 它看起来很棒 我正在尝试查看 NIC 上物理环回模块 存根上的简单流量 但是 Scapy sniff 没有给出任何结果 我正在做的发送数据包是 payload data 10 snf sniff filter ic
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String

随机推荐

  • Redis五大数据类型使用——String

    1 String 字符串 添加 查询 追加 获取长度 判断是否存在的操作 C Users 12559 gt redis cli exe 启动redis 127 0 0 1 6379 gt set name kobe 插入一个key为 nam
  • [附源码]java毕业设计高校学生疫情防控信息管理系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 【JavaWeb】Thymeleaf的简介与使用

    Thmeleaf MVC 为什么需要MVC 我们之前在书城项目第二阶段做登录的时候 曾经提出过优化登录失败后的处理 虽然说可以实现在登录失败之后跳转回到登录页面 并且展示失败信息 但是代码实在是太恶心了 根本没法维护 所以我们需要将视图展示
  • 【转】深度强化学习的加速方法

    原文地址 https www matools com blog 190533310 Accelerated methods for deep reinforcement learning 论文解读 深度强化学习一直以来都以智能体训练时间长
  • openGauss学习笔记-07 openGauss 语法

    文章目录 openGauss学习笔记 07 openGauss 语法 7 1 帮助 7 2 SQL语句格式 7 3 SQL语法 ABORT ALTER AUDIT POLICY ALTER DATA SOURCE ALTER DATABAS
  • Android实现图片点击放大

    第一步 查看大图 implementation com github SherlockGougou BigImageViewPager v4 6 1 1 第二步 在图片点击事件里调用 ImagePreview getInstance 上下文
  • 【mybatis】【mybatisPlus】

    springboot 下 mybatis mybatisPlus Mybatis的作用 配置数据源和mybatis的配置 Mybatis的作用 Mybatis就是帮助程序员将数据存取到数据库里面 MyBatis 是一个半自动化的ORM框架
  • 使用Java socket简单模拟HTTP服务器

    1 HTTP server 接收client端的http请求并将同级目录的root 返回 package httpDemo import java io InputStream import java io OutputStream imp
  • Electron 入门学习案例(electron 初体验)

    Electron 入门学习案例 electron 是桌面端的一个框架 可以把 html js css 封装成为一个 exe 或者 其他平台的应用程序 很好的实现了跨平台 并且开发效率很快 初始化环境 初始化 npm 环境使用命令npm in
  • 学习大数据spark——心得体会

    总结与体会 1 项目总结 本次项目实现了Spark 单机模式Python版的安装 介绍了与Spark编程有关的一些基本概念 特别对RDD的创建 转换和行动操作做了比较详细的说明 对从RDD 到DataFrame的实现进 行了案例训练 包括
  • PCB走线宽度和走过的电流对照表

    1 PCB走线宽度和走过的电流对照表 一般线路板厂家以OZ表示铜箔厚度 1OZ的厚度表示将1OZ重量的铜均匀铺在1平方英尺面积上达到的铜箔厚度 约为0 035mm 所以35um 50um 70um 对应的以oz为计量单位的厚度为1OZ 1
  • 解决SQL case when then else 在查询结果不存在时不生效的问题

    今天遇到一个问题 SQL 下的case when then else语句在查询结果不存在时不生效 今天解决了 顺便记录一下 为了方便的演示 先建个表Users Id Name Gender 1 白子画 0 2 花千骨 1 3 梅长苏 0 4
  • 财政收入影响因素分析

    目录 1 数据 2 代码 3 补充 1 数据 百度网盘链接 链接 https pan baidu com s 10I5FRbqSv0MGJ56SvmSTAg pwd 1234 提取码 1234 2 代码 coding utf 8 代码6 1
  • ArcMap连接表格(Join)相关问题整理

    表格连接是我们日常工作中ArcGIS常用的一项操作 常用Excel表格连接 但是在实际运用中 我们会遇到一些问题 这一般与我们使用的数据以及相关操作有关 在这里 我们根据实际经验 将一些常见问题与解决途径做一总结 1 表格无法连接 解决 检
  • python代码——批量压缩指定目录下的文件夹

    语言 python 3 用法 选择目录 对该目录下的文件夹分别压缩 生成同名压缩文件 并保存到该目录下 import os import shutil import zipfile from tkinter import Tk from t
  • k8s图形界面登录报错Failure

    k8s图形界面登录报错如下 kind Status apiVersion v1 metadata status Failure message forbidden User system anonymous cannot get path
  • echarts实现一个页面同时显示多个图表

    前言 因工作需要 老大要求给我一个JSON数据 用echarts 写一个option实现多个图表 折线图 饼图 关系图 展示 也就是说只要一个div dom对象 实现多个不同形状的图表展示 ps 前期没弄清老大意思 写了三个div来显示 尴
  • SpringToolSuite4中maven不能创建项目,创建后没有maven dependence,以及gradle创建后不能使用,更改阿里云仓库

    SpringToolSuite4中maven不能创建项目 创建后没有maven dependence gradle创建后不能使用 更改阿里云仓库 感慨一下 maven 配置指南 gradle 配置指南 感慨一下 其实这个问题很无语 搞了好几
  • 匈牙利匹配

    文章目录 不带权重的二分图匹配 算法核心 代码示例 带权重的二分图匹配 算法步骤 算法核心 如何用最少的直线覆盖矩阵中的全部0元素 如何调整矩阵 代码实例 参考 不带权重的二分图匹配 算法核心 把冲突节点的原先匹配的左节点重新连接到它的未被
  • ceph分布式存储集群部署及应用

    分布式文件系统 Distributed File System 分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上 而是通过计算机网络与节点相连 分布式文件系统的设计基于C S模式 常用分布式文件系统 Lustre Ha