推荐阅读

Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506
Helm3(K8S 资源对象管理工具)博客专栏:https://blog.csdn.net/xzk9381/category_10895812.html

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109535925,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

搭建 Ceph 分布式集群( nautilus 版本 )

一、服务器环境说明

主机名 角色 IP地址
ceph-admin ceph-deploy 192.168.92.21
ceph-node1 mon、mgr、osd 192.168.92.22
ceph-node2 mon、mgr、osd 192.168.92.23
ceph-node3 mon、mgr、osd 192.168.92.24

二、集群架构图

三、服务器环境准备

1. 配置 yum 仓库地址

对所有机器配置 epel 仓库、基础软件包仓库、ceph 软件包仓库,所有的镜像仓库地址可到阿里云开源镜像站中查找,地址:https://developer.aliyun.com/mirror/,配置步骤如下:

  1. 安装 epel 仓库:
wget http://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel-7.repo
  1. 安装阿里云 yum 源
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS7-Base-ali.repo
sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-ali.repo
  1. 在 /etc/yum.repos.d 目录下创建 ceph.repo 文件,作为 ceph 仓库,内容如下:
cat >> /etc/yum.repos.d/ceph.repo << EOF
[noarch]
name=ceph-noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
enable=1
gpgcheck=0[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
enable=1
gpgcheck=0
EOF

2. 同步服务器时间

为了保证 ceph 集群 mon 组件通信正常,需要对每个节点的时间进行同步,这里对管理节点和 osd 节点进行时间同步,首先在所有服务器中安装 chrony 用于系统时间同步,步骤如下:

安装 chrony 服务

yum -y install chrony

设置系统时区

timedatectl set-timezone Asia/Shanghai

设置系统时钟同步,输出以下内容代表同步正常

[root@ceph-admin ~]# systemctl enable chronyd && systemctl start chronyd
[root@ceph-admin ~]# timedatectl statusLocal time: 一 2020-07-27 14:52:14 CSTUniversal time: 一 2020-07-27 06:52:14 UTCRTC time: 一 2020-07-27 06:52:15Time zone: Asia/Shanghai (CST, +0800)NTP enabled: yes
NTP synchronized: yesRTC in local TZ: noDST active: n/a

将当前的 UTC 时间写入硬件时钟,并重启依赖于系统时间的服务

timedatectl set-local-rtc 0
systemctl restart rsyslog && systemctl restart crond

3. 配置主机名解析

使用 ceph-deploy 部署集群时,需要通过主机名来查找主机 IP 地址,所以要在本地 hosts 文件中配置地址解析:

cat >> /etc/hosts << EOF
192.168.92.21   ceph-admin
192.168.92.22   ceph-node1
192.168.92.23   ceph-node2
192.168.92.24   ceph-node3
EOF

4. 关闭防火墙和 selinux

闭系统防火墙并禁止开机启动,清理防火墙规则并设置默认转发策略

systemctl stop firewalld.service && systemctl disable firewalld.service
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT

永久关闭selinux

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

5. 配置免密认证

在 ceph-admin 节点执行 ceph-deploy 命令时,需要通过 ssh 方式连接到各个 osd 节点中运行指令,所以需要配置 ceph-admin 节点到其他 osd 节点的 ssh 免密认证(以下操作只需要在 ceph-admin 节点中进行),需要注意的是,如果需要非 root 用户部署 ceph 集群,需要针对该用户配置免密认证:

在各个机器上生成密钥对

ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''

将各节点的主机信息(host key)写入control_node的~/.ssh/known_hosts文件

for host in 192.168.92.{21..24} ceph-admin ceph-node{1..3}; do ssh-keyscan $host >>~/.ssh/known_hosts 2>/dev/null; done

将公钥分发给各个机器(需提前安装 sshpass)

for host in ceph-admin ceph-node{1..3}; do sshpass -p'123456' ssh-copy-id root@$host &>/dev/null; done

四、搭建 Ceph 集群

1. 安装 ceph-deploy 工具

ceph-deploy 工具只需要安装在 ceph-admin 节点中,命令如下:

yum -y install python-setuptools ceph-deploy ceph

安装 ceph 包的目的是为了以后能在 ceph-admin 节点中查看 ceph 集群的状态

在 ceph-admin 节点中创建集群的工作目录,该目录中会存放 ceph-deploy 执行指令时生成的日志和秘钥信息等:

mkdir -p /opt/ops-ceph-cluster

2. 初始化集群

在 ceph-admin 节点上进入 /opt/ops-ceph-cluster 目录下,执行 ceph-deploy 命令初始化集群设置,初始化要求指定节点作为 mon,命令如下:

ceph-deploy new --public-network 192.168.92.0/24 --cluster-network 192.168.92.0/24 ceph-node1

–public-network 代表 ceph 集群对外提供调用的网络,–cluster-network 代表用于集群内部通信的网络。一般情况下 ceph 集群中需要有两个网络,这样可以保证 ceph 集群的安全性。由于此次搭建的环境中只有一个网络,所以此处两个配置项填写同一个网段的地址。

上面的命令执行完成后会将 ceph-node1 节点配置为 mon,并且会在 /opt/ops-ceph-cluster 目录下生成集群的配置文件、key 文件(用于身份验证)、日志文件等:

[root@ceph-admin ops-ceph-cluster]# ll
总用量 12
-rw-r--r--. 1 root root  268 7月  27 14:58 ceph.conf
-rw-r--r--. 1 root root 3248 7月  27 14:58 ceph-deploy-ceph.log
-rw-------. 1 root root   73 7月  27 14:58 ceph.mon.keyring

配置文件 ceph.conf 内容如下:

[root@ceph-admin ops-ceph-cluster]# cat ceph.conf
[global]
fsid = f52099ba-cec0-4c77-bd92-3a21ad224be3
public_network = 192.168.92.0/24
cluster_network = 192.168.92.0/24
mon_initial_members = ceph-node1
mon_host = 192.168.92.22
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

3. 安装 ceph 组件

接下来需要在各个 osd 节点安装 ceph 组件包:

yum -y install ceph ceph-mon ceph-mgr ceph-mds ceph-radosgw

4. 初始化 mon

在初始化集群的过程中已经指定了 mon 的节点,现在需要对 mon 进行初始化,在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录下执行如下命令进行初始化:

ceph-deploy mon create-initial

初始化完成后,会在当前目录下生成各个组件需要的 key 文件:

[root@ceph-admin ops-ceph-cluster]# ll
总用量 44
-rw-------. 1 root root   113 7月  27 15:16 ceph.bootstrap-mds.keyring
-rw-------. 1 root root   113 7月  27 15:16 ceph.bootstrap-mgr.keyring
-rw-------. 1 root root   113 7月  27 15:16 ceph.bootstrap-osd.keyring
-rw-------. 1 root root   113 7月  27 15:16 ceph.bootstrap-rgw.keyring
-rw-------. 1 root root   151 7月  27 15:16 ceph.client.admin.keyring
-rw-r--r--. 1 root root   268 7月  27 14:58 ceph.conf
-rw-r--r--. 1 root root 16375 7月  27 15:16 ceph-deploy-ceph.log
-rw-------. 1 root root    73 7月  27 14:58 ceph.mon.keyring

接下来将 admin用户的 key 文件拷贝给各个 osd 节点,如果为了在 ceph-admin 节点中使用 ceph 命令查看集群状态,那么也需要将 key 文件拷贝给 ceph-admin 节点(ceph-admin节点需要安装 ceph 包)

ceph-deploy admin ceph-admin ceph-node1 ceph-node2 ceph-node3

拷贝完成后执行 ceph -s 命令可以查看到当前集群的状态:

[root@ceph-admin ops-ceph-cluster]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_OKservices:mon: 1 daemons, quorum ceph-node1 (age 7m)mgr: no daemons activeosd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0 objects, 0 Busage:   0 B used, 0 B / 0 B availpgs:

可以看到当前集群中已经有一个 mon 节点。

5. 安装 mgr 进程

配置 ceph-node1 节点作为 mgr,在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录下执行如下命令:

ceph-deploy mgr create ceph-node1

查看集群状态,可以看到启动了一个 mgr daemon:

[root@ceph-admin ops-ceph-cluster]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_WARNOSD count 0 < osd_pool_default_size 3services:mon: 1 daemons, quorum ceph-node1 (age 11m)mgr: ceph-node1(active, since 33s)osd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0 objects, 0 Busage:   0 B used, 0 B / 0 B availpgs:

6. 部署 OSD 节点

当前环境中,每个 OSD 节点都有两块磁盘 sdb 和 sdc,信息如下:

[root@ceph-node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk
├─sda1            8:1    0  200M  0 part /boot
└─sda2            8:2    0 99.8G  0 part ├─centos-root 253:0    0 95.8G  0 lvm  /└─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
sdc               8:32   0   20G  0 disk
sr0              11:0    1  4.4G  0 rom

接下来将每个 OSD 节点中的 sdb 磁盘加入到 ceph 集群中,命令如下:

for host in 1 2 3
do
ceph-deploy disk zap ceph-node${host} /dev/sdb
ceph-deploy osd create ceph-node${host} --data /dev/sdb
done

ceph-deploy disk zap 命令用于将目标磁盘的分区表和内容擦除,实际上它是调用 /bin/dd if=/dev/zero of=/dev/sdb bs=1M count=10 conv=fsync 命令来销毁 GPT 和 MBR 。如果目标磁盘是未被分区的,可以不使用该命令

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109535925,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

此时查看 ceph 集群的状态,可以看到有三个 OSD 已经被加入到集群中:

[root@ceph-admin ops-ceph-cluster]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_OKservices:mon: 1 daemons, quorum ceph-node1 (age 21m)mgr: ceph-node1(active, since 10m)osd: 3 osds: 3 up (since 2m), 3 in (since 2m)data:pools:   0 pools, 0 pgsobjects: 0 objects, 0 Busage:   3.0 GiB used, 57 GiB / 60 GiB availpgs:

7. 扩展 mon 和 mgr 节点

mon 和 mgr 是 ceph 集群中非常重要的组件,其中 mon 作为整个集群的控制中心,里面存放着集群的信息,所以需要确保 mon 和 mgr 处于高可用的状态,为了保证选举正常,节点数要为奇数。

7.1 扩容 mon 节点

首先将 ceph-node2 和 ceph-node3 扩容为 mon 节点:

ceph-deploy mon add ceph-node2
ceph-deploy mon add ceph-node3

扩容完成后查看集群状态:

[root@ceph-admin ops-ceph-cluster]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_OKservices:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 27s)mgr: ceph-node1(active, since 15m)osd: 3 osds: 3 up (since 7m), 3 in (since 7m)data:pools:   0 pools, 0 pgsobjects: 0 objects, 0 Busage:   3.0 GiB used, 57 GiB / 60 GiB availpgs:

集群信息中显示当前的 mon 节点已经为 3 个,使用如下命令查看 mon 节点的选举状态:

[root@ceph-admin ops-ceph-cluster]# ceph quorum_status --format json-pretty{"election_epoch": 12,"quorum": [0,1,2],"quorum_names": ["ceph-node1","ceph-node2","ceph-node3"],"quorum_leader_name": "ceph-node1","quorum_age": 88,

可以看到当前已经可以正常选举,leader 为 ceph-node1 节点上的 mon。也可以使用 ceph mon stat 命令查看 mon 的信息:

[root@ceph-admin ops-ceph-cluster]# ceph mon stat
e3: 3 mons at {ceph-node1=[v2:192.168.92.22:3300/0,v1:192.168.92.22:6789/0],ceph-node2=[v2:192.168.92.23:3300/0,v1:192.168.92.23:6789/0],ceph-node3=[v2:192.168.92.24:3300/0,v1:192.168.92.24:6789/0]}, election epoch 12, leader 0 ceph-node1, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3

或者使用 ceph mon dump 命令查看详细的信息:

[root@ceph-admin ops-ceph-cluster]# ceph mon dump
dumped monmap epoch 3
epoch 3
fsid f52099ba-cec0-4c77-bd92-3a21ad224be3
last_changed 2020-07-27 15:42:02.273752
created 2020-07-27 15:16:09.870184
min_mon_release 14 (nautilus)
0: [v2:192.168.92.22:3300/0,v1:192.168.92.22:6789/0] mon.ceph-node1
1: [v2:192.168.92.23:3300/0,v1:192.168.92.23:6789/0] mon.ceph-node2
2: [v2:192.168.92.24:3300/0,v1:192.168.92.24:6789/0] mon.ceph-node3
7.2 扩容 mgr 节点

接下来扩容 mgr 节点,命令如下:

ceph-deploy mgr create ceph-node2 ceph-node3

查看集群信息:

[root@ceph-admin ops-ceph-cluster]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_OKservices:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 11m)mgr: ceph-node1(active, since 26m), standbys: ceph-node2, ceph-node3osd: 3 osds: 3 up (since 18m), 3 in (since 18m)data:pools:   0 pools, 0 pgsobjects: 0 objects, 0 Busage:   3.0 GiB used, 57 GiB / 60 GiB availpgs:

