01. 개요
Ceph로 "Block Storage"와 "Filesystem", "Object Storage" 등을 구성하는 방법에 대해서 설명합니다.
02. 노드 구성
Ceph는 주요 노드인 "MDS(Metadata Server)", "MON(Monitor)", "OSD(Object Storage Daemon)"과 Dashboard를 제공하는 "MGR(Manager)" 노드로 구성됩니다. 추가로 관리 및 배포를 담당하는 Admin(or Deploy) 노드를 별도 구성할 수 있습니다. "MGR" 노드를 별도 구성할 필요가 없다면 "MON" 노드와 같은 서버에 구성할 수 있습니다만, "MGR" 노드를 별도 구성하고 Cacti와 같은 NMS 툴을 같이 운용하면 "MGR" 노드의 Dashboard가 제공하는 부족한 부분을 보완할 수도 있습니다.
03. 구성 노드를 표현한 간단한 다이어그램
아래 그림은 "Ceph document"에 공개되어 있는 자료에 약간의 내용을 첨가하였습니다. 주요한 내용은 "Block Storage"와 "Filesystem", "Object Storage"에 사용되는 클라이언트와 "MDS/MON/OSD" 노드간의 관계입니다.
04. 설치 환경
SRV : VM (VirtualBox)
OS : CentOS 7
CEPH : Luminous 12.2.10
Node : MDS(1ea), MGR+MON(1ea), OSD(4ea), Admin(1ea)
05. 노드 정보
Node | Port | Hostname |
Public network | Cluster network | Descriptions |
OSD | 6800:7300 | node1 |
192.168.57.111 | 192.168.58.111 | OSD x 4ea |
node2 |
192.168.57.112 | 192.168.58.112 | OSD x 4ea |
||
node3 | 192.168.57.113 | 192.168.58.113 | OSD x 4ea | ||
node4 | 192.168.57.114 | 192.168.58.114 | OSD x 4ea | ||
MDS | 6800 | node5 |
192.168.57.115 | - | - |
MON MGR | 6789 6800:7300 | node6 |
192.168.57.116 | - | - |
Admin Client | - - | node7 |
192.168.57.117 | - | Admin and Deploy |
데이터의 읽기/쓰기/수정 등의 작업으로 "Cluster network"에서 "Public network"와 준하거나 그 이상의 트래픽이 발생할 수 있습니다. 특히 Erasure Code로 구성하여 운용할 경우 "Cluster network"에서 발생 트래픽이 좀 더 많습니다(대략 30~50%↑). 안전하게 Ceph를 운용하기 위해서는 "Cluster network", "Public network"를 분리하는 것과 10G 환경으로 구성하는 것을 추천합니다.
06. 환경설정 - firewall & selinux
내/외부 서비스망이 잘 분리되어 굳이 파이어월 설정이 필요하지 안으면 아래와 같이 비활성화 시키고 다음 단계로 진행합니다. "Admin" 노드를 제외한 6대를 차례대로 비활성화 시킵니다. selinux 변경 값(비활성화)을 적용하기 위해서 OS를 재기동합니다.
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config;
[root@node1 ~]# reboot
...
...
...
[root@node6 ~]# systemctl stop firewalld
[root@node6 ~]# systemctl disable firewalld
[root@node6 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config;
[root@node6 ~]# reboot
그리나, 파이어월 설정이 필요한 경우는 "03. 노드 정보"를 참조, 포트를 아래와 같이 설정합니다. 파이어월 설정에서 사용하는 존은 기본설정인 "Public Zone" 입니다. selinux 변경 값(비활성화)을 적용하기 위해서 OS를 재기동합니다.
[root@node1 ~]# firewall-cmd --get-active-zone
public
interfaces: enp0s8 enp0s9
[root@node1 ~]# firewall-cmd --permanent --zone=public --add-port=6800-7300/tcp
[root@node1 ~]# firewall-cmd --reload
[root@node1 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config;
[root@node1 ~]# reboot
(after reboot)
[root@node1 ~]# firewall-cmd --permanent --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 6800-7300/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@node2 ~]# firewall-cmd --get-active-zone
public
interfaces: enp0s8 enp0s9
[root@node2 ~]# firewall-cmd --permanent --zone=public --add-port=6800-7300/tcp
[root@node2 ~]# firewall-cmd --reload
[root@node2 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config;
[root@node2 ~]# reboot
(after reboot)
[root@node2 ~]# firewall-cmd --permanent --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 6800-7300/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@node3 ~]# firewall-cmd --get-active-zone
public
interfaces: enp0s8 enp0s9
[root@node3 ~]# firewall-cmd --permanent --zone=public --add-port=6800-7300/tcp
[root@node3 ~]# firewall-cmd --reload
[root@node3 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config;
[root@node3 ~]# reboot
(after reboot)
[root@node3 ~]# firewall-cmd --permanent --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 6800-7300/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@node4 ~]# firewall-cmd --get-active-zone
public
interfaces: enp0s8 enp0s9
[root@node4 ~]# firewall-cmd --permanent --zone=public --add-port=6800-7300/tcp
[root@node4 ~]# firewall-cmd --reload
[root@node4 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config;
[root@node4 ~]# reboot
(after reboot)
[root@node4 ~]# firewall-cmd --permanent --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 6800-7300/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@node5 ~]# firewall-cmd --get-active-zone
public
interfaces: enp0s8
[root@node5 ~]# firewall-cmd --permanent --zone=public --add-port=6800/tcp
[root@node5 ~]# firewall-cmd --reload
[root@node5 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config;
[root@node5 ~]# reboot
(after reboot)
[root@node5 ~]# firewall-cmd --permanent --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 6800/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@node6 ~]# firewall-cmd --get-active-zone
public
interfaces: enp0s8
[root@node6 ~]# firewall-cmd --permanent --zone=public --add-port=6789/tcp
[root@node6 ~]# firewall-cmd --permanent --zone=public --add-port=6800-7300/tcp
[root@node6 ~]# firewall-cmd --reload
[root@node6 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config;
[root@node6 ~]# reboot
(after reboot)
[root@node6 ~]# firewall-cmd --permanent --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports: 6789/tcp 6800-7300/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
07. 환경설정 - 호스트 파일
아래와 같이 각 노드의 "/etc/hosts" 파일에 호스트 정보를 추가합니다.
[root@node1 ~]# echo -e "
192.168.57.111 node1
192.168.57.112 node2
192.168.57.113 node3
192.168.57.114 node4
192.168.57.115 node5
192.168.57.116 node6
192.168.57.117 node7" >> /etc/hosts
...
...
...
[root@node7 ~]# echo -e "
192.168.57.111 node1
192.168.57.112 node2
192.168.57.113 node3
192.168.57.114 node4
192.168.57.115 node5
192.168.57.116 node6
192.168.57.117 node7" >> /etc/hosts
CentOS 7은 서비스(데몬) 명이 ceph-mds@node1과 같은 형식으로 보여주므로, OS의 호스트네임과 "/etc/hosts" 파일의 호스트 정보를 동일하게 설정하는 것이 추후 서비스 제어에 혼동이 없습니다.
08. 환경설정 - Yum repository 추가
Admin와 Deploy 노드를 같은 서버로 사용하므로, 아래와 같이 "node7"에 "Yum repository" 정보를 추가합니다.
[root@node7 ~]# cat << EOM > /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-luminous/el7/x86_64
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-luminous/el7/SRPMS
enabled=0
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
EOM
09. 환경설정 - Ceph Account 생성
아래와 같이 Ceph의 각 노드에 설치 패키지 배포와 원격설정의 지원에 사용할 계정(cephuser)을 생성합니다.
[root@node1 ~]# useradd -d /home/cephuser -m cephuser
[root@node1 ~]# passwd cephuser
Changing password for user cephuser.
New password: **********
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: **********
passwd: all authentication tokens updated successfully.
[root@node1 ~]# echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
[root@node1 ~]# chmod 0440 /etc/sudoers.d/cephuser
...
...
...
[root@node7 ~]# useradd -d /home/cephuser -m cephuser
[root@node7 ~]# passwd cephuser
Changing password for user cephuser.
New password: **********
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: **********
passwd: all authentication tokens updated successfully.
[root@node7 ~]# echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
[root@node7 ~]# chmod 0440 /etc/sudoers.d/cephuser
10. 환경설정 - ssh key 생성
"node7"에서 각 노드("node1~node6")로 터널링을 설정하기 위해 필요한 "ssh key"를 생성합니다.
[root@node7 ~]# su - cephuser
[cephuser@node7 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cephuser/.ssh/id_rsa):
Created directory '/home/cephuser/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/cephuser/.ssh/id_rsa.
Your public key has been saved in /home/cephuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:EuaR9T8v1d6AHQKetsn6iHzjUhBSiRIHuMzv/8L02w4 cephuser@node7
The key's randomart image is:
+---[RSA 2048]----+
| .oo.o... . |
|. ..o oo o o |
|o. . .=. = . . |
|.o o.o o + + o |
| . o.S + + + .|
| . . ... + o.|
| . o .E. . . o|
| . +.o=o . |
| ..=*=+. |
+----[SHA256]-----+
11. 환경설정 - SSH 접속 환경설정
아래와 같이 ssh 접속에 필요한 내용을 파일로 저장해 놓으면, ssh 접속을 좀 더 편리하게 사용할 수 있습니다. 디폴트 포트를 사용중이라면 아래 내용 중에서 "Port 22"를 삭제하여도 무방합니다.
[cephuser@node7 ~]$ cat << EOM > ~/.ssh/config
Host node1
Hostname node1
User cephuser
Port 22
Host node2
Hostname node2
User cephuser
Port 22
Host node3
Hostname node3
User cephuser
Port 22
Host node4
Hostname node4
User cephuser
Port 22
Host node5
Hostname node5
User cephuser
Port 22
Host node6
Hostname node6
User cephuser
Port 22
Host node7
Hostname node7
User cephuser
Port 22
EOM
[cephuser@node7 ~]$ chmod 0400 ~/.ssh/config
12. 환경설정 - ssh key 배포
[cephuser@node7 ceph-deploy]$ ceph-deploy mon create-initial
18. 설치 - ceph.client.admin.keyring 배포
[cephuser@node7 ceph-deploy]$ ceph-deploy admin node1 node2 node3 node4 node5 node6 node7
19. 설치 - MGR 노드를 생성
[cephuser@node7 ceph-deploy]$ ceph-deploy mgr create node6
20. 설치 - OSD 노드에 OSD를 생성
스토리지 백엔드는 기본값인 "bluestore"로 설치됩니다.
[cephuser@node7 ceph-deploy]$ for node in {node1,node2,node3,node4}; do
> ceph-deploy osd create --data /dev/sdb $node;
> ceph-deploy osd create --data /dev/sdc $node;
> ceph-deploy osd create --data /dev/sdd $node;
> ceph-deploy osd create --data /dev/sde $node;
> ceph-deploy osd create --data /dev/sdf $node;
> done
위와 같이 OSD를 생성하면 Storage backend가 기본값인 Bluestore(기본값)로 설치됩니다.
21. 설치 - MDS 노드를 생성
[cephuser@node7 ceph-deploy]$ ceph-deploy mds create node5
22. 설치 - 클러스터 상태 확인
[cephuser@node7 ceph-deploy]$ sudo ceph -s
cluster:
id: 23ed16ce-2501-4714-a13f-73686b94d8e2
health: HEALTH_OK
services:
mon: 1 daemons, quorum node6
mgr: node6(active)
osd: 20 osds: 20 up, 20 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0B
usage: 20.2GiB used, 180GiB / 200GiB avail
pgs:
23. 설치 - Pool 생성
"cephfs_data"라는 이름의 실제 데이터가 저장되는 풀과 "ceph_metadata"라는 이름의 메타데이터가 저장되는 풀을 생성합니다. 다음으로 "333"이라는 숫자는 "pg_num"이며, 생성하는 풀에 "Placement Group"을 지정한 숫자만큼 할당하겠다는 의미입니다.
"333"이라는 숫자를 계산하는 방법은 아래와 같습니다. (전체적인 내용은 Ceph document를 참고합니다)
전체 PG = (OSD(HDD) 숫자) x 100 / 리플리케이션 레벨
(예제) OSD(HDD) : 20ea, Replication : 3
>> 20 x 100 / 3 = 666 (소수 값은 제외)
(위 예제는 OSD당 할당되는 PG수를 100전후로 설정하는 것을 목표로 합니다)
[cephuser@node7 ceph-deploy]$ sudo ceph osd pool create cephfs_data 333
pool 'cephfs_data' created
[cephuser@node7 ceph-deploy]$ sudo ceph osd pool create cephfs_metadata 333
pool 'cephfs_metadata' created
※ PG(Placement Group)에 대해서 알아보기
PG는 Ceph에서 중요한 개념이므로 간단히 설명하겠습니다. Ceph에 마운트한 Client(보통은 서버겠죠)에서 파일을 저장(업로드)하면, 파일은 오브젝트 단위로 쪼개져서 풀에 저장됩니다. 오브젝트가 풀에 저장되는 과정을 조금 자세히 들여다보면, 아래 그림과 같이 실제 데이터는 오브젝트 단위로 쪼개져서 각각의 OSD(HDD)에 할당된 PG에 저장되며, 이러한 이유로 Ceph에서는 PG 관리(생성 및 리웨이트)가 중요합니다.
24. 설치 - FS(Filesystem) 생성
[cephuser@node7 ceph-deploy]$ sudo ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
25. 설치 - 클러스터와 생성된 FS 상태 확인, 각 OSD에 할당된 PG 숫자 확인
[cephuser@node7 ceph-deploy]$ sudo ceph -s
cluster:
id: 23ed16ce-2501-4714-a13f-73686b94d8e2
health: HEALTH_OK
services:
mon: 1 daemons, quorum node6
mgr: node6(active)
mds: cephfs-1/1/1 up {0=node5=up:active}
osd: 20 osds: 20 up, 20 in
data:
pools: 2 pools, 666 pgs
objects: 21 objects, 2.19KiB
usage: 20.2GiB used, 180GiB / 200GiB avail
pgs: 666 active+clean
[cephuser@node7 ceph-deploy]$ sudo ceph osd df
ID CLASS WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
0 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 103
1 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 104
2 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 100
3 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 94
4 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 102
5 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 107
6 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 89
7 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 101
8 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 91
9 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 94
10 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 108
11 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 98
12 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 112
13 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 117
14 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 92
15 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 86
16 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 88
17 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 115
18 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 101
19 hdd 0.00980 1.00000 10.0GiB 1.01GiB 8.99GiB 10.11 1.00 96
TOTAL 200GiB 20.2GiB 180GiB 10.11
MIN/MAX VAR: 1.00/1.00 STDDEV: 0
26. 마운트
"node7"에서 생성한 FS를 마운트해 보겠습니다. FS를 마운트하기위해서는 패키지(ceph-common)가 설치되어 있어야 하며, 앞선 설치 과정에서 "node7"에도 해당 패키지를 설치하였으므로, 바로 마운트 테스트를 해보겠습니다.
마운트하기 전에 현재 마운트 상태와 해당 패키지가 설치되어 있는지 확인합니다.
[cephuser@node7 ceph-deploy]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 1.7G 16G 10% /
devtmpfs 989M 0 989M 0% /dev
tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs 1000M 8.5M 992M 1% /run
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/sda1 497M 198M 299M 40% /boot
tmpfs 200M 0 200M 0% /run/user/0
[cephuser@node7 ceph-deploy]$ rpm -qa | grep ceph-common
ceph-common-12.2.10-0.el7.x86_64
마운트할 폴더를 생성합니다.
[cephuser@node7 ceph-deploy]$ sudo mkdir /mnt/ceph
마운트에 필요한 보안키 정보를 확인합니다.
[cephuser@node7 ceph-deploy]$ cat ceph.client.admin.keyring
[client.admin]
key = AQCN1iVcZnf7NxAAZc7ftTBB4KEwPaMLn7yfLw==
이어서 마운트합니다.
[cephuser@node7 ceph-deploy]$ sudo mount -t ceph node6:/ /mnt/ceph -o name=admin,secret=AQCN1iVcZnf7NxAAZc7ftTBB4KEwPaMLn7yfLw==
[cephuser@node7 ceph-deploy]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 1.7G 16G 10% /
devtmpfs 989M 0 989M 0% /dev
tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs 1000M 8.5M 992M 1% /run
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/sda1 497M 198M 299M 40% /boot
tmpfs 200M 0 200M 0% /run/user/0
192.168.57.116:/ 57G 0 57G 0% /mnt/ceph
마운트된 폴더의 퍼미션을 조정후, 마운트된 폴더로 이동하여 실제 폴더와 파일을 생성해 봅니다.
[cephuser@node7 ceph-deploy]$ sudo chown cephuser.cephuser /mnt/ceph
[cephuser@node7 ceph-deploy]$ ls -al /mnt
total 4
drwxr-xr-x. 3 root root 17 Jan 8 10:31 .
dr-xr-xr-x. 17 root root 4096 Jul 19 09:02 ..
drwxr-xr-x 1 cephuser cephuser 0 Dec 28 16:59 ceph
[cephuser@node7 ceph-deploy]$ cd /mnt/ceph
[cephuser@node7 ceph]$ mkdir test
[cephuser@node7 ceph]$ touch test.txt
[cephuser@node7 ceph]$ ls -al
total 0
drwxr-xr-x 1 cephuser cephuser 2 Jan 8 10:41 .
drwxr-xr-x. 3 root root 17 Jan 8 10:31 ..
drwxrwxr-x 1 cephuser cephuser 0 Jan 8 10:37 test
-rw-rw-r-- 1 cephuser cephuser 0 Jan 8 10:41 test.txt
부팅이후에도 자동으로 마운트하려면, 현장상황에 맞추어 "/etc/fstab" 마운트 설정을 추가합니다.
[cephuser@node7 ceph]$ cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Jul 18 16:14:20 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=a974c27c-1544-4de0-bb0b-75feddc30301 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
node6:/ /mnt/ceph ceph name=admin,secret=AQCN1iVcZnf7NxAAZc7ftTBB4KEwPaMLn7yfLw==,noatime,_netdev 0 2
테스트에서는 MON 노드를 1대만 설정하였습니다만 현장에서는 서비스 안정성을 고려하여 3/5/7 순으로, MDS도 다중으로 운용합니다.
읽어 주셔서 감사합니다.
'Storage > CEPH' 카테고리의 다른 글
CEPH - 설치2 (Filesystem, Erasure Code) (0) | 2018.11.19 |
---|