可以看到 mgr 变为 3 个节点,其中两个节点处于 standby 状态。

五、创建 RBD 块存储

1. 创建 pool

在 ceph-admin 节点中执行如下命令创建 pool:

ceph osd pool create ops-pool 64 64

第一个 64 代表设置的 pg 数量,第二个 64 代表设置的 pgp 数量

使用如下命令查看当前已有的 pool:

[root@ceph-admin ~]# ceph osd lspools
1 ops-pool

查看指定 pool 中的 pg 和 pgp 数量:

[root@ceph-admin ~]# ceph osd pool get ops-pool pg_num
pg_num: 64
[root@ceph-admin ~]# ceph osd pool get ops-pool pgp_num
pgp_num: 64

查看指定 pool 中的副本数(副本数默认为3):

[root@ceph-admin ~]# ceph osd pool get ops-pool size
size: 3

查看指定 pool 的调度算法(默认为replicated_rule):

[root@ceph-admin ~]# ceph osd pool get ops-pool crush_rule
crush_rule: replicated_rule

调整指定 pool 的 pg 和 pgp 数量:

ceph osd pool set ops-pool pg_num 128
ceph osd pool set ops-pool pgp_num 128

调整指定 pool 的副本数:

ceph osd pool set ops-pool size 2

一般来说,创建 pool 后,需要对这个 pool 进行初始化,例如用于 rbd 块存储的 pool 使用 rbd pool init 命令就可以将指定 pool 初始化为 rbd 类型的 application。如果不进行这个初始化的操作,不会影响存储的使用,但是会在集群信息中显示报警信息。后面会对于该报警信息和解决办法进行说明。

2. 创建块存储和映射

2.1 创建 image

使用如下命令创建一个块存储的 image:

rbd create -p ops-pool --image ops-rbd.img --size 5G

上面的命令也可以写为如下形式:

rbd create ops-pool/ops-rbd-1.img --size 5G

查看指定 pool 中的 image:

[root@ceph-admin ~]# rbd -p ops-pool ls
ops-rbd-1.img
ops-rbd.img

查看指定 image 的信息:

[root@ceph-admin ~]# rbd info ops-pool/ops-rbd.img
rbd image 'ops-rbd.img':size 5 GiB in 1280 objectsorder 22 (4 MiB objects)snapshot_count: 0id: 11cd172302e2block_name_prefix: rbd_data.11cd172302e2format: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flattenop_features: flags: create_timestamp: Mon Jul 27 16:36:25 2020access_timestamp: Mon Jul 27 16:36:25 2020modify_timestamp: Mon Jul 27 16:36:25 2020

其中 features 项中代表当前 rbd 中启用的一些内核特性,有些内核不支持启用这些特性,所以在挂载的 rbd 的时候会报错,后面的内容会说明如何禁用已启用的内核特性

删除 pool 中指定的 image:

rbd rm -p ops-pool --image ops-rbd-1.img
2.2 使用 map 映射

使用如下命令将 image 映射到当前机器上:

rbd map ops-pool/ops-rbd.img

执行命令后会看到有如下报错:

rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable ops-pool/ops-rbd.img object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address

报错内容就是上面提到的,由于 rbd 默认启用了一些内核特性,而当前机器中的内核版本不支持这些内核特性,所以需要提前将这些特性给禁用掉,命令如下:

for i in deep-flatten fast-diff object-map exclusive-lock; do rbd feature disable ops-pool/ops-rbd.img ${i}; done

操作完成后重新执行上面的 map 命令即可完成映射,命令执行完成后可以看到已经将 ops-rbd.img 映射到本地的一个块设备名称:

[root@ceph-admin ~]# rbd map ops-pool/ops-rbd.img
/dev/rbd0

通过如下命令可以查看到设备映射的信息:

[root@ceph-admin ~]# rbd device list
id   pool       namespace   image         snap   device
0    ops-pool               ops-rbd.img   -      /dev/rbd0[root@ceph-admin ~]# fdisk -l | grep -A3 /dev/rbd0
磁盘 /dev/rbd0:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):4194304 字节 / 4194304 字节

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109535925,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

2.3 格式化存储并挂载

将 /dev/vdb0 格式化为 ext4,并挂载到 /media 目录下:

mkfs.ext4 /dev/rbd0 && mount /dev/rbd0 /media

此时就可以向该存储中写入数据:

[root@ceph-admin media]# echo "message" > testfile
[root@ceph-admin media]# cat testfile
message

3. 对块存储进行扩容

上面已经创建了一个大小为 5G 的块设备,如果需要给块设备进行扩容,例如扩大到 10G,可以使用如下命令:

rbd resize ops-pool/ops-rbd.img --size 10G

扩容完成后查看块设备的信息:

[root@ceph-admin ~]# rbd info ops-pool/ops-rbd.img
rbd image 'ops-rbd.img':size 10 GiB in 2560 objectsorder 22 (4 MiB objects)snapshot_count: 0id: 11cd172302e2block_name_prefix: rbd_data.11cd172302e2format: 2features: layeringop_features: flags: create_timestamp: Mon Jul 27 16:36:25 2020access_timestamp: Mon Jul 27 16:36:25 2020modify_timestamp: Mon Jul 27 16:36:25 2020

可以看到存储已经调整为 10G,但是查看挂载目录的大小还是 5G:

[root@ceph-admin ~]# df -Th /media
文件系统       类型   容量   已用  可用    已用% 挂载点
/dev/rbd0     ext4  4.8G   20M  4.6G    1%   /media

所以需要使文件系统也识别到扩容的空间,这个存储设备使用的 ext4 格式,所以使用 resize2fs 命令即可完成识别:

resize2fs /dev/rbd0

然后再次查看文件系统大小如下:

[root@ceph-admin ~]# df -Th /media
文件系统        类型   容量   已用  可用    已用%   挂载点
/dev/rbd0      ext4  9.8G   23M  9.3G    1%     /media

4. 告警排查

上面说到了如果没有对 pool 进行初始化,会触发告警信息,通过查看集群信息可以看到相应的告警:

[root@ceph-admin ~]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_WARNapplication not enabled on 1 pool(s)

可以看到在健康检查中告警"未在 pool 中启用 application"。使用如下命令可以查看到告警的详细信息:

[root@ceph-admin ~]# 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 'ops-pool'use 'ceph osd pool application enable <pool-name> <app-name>', where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications.

接下来使用告警信息中给出的命令来设置这个 pool 启用 application,并将类型设置为 rbd:

ceph osd pool application enable ops-pool rbd

此时再次查看集群状态信息,可以看到告警已经恢复,健康状态检查正常:

[root@ceph-admin ~]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_OK

通过如下命令可以查看到 pool 中已启用的 application:

[root@ceph-admin ~]# ceph osd pool application get ops-pool
{"rbd": {}
}

六、创建 RGW 对象存储

1. 创建 RGW

在 ceph-admin 节点中的 /opt/ops-ceph-cluster 目录下执行如下命令创建 RGW:

ceph-deploy rgw create ceph-node1

执行完成后查看集群信息,可以看到已经启用了一个 RGW:

[root@ceph-admin ops-ceph-cluster]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_WARNapplication not enabled on 1 pool(s)services:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 117m)mgr: ceph-node1(active, since 2h), standbys: ceph-node2, ceph-node3osd: 3 osds: 3 up (since 2h), 3 in (since 2h)rgw: 1 daemon active (ceph-node1)task status:data:pools:   5 pools, 256 pgsobjects: 240 objects, 143 MiBusage:   3.3 GiB used, 57 GiB / 60 GiB availpgs:     256 active+clean

在 ceph-node1 节点中查看 RGW 监听的端口(默认为 7480):

[root@ceph-node1 ~]# netstat -anplut | grep 7480
tcp        0      0 0.0.0.0:7480            0.0.0.0:*               LISTEN      19986/radosgw
tcp6       0      0 :::7480                 :::*                    LISTEN      19986/radosgw

2. 修改 RGW 端口号

首先更改 ceph-admin 节点中 /opt/ops-ceph-cluster 目录下 ceph.conf 文件的内容,添加如下配置:

[client.rgw.ceph-node1]
rgw_frontends = "civetweb port=80"

注意 [client.rgw.ceph-node1] 中要将 client.rgw. 后面的部分改为部署了 RGW 机器的主机名

文件修改完成后将配置文件 push 到其他 OSD 节点中去:

ceph-deploy --overwrite-conf config push ceph-admin ceph-node1 ceph-node2 ceph-node3

在 ceph-node1 节点中重启 RGW 服务:

systemctl restart ceph-radosgw.target

查看 RGW 服务当前监听的端口:

[root@ceph-node1 ~]# netstat -anplut | grep radosgw | grep LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      20929/radosgw

3. 创建访问 S3 的用户

创建的用户有两种,一种是兼容 S3 风格的,还有一种是 Swift 风格。

3.1 创建访问 S3 的用户

使用如下命令创建一个用于访问 S3 的用户:

radosgw-admin user create --uid ops-s3-user --display-name "Ops S3 User Demo"

命令执行后会输出如下结果:

{"user_id": "ops-s3-user","display_name": "Ops S3 User Demo","email": "","suspended": 0,"max_buckets": 1000,"subusers": [],"keys": [{"user": "ops-s3-user","access_key": "JV54B80DTZ8VQ2P4IYD4","secret_key": "GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2"}],"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": []
}

上面的内容中显示了用户的 key 信息以及一些用户的配额信息。以上的信息也可以通过如下命令再次输出:

radosgw-admin user info --uid ops-s3-user
3.2 测试 s3 接口访问

需要使用一个 python 程序来测试 s3 接口的访问,首先安装一个 python 包,名称为:python-boto:

yum -y install python-boto

创建一个名为 s3test.py 的文件,内容如下:

import boto.s3.connectionaccess_key = 'JV54B80DTZ8VQ2P4IYD4'
secret_key = 'GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2'
conn = boto.connect_s3(aws_access_key_id=access_key,aws_secret_access_key=secret_key,host='192.168.92.22', port=80,is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(),)bucket = conn.create_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():print "{name} {created}".format(name=bucket.name,created=bucket.creation_date,)

需要注意的是,要将程序中的 access_key 和 secret_key 修改为前面生成用户的相关信息。host 需要修改为 RGW 服务器的地址,port 修改为相应的端口。

执行这个 python 程序,会输出如下信息:

[root@ceph-admin ~]# python s3test.py
my-new-bucket 2020-07-27T10:30:40.473Z

这代表成功创建了一个 bucket。

4. 使用命令行工具访问 s3 接口

4.1 配置 s3cmd

在命令行中调用 s3 接口来管理对象存储,首先需要安装 s3cmd 软件包:

yum -y install s3cmd

安装完成后需要对 s3cmd 进行配置,配置过程如下:

[root@ceph-admin ~]# s3cmd --configureEnter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: JV54B80DTZ8VQ2P4IYD4                            # 设置访问用户的 Access Key
Secret Key: GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2        # 设置访问用户的 Secret Key
Default Region [US]: Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: 192.168.92.22:80            # 设置 RWG 的地址和端口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.92.22:80/%(bucket)s                                                  # 设置 bucket 的名称(可以将IP地址更换为域名)Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:                                        # 不设置密码
Path to GPG program [/usr/bin/gpg]:                         # 使用 gpg 加密When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]: no                                # 不使用 HTTPSOn some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:                                     # 不设置代理访问New settings:Access Key: JV54B80DTZ8VQ2P4IYD4Secret Key: GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2Default Region: USS3 Endpoint: 192.168.92.22:80DNS-style bucket+hostname:port template for accessing a bucket: 192.168.92.22:80/%(bucket)sEncryption password: Path to GPG program: /usr/bin/gpgUse HTTPS protocol: FalseHTTP Proxy server name: HTTP Proxy server port: 0Test access with supplied credentials? [Y/n] y             # 验证访问
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)Now verifying that encryption works...
Not configured. Never mind.Save settings? [y/N] y                                       # 保存配置
Configuration saved to '/root/.s3cfg'

配置完成后,配置文件存储在 /root/.s3cfg 文件中,需要将该文件中的 signature_v2 配置项改为 True,否则在后续执行命令的时候会触发 ERROR: S3 error: 403 (SignatureDoesNotMatch) 报错:

signature_v2 = True

保存退出后,就可以使用 s3cmd 命令来管理对象存储,首先使用如下命令查看当前的 bucket:

[root@ceph-admin ~]# s3cmd ls
2020-07-27 10:30  s3://my-new-bucket

创建一个新的 bucket:

[root@ceph-admin ~]# s3cmd mb s3://ops-s3-demo
Bucket 's3://ops-s3-demo/' created[root@ceph-admin ~]# s3cmd ls
2020-07-27 10:30  s3://my-new-bucket
2020-07-28 02:20  s3://ops-s3-demo
4.2 上传文件

将本地的 /etc/fstab 文件上传到对象存储中,并将存储的名称修改为 fstab-demo:

[root@ceph-admin ~]# s3cmd put /etc/fstab s3://ops-s3-demo/fstab-demo
upload: '/etc/fstab' -> 's3://ops-s3-demo/fstab-demo'  [1 of 1]465 of 465   100% in    1s   266.57 B/s  done

如果上传文件时出现报错信息:ERROR: S3 error: 416 (InvalidRange),可按照如下步骤进行处理:

  1. 查看 RGW 服务器的日志文件,路径为:/var/log/ceph/ceph-client.rgw.${hostname}.log
  2. 由于上传的文件是小文件,所以一般情况下触发这个报错的日志是如下内容:
rgw_init_ioctx ERROR: librados::Rados::pool_create returned (34) Numerical result out of range (this can be due to a pool or placement group misconfiguration, e.g. pg_num < pgp_num or mon_max_pg_per_osd exceeded)
  1. 这个是由于 pg 数量不足导致的,到 ceph-admin 节点的 /opt/ops-ceph-cluster 目录下,修改 ceph.conf 文件,在 [global] 下面添加一行:mon_max_pg_per_osd = 1000
[global]
fsid = f52099ba-cec0-4c77-bd92-3a21ad224be3
public_network = 192.168.92.0/24
cluster_network = 192.168.92.0/24
mon_initial_members = ceph-node1
mon_host = 192.168.92.22
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
mon_max_pg_per_osd = 1000[client.rgw.ceph-node1]
rgw_frontends = "civetweb port=80"
  1. 将修改后的配置文件下发给各个节点:
ceph-deploy --overwrite-conf config push ceph-admin ceph-node1 ceph-node2 ceph-node3
  1. 重启各个节点的 mon 和 mgr 服务:
systemctl restart ceph-mgr@ceph-node1
systemctl restart ceph-mon@ceph-node1
systemctl restart ceph-mgr@ceph-node2
systemctl restart ceph-mon@ceph-node2
systemctl restart ceph-mgr@ceph-node3
systemctl restart ceph-mon@ceph-node3

配置完成后即可实现文件上传。文件上传后使用如下命令查看 bucket 中的文件:

[root@ceph-admin ~]# s3cmd ls s3://ops-s3-demo
2020-07-28 02:37          465  s3://ops-s3-demo/fstab-demo
4.3 上传目录

将本地的 /opt 目录上传到 bucket 中,命令如下:

s3cmd put /opt/ s3://ops-s3-demo/opt/ --recursive

查看 bucket 中的目录:

[root@ceph-admin ~]# s3cmd ls s3://ops-s3-demoDIR  s3://ops-s3-demo/opt/
2020-07-28 02:37          465  s3://ops-s3-demo/fstab-demo[root@ceph-admin ~]# s3cmd ls s3://ops-s3-demo/opt/DIR  s3://ops-s3-demo/opt/ops-ceph-cluster/[root@ceph-admin ~]# s3cmd ls s3://ops-s3-demo/opt/ops-ceph-cluster/
2020-07-28 02:49       109928  s3://ops-s3-demo/opt/ops-ceph-cluster/ceph-deploy-ceph.log
2020-07-28 02:49          113  s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.bootstrap-mds.keyring
2020-07-28 02:49          113  s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.bootstrap-mgr.keyring
2020-07-28 02:49          113  s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.bootstrap-osd.keyring
2020-07-28 02:49          113  s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.bootstrap-rgw.keyring
2020-07-28 02:49          151  s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.client.admin.keyring
2020-07-28 02:49          353  s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.conf
2020-07-28 02:49           73  s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.mon.keyring
4.3 下载文件

将 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.conf 文件下载到本地,并重命名为 ceph.conf-download,命令如下:

s3cmd get s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.conf ceph.conf-download
4.4 删除文件

将 s3://ops-s3-demo/fstab-demo 文件删除,命令如下:

 s3cmd rm s3://ops-s3-demo/fstab-demo
4.5 删除目录

将 s3://ops-s3-demo/opt/ 目录删除,命令如下:

s3cmd rm s3://ops-s3-demo/opt/ --recursive

5. 查看资源池信息

此时查看资源池信息,会发现资源池中多了几个与 rgw 相关的资源池:

[root@ceph-admin ~]# ceph osd lspools
1 ops-pool
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

其中 2 3 4 5 是之前创建 RGW 后就自动生成的,而 6 是在调用 s3 接口创建 bucket 后生成的。7 是在调用接口上传文件后生成的,由于刚才已经将删除的文件删除,所以 default.rgw.buckets.data 当前没有数据。现在重新上传一个文件进行测试,例如将 /etc/fstab 文件上传到 bucket:

[root@ceph-admin ~]# s3cmd put /etc/fstab s3://ops-s3-demo/fstab
upload: '/etc/fstab' -> 's3://ops-s3-demo/fstab'  [1 of 1]465 of 465   100% in    0s     7.27 KB/s  done

此时查看一下资源池 default.rgw.buckets.data 中的信息:

[root@ceph-admin ~]# rados -p default.rgw.buckets.data ls
9ad04f74-dd9d-4dac-abdd-77bf20241f53.4818.3_fstab

可以看到有一个以 index + fstab 的数据,实际上刚才上传的 fstab 文件就是存储在这个资源池里,而这个数据前面的索引信息是存储在 default.rgw.buckets.index 资源池中:

[root@ceph-admin ~]# rados -p default.rgw.buckets.index ls
.dir.9ad04f74-dd9d-4dac-abdd-77bf20241f53.4818.1
.dir.9ad04f74-dd9d-4dac-abdd-77bf20241f53.4818.3

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109535925,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

6. 创建 Swift 风格的用户

创建 Swift 风格的用户需要基于已经创建用于访问 S3 接口的用户至上来实现,前面已经创建一个用户 ops-s3-user,所以基于这个用户的创建命令如下:

radosgw-admin subuser create --uid ops-s3-user --subuser=ops-s3-user:swift --access=full

命令执行完成后会输出以下信息:

{"user_id": "ops-s3-user","display_name": "Ops S3 User Demo","email": "","suspended": 0,"max_buckets": 1000,"subusers": [{"id": "ops-s3-user:swift","permissions": "full-control"}],"keys": [{"user": "ops-s3-user","access_key": "JV54B80DTZ8VQ2P4IYD4","secret_key": "GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2"}],"swift_keys": [{"user": "ops-s3-user:swift","secret_key": "ZHaXnUFfX0MOjpM925tCEfRRKeandVXDlo1V4bjM"}],"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_keys 中没有为 ops-s3-user:swift 用户生成 secret_key,可以手动为其生成一个,命令如下:

radosgw-admin key create --subuser=ops-s3-user:swift --key-type=swift --gen-secret

7. 使用 swift 方式访问

使用 swift 方式访问存储,首先需要提前安装好 swift 客户端,命令如下:

yum -y install python-setuptools python-pip
pip install --upgrade setuptools -i https://mirrors.aliyun.com/pypi/simple/
pip install --upgrade python-swiftclient -i https://mirrors.aliyun.com/pypi/simple/

使用 swift 命令查看 pool 中的 bucket:

swift -A http://192.168.92.22:80/auth -U ops-s3-user:swift -K ZHaXnUFfX0MOjpM925tCEfRRKeandVXDlo1V4bjM list

输入结果如下:

my-new-bucket
ops-s3-demo

查询结果与使用 s3 接口查询一致。但是上面的命令使用起来比较麻烦,swift 也支持使用环境变量的方式:

[root@ceph-admin ~]# swift list
Auth version 1.0 requires ST_AUTH, ST_USER, and ST_KEY environment variables
to be set or overridden with -A, -U, or -K.Auth version 2.0 requires OS_AUTH_URL, OS_USERNAME, OS_PASSWORD, and
OS_TENANT_NAME OS_TENANT_ID to be set or overridden with --os-auth-url,
--os-username, --os-password, --os-tenant-name or os-tenant-id. Note:
adding "-V 2" is necessary for this.

从帮助信息中可以看到,Auth version 1.0 版本可以设置 ST_AUTH, ST_USER, ST_KEY 环境变量来使用:

export ST_AUTH=http://192.168.92.22:80/auth
export ST_USER=ops-s3-user:swift
export ST_KEY=ZHaXnUFfX0MOjpM925tCEfRRKeandVXDlo1V4bjM

这样就可以直接使用 swift 指令:

[root@ceph-admin ~]# swift list
my-new-bucket
ops-s3-demo
7.1 创建 bucket

使用 swift 命令在 pool 中创建 bucket,命令如下:

swift post swift-demo

查看当前有哪些 bucket:

[root@ceph-admin ~]# swift list
my-new-bucket
ops-s3-demo
swift-demo
7.2 上传文件

将 /etc/passwd 文件上传到 swift-demo 中,命令如下:

swift upload swift-demo /etc/passwd
7.3 上传目录

将 /opt 目录上传到 swift-demo 中,命令如下:

swift upload swift-demo /opt/
7.4 查看 bucket 中的文件
[root@ceph-admin ~]# swift list swift-demo
etc/passwd
opt/ops-ceph-cluster/ceph-deploy-ceph.log
opt/ops-ceph-cluster/ceph.bootstrap-mds.keyring
opt/ops-ceph-cluster/ceph.bootstrap-mgr.keyring
opt/ops-ceph-cluster/ceph.bootstrap-osd.keyring
opt/ops-ceph-cluster/ceph.bootstrap-rgw.keyring
opt/ops-ceph-cluster/ceph.client.admin.keyring
opt/ops-ceph-cluster/ceph.conf
opt/ops-ceph-cluster/ceph.mon.keyring
7.5 下载文件

将 passwd 文件下载到本地:

swift download swift-demo etc/passwd

七、创建 Ceph FS 文件存储

1. 部署 MDS

首先在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录中执行如下命令,在 ceph-node1 节点中部署 MDS服务:

ceph-deploy --overwrite-conf mds create ceph-node1

部署完成后查看集群信息,可以看到有一个 mds 节点是 up 状态:

[root@ceph-admin ops-ceph-cluster]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_OKservices:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 4h)mgr: ceph-node1(active, since 4h), standbys: ceph-node2, ceph-node3mds:  1 up:standbyosd: 3 osds: 3 up (since 23h), 3 in (since 23h)rgw: 1 daemon active (ceph-node1)task status:data:pools:   7 pools, 320 pgsobjects: 295 objects, 143 MiBusage:   3.3 GiB used, 57 GiB / 60 GiB availpgs:     320 active+clean

2. 扩容 MDS

在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录中执行如下命令,将另外两个节点服务器中部署 MDS 服务:

    ceph-deploy --overwrite-conf mds create ceph-node2ceph-deploy --overwrite-conf mds create ceph-node3

再次查看集群状态,可以看到三个节点均为 standby 状态,这是由于当前还未创建文件系统的原因:

[root@ceph-admin ops-ceph-cluster]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_OKservices:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 4h)mgr: ceph-node1(active, since 4h), standbys: ceph-node2, ceph-node3mds:  3 up:standbyosd: 3 osds: 3 up (since 23h), 3 in (since 23h)rgw: 1 daemon active (ceph-node1)task status:data:pools:   7 pools, 320 pgsobjects: 295 objects, 143 MiBusage:   3.3 GiB used, 57 GiB / 60 GiB availpgs:     320 active+clean

也可以使用如下命令查看 mds 的状态:

[root@ceph-admin ops-ceph-cluster]# ceph mds stat3 up:standby

3. 创建文件系统

创建文件系统之前需要创建两个 pool,其中一个用于存放数据,另一个用于存放元数据(pg 和 pgp 数量均设为 16):

ceph osd pool create cephfs_metadata 16 16
ceph osd pool create cephfs_data 16 16

接下来创建一个文件系统,并制定数据 pool 和元数据 pool,这样可以将两个 pool 与文件系统进行关联:

ceph fs new cephfs-demo cephfs_metadata cephfs_data

查看当前已有的文件系统:

[root@ceph-admin ~]# ceph fs ls
name: cephfs-demo, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

查看当前的集群状态信息,可以看到有一个 mds 为 up 状态,另外两个 mds 为 standby 状态:

[root@ceph-admin ~]# ceph -scluster:id:     f52099ba-cec0-4c77-bd92-3a21ad224be3health: HEALTH_OKservices:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 4h)mgr: ceph-node1(active, since 4h), standbys: ceph-node2, ceph-node3mds: cephfs-demo:1 {0=ceph-node1=up:active} 2 up:standbyosd: 3 osds: 3 up (since 23h), 3 in (since 23h)rgw: 1 daemon active (ceph-node1)task status:scrub status:mds.ceph-node1: idledata:pools:   9 pools, 352 pgsobjects: 317 objects, 143 MiBusage:   3.3 GiB used, 57 GiB / 60 GiB availpgs:     352 active+clean

4. 使用内核驱动挂载文件系统

首先在需要挂载文件系统的机器上创建一个挂载点,这里选择挂载到 /media 目录下,挂载的机器中需要安装 ceph-common 软件包。使用如下命令进行挂载:

mount -t ceph 192.168.92.22:6789,192.168.92.23:6789,192.168.92.24:6789:/ /media -o name=admin

查看挂载信息:

[root@ceph-admin ~]# df -Th /media
文件系统             类型  容量  已用  可用 已用% 挂载点
192.168.92.22:6789:/ ceph   18G     0   18G    0% /media

此时文件系统就可以正常使用了,并且支持多个机器同时挂载,达到数据共享的目的:

[root@ceph-admin media]# echo "This is a message" > testfile
[root@ceph-admin media]# ll
总用量 1
-rw-r--r-- 1 root root 18 7月  28 15:08 testfile

查看当前的内核信息,可以看到文件系统挂载后,是自动将模块加载到内核中:

[root@ceph-admin ~]# lsmod | grep ceph
ceph                  358802  1

5. 使用用户控件挂载文件系统

如果内核版本不支持加载 ceph 模块,可以使用用户空间的挂载方式,首先需要安装 ceph-fuse 软件包:

yum -y install ceph-fuse

安装完成后,开始进行挂载。在挂载之前首先将已经挂载的文件系统 umount。然后使用如下命令再次挂载到 /media 目录下:

ceph-fuse -n client.admin -m 192.168.92.22:6789,192.168.92.23:6789,192.168.92.24:6789 /media

命令中指定了三个 mon 的地址,这是为了确保一个 mon 挂掉了,还可以通过另外两个 mon 查询到信息。如果不指定 mon 的话,ceph-fuse 也会默认自动到 /etc/ceph/ceph.conf 配置文件中查找 mon 信息。

查看挂载状态:

[root@ceph-admin ~]# df -Th /media
文件系统       类型              容量  已用  可用   已用%  挂载点
ceph-fuse     fuse.ceph-fuse   18G     0   18G    0%   /media

在 /media 目录下可以看到之前写入的文件和内容:

[root@ceph-admin ~]# ll /media/
总用量 1
-rw-r--r--. 1 root root 18 7月  28 15:08 testfile[root@ceph-admin ~]# cat /media/testfile
This is a message

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109535925,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

CentOS 7 搭建 Ceph 集群(nautilus 版本)相关推荐

  1. 使用Docker搭建ceph群集(nautilus版本)

    使用Docker搭建ceph群集(nautilus版本) 一.ceph简介 概述 Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统.Ceph是一个开源的分布式文件系统.因为它 ...

  2. K8s上使用rook搭建Ceph集群

    目录 准备工作 一.安装kubectl 二:win10 安装Docker Desktop for Windows(非必须) 三.Harbor 知识补充: 1.Ceph mgr和mon 2:Ceph 中 ...

  3. cephadm搭建ceph集群

    **前言:**2022年7月26日,使用cephadm进行ceph集群的搭建,使用ceph octopus版本,v15.2.16. 一.cephadm简介 Cephadm通过manager daemo ...

  4. CentOS下搭建Zookeeper集群

    Zookeeper简介 ZooKeeper是一个开源的分布式应用协调服务,用于在分布式应用各个节点之间进行协调,并通过稳健的同步技术维护共享数据. 这里提到了一个新名词:"分布式应用&quo ...

  5. 在centos上搭建redis集群并附测试(真集群非伪集群)

    环境:centos6.5 x86 32位 redis3.2.8 ruby-2.2.3 一. redis集群原理 redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了 ...

  6. Kubernetes 搭建 ES 集群(存储使用 local pv)

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  7. 第二篇:Ceph集群环境准备

    第一篇简单介绍了Ceph的架构,让我们对Ceph有了一个初步的印象. 接下来,我将在MAC上介绍如何基于本机搭建ceph集群及cephfs.cephrgw.cephrbd服务. 集群规划: 生产环境 ...

  8. 利用docker搭建服务器集群并部署大数据生态软件

    1.集群搭建与配置 本来想使用centos镜像搭建服务器集群,但最小化安装版的镜像也需要1G左右,如果后面再部署一些大数据软件,单是多台服务器环境部署就会占用大量空间,加上此版本镜像在不同电脑环境的安 ...

  9. 玩转Docker Ceph集群及对象存储

    为什么80%的码农都做不了架构师?>>>    [编者按]Ceph是一种集高性能.高可靠性和高可扩展性为一体的统一的.分布式的存储系统."统一的"意味着Ceph可 ...

最新文章

  1. 为什么c语言编译器闪屏,C语言贪吃蛇闪屏问题,求大神!!!
  2. Windows7中快捷方式图标打开方式恢复
  3. 【错误记录】Google Play 上架报错 ( APK 大小 | 目标 API 级别 | Google Play 帮助文档 )
  4. Ajax同步调用 异步排序
  5. b树与b+树的区别_面试必考:B树、B树、B+树、B*树图文详解
  6. webgl 基础渲染demo_WebGL + ThreeJS 实现实时水下焦散 Part 1
  7. python切片原理_分析python切片原理和方法
  8. 虚函数和虚析构函数的实现原理--虚函数表
  9. HDU 1010 -Tempter of the Bone(深度搜索)
  10. Arduino ISP下载接口
  11. 菜鸟使用mock.js心得
  12. 从一名开发人员转做测试的一些感悟
  13. Linux用RPM安装vsftpd,Linux通过RPM方式安装vsftpd
  14. 中信转型Carry全场 用友云助攻共享采购平台
  15. 关于图像显著性(MR)matlab代码详解
  16. 海思HI3516板子初体验
  17. 使用SQLyog将Excel数据导入mysql数据库
  18. venue 11 pro 刷linux,普通用户关心的JingOS问题解答,由JingOS开发人员作答
  19. 企业网络安全|监控解决方案
  20. 一次kong概念验证之旅

热门文章

  1. 消息消费轨迹存储效率优化
  2. 正则表达式 —— 一种模式描述语言(贪婪匹配与惰性匹配)
  3. 栈的典型应用 —— 逆序输出
  4. goto 语句和标号
  5. Python 数据结构与算法 —— Kruskal 算法
  6. 搜索——二分搜索实现及细节
  7. open表和closed表_什么是左外连接?左外连接在工作表查询中的应用
  8. react ui框架_Web开发 React 学习(二十)连载基础篇大结局
  9. Adapter中notify(),notifyAll(),notifyDataSetChanged(),notifyDataSetInvalidaded()方法的区别
  10. python代码-20个Python代码段,你需要立刻学会,好用到哭!