다음은 GlusterFS 설치 관련하여 내용입니다.
각각의 환경 정보에 맞추어서 설치하는 것이 중요합니다.
시스템 구성도
환경 정보
Package | Item |
OS | CentOS-7-x86_64-Everything-1908.iso |
Kernel | kernel-3.10.0-1062.el7.x86_64 |
GlusterFS | glusterfs-6.10-1.el7.x86_64 |
글러스터의 구성 및 설정은 기본적으로 root 계정 사용을 권고한다. 그러므로 설치민 진행을 위해서는 root 계정으로 진행하여야 하며, 또한 노드에 설치할 Packages와 OS는 동일한 버전을 사용하는것을 권고하므로 동일한 버전 을 사용하여 구성한다.
Pre-Requisties
-
모든 노드(gnode1 - gnode6)에 환경정보에서 정의한 버젼의 OS를 설치
-
모든 노드에 Hostname 등록
example )
gnode1 에서 설정할때,
# hostnamectl set-hostname gnode1
# hostname
gnode1
-
DNS 서버가 따로 존재하지 않을경우, 모든 노드에 Hostname을 통해 IP 주소를 알수 있도록 hosts 파일 설정.
DNS 서버가 따로 존재하지 하는 경우 이 단계는 생략가능
example )
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.61 gnode1
192.168.0.62 gnode2
192.168.0.63 gnode3
192.168.0.64 gnode4
192.168.0.65 gnode5
192.168.0.66 gnode6
-
글러스터 서버노드들은 고정 아이피 사용하는것을 권고한다. 그러므로 모든 노드(gnode1 - gnode6)의 네트워크를 고정 IP(static) 네트워크를 사용하도록 설정한다.
example )
gnode1 에서 설정할때,
# cat ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=192.168.0.61
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
# ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=32.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=32.0 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=31.6 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 31.633/31.887/32.018/0.231 ms
-
Repository 설정
-
외부 네트워크를 사용하는 경우, GlusterFS 관련 패키지 설치를 위해 centos-release-gluster를 설치해야한다.
# yum install centos-release-gluster
내부 네트워크를 사용하여 패키지를 받을수 없는 경우 ISO를 사용하거나 Repository를 따로 구성해야 합니다. (이에 대 한 내용은 향후 업데이트 예정)
-
- 패스워드를 사용하지 않고도 SSH 접속할 수 있도록 공개키 생성.
글러스터 peer 등록의 과정을 수행할 노드에서 ssh-keygen 명령을 사용하여 키를 생성한다.
테스트 환경에서는 gnode1에서 수행할 예정으므로 gnode1에서 아래 명령어를 수행한다.
#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:nIZOWnurLujYAWGmFrPAGnwS3JwEpGSOiTKTV11x4KA root@gnode1
The key's randomart image is:
+---[RSA 2048]----+
|o*=.o...+o. |
|X+.= ..o . |
|&X..E . |
|B** o . |
|+o + S |
|.. = o |
| ... o . |
| o... . . |
|..o oo.. |
+----[SHA256]-----+
-
ssh 동작시 패스워드 입력을 생략하기 위해 생성된 공개키를 다른 GlusterFS노드들(gnode1 - gnode6) 에 등록
gnode1에서 아래 명령어를 수행한다.
#ssh-copy-id gnode1
…
#ssh-copy-id gnode6
-
글러스터의 정상적인 동작을 위해 모든 GlusterFS 노드들(gnode1 - gnode6)에 다음 명령어를 참고하여 방화벽과 SELINUX 해지한다. (방화벽 과 SELINUX 설정에 방법에 대한 부분은 향후 업데이트 예정)
#setenforce 0
# cat /etc/selinux/config
...
SELINUX=disabled
SELINUXTYPE=targeted
…
# systemctl stop firewalld
# systemctl disable firewalld
위 설정 후, 노드를 재부팅하여 위 설정이 정상적으로 적용되었는지 확인하여야 한다.
Brick 구성을 위한 설정
파티션 할당
일반적으로 fdisk 명령을 통해 파티션을 할당하면 되지만 2TB 이상은 할당되지 않는다. 2TB 이하와 이상의 설정 방법이 다르므로 참고하기 바란다.
- 파티션 할당이 2TB 이하일 경우
- 파티션 할당이 2TB 이상일 경우
LVM 생성
Gluster의 SNAPSHOT 기능 이나 안정적인 동작을 위해서는 LVM을 구성하여야 한다. 하지만 단순 NAS나 Gluster의 다른 기능을 사용할 계획이 없다면 LVM 구성은 생략하여도 무방하다.
각 노드에서 brick를 위해 LVM 생성을 할경우 아래 예제를 참고하여 생성하면 된다.
생성은 모든 노드의 brick들에서 수행해야 한다.
example)
#pvcreate --dataalignment 1280k /dev/sdb
#vgcreate --physicalextentsize 128k rhs_vg /dev/sdb
(전체 디스크가 20기가이고 이중 640M은 메타데이터 저장용, 나머지 18기가는 데이터 저장용으로 구성한다고 할때 가정이다.. 필요에 맞게 아래 사이즈만 변경하면 된다.)
#lvcreate -L 655350K --name rhs_pool_meta rhs_vg
#lvcreate -L 18874368K --name rhs_pool rhs_vg (18G 로 디스크 용량을 설정할때)
#lvconvert --chunksize 1280k --thinpool rhs_vg/rhs_pool --poolmetadata rhs_vg/rhs_pool_meta
#lvdisplay
#lvcreate -V 18G -T rhs_vg/rhs_pool -n rhs_lv
- XFS 파일 시스템 생성
글러스터는 여러 BaseFilesystem 을 지원하지만 Centos/RHEL 에서는 XFS 사용을 기본적으로 권고하고 있다.
아래 예제를 참고하여 모든 노드들의 brick들에서 XFS 파일 시스템 생성을 수행 한다.
example)
#mkfs.xfs -f -i size=512 -n size=8192 /dev/rhs_vg/rhs_lv
- 마운트
아래 예제를 참고하여 각 노드들의 brick들이 부팅시 자동으로 마운트 할수있도록 아래 과정을 수행 한다.
example)
#mkdir /brick
#cat /etc/fstab
..
/dev/rhs_vg/rhs_lv /brick xfs rw,inode64,noatime,nouuid 1 2
#mount -a
GlusterFS 설치
-
전체 Gluster 노드들에 아래 명령어를 수행하여 Packages를 설치
yum install glusterfs* gluster-cli glusterfs-libs glusterfs-server
-
Packages 설치 확인
Gluster의 기능을 동작시키기 위해 아래 Package 중에 누락되어진 패키지가 있으면 안된다.
# rpm -qa | grep glusterfs
glusterfs-api-6.10-1.el7.x86_64
glusterfs-libs-6.10-1.el7.x86_64
glusterfs-client-xlators-6.10-1.el7.x86_64
glusterfs-fuse-6.10-1.el7.x86_64
glusterfs-rdma-6.10-1.el7.x86_64
glusterfs-6.10-1.el7.x86_64
glusterfs-cli-6.10-1.el7.x86_64
glusterfs-server-6.10-1.el7.x86_64
-
전체 Gluster 노드들에 아래 명령어를 수행하여 glusterd 데몬을 구동.
# systemctl start glusterd
# systemctl enable glusterd
-
다음 명령어를 통하여 gnode1에서 각 노드를 trustpool(클러스터)에 추가한다.
# gluster peer status
Number of Peers: 0
# gluster peer probe gnode2
peer probe: success.
..
# gluster peer probe gnode6
peer probe: success.
trustpool에는 명령어를 수행하는 자기 자신을 노출되지 않으며 추가할 때도 자기 자신 즉 gnode1은 추가할 필요가 없다. gnode1 이외의 다른 노드에서도 수행이 가능하지만 위에서 생성한 ssh키 생성 및 복사를 수행한 과정이 필요하다.
-
볼륨 생성
- storage라는 볼륨명으로 분산(distributed)볼륨을 생성하는 경우. (일반 NAS 방식)
example)
# gluster volume create storage gnode1:/brick gnode2:/brick gnode3:/brick gnode4:/brick gnode5:/brick gnode6:/brick
volume create: storage: success: please start the volume to access data
- storage 라는 볼륨명으로 아비타(arbitrated replicated volume) 볼륨을 생성하는 경우. (가장 안정적이며 추천되는 볼륨 방식)
example)
# gluster volume create storage replica 3 arbiter 1 gnode1:/brick gnode2:/brick gnode3:/brick gnode4:/brick gnode5:/brick gnode6:/brick
volume create: storage: success: please start the volume to access data
- test-volume 이라는 볼륨명으로 2벌 복제(arbitrated replicated volume) 볼륨을 생성하는 경우. (일반적인 볼륨 방식으로 split-brain 이슈가 발생될 수 있는 구조)
example)
# gluster volume create test-volume replica 2 gnode1:/brick gnode2:/brick gnode3:/brick gnode4:/brick gnode5:/brick gnode6:/brick
volume create: test-volume: success: please start the volume to access data
- dis-volume 이라는 볼륨명으로 EC 볼륨(disperse volume) 볼륨을 생성하는 경우. (복제 볼륨보다는 적은 용량을 사용하고 전체 노드의 리소스를 사용하는 경우에 사용하는 볼륨 방식으로 4+2 방식의 예제이며 노드의 구성에 따라 더 다양한 방식으로 구성이 가능하다.)
example)
# gluster volume create dis-volume disperse-data 4 redundancy 2 gnode1:/brick gnode2:/brick gnode3:/brick gnode4:/brick gnode5:/brick gnode6:/brick
volume create: dis-volume: success: please start the volume to access dat
bricks가 root 아래에 존재할 경우, 볼륨 생성 시 아래와 같은 이슈가 발생할 수 있다. 이러한 경우 아래와 같은 방법처럼 force 명령어를 추가하여 사용하여 볼륨을 생성할 수있다.
아래와 같은 에러가 발생하는 이유는 root 디렉토리 바로 아래에 brick가 존재하면, brick 디스크의 umount 나 에러 발생 시, root 아래에 디렉토리를 생성 후 데이터를 저장하여 계속 서비스가 되어 root 디렉토리가 full 이 나는 이슈를 방지하기 하기 위함이다. (root 아래에 디렉토리를 바로 사용하는 경우는 추천하지 않는다.)
# gluster volume create storage oozootech1:/brick oozootech2:/brick
volume create: storage: failed: The brick oozootech1:/brick is a mount point. Please create a sub-directory under the mount point and use that as the brick directory. Or use 'force' at the end of the command if you want to override this behavior.
# gluster volume create storage oozootech1:/brick oozootech2:/brick force
volume create: storage: success: please start the volume to access data
-
아무 글러스터 노드에서 아래 명령을 수행하여 생성되어진 볼륨을 구동시킨다.
# gluster volume start storage
Starting storage has been successful
-
아무 글러스터 노드에서 아래 명령을 수행하여 생성되어진 볼륨 확인을 확인한다.
- 생성한 볼륨 정보 확인
# gluster vol info
Volume Name: storage
Type: Distribute
Volume ID: f427e325-6d44-4a3f-88e5-59dca90a02a0
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: gnode1:/brick
Brick2: gnode2:/brick
Options Reconfigured:
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on
- 동작중인 볼륨의 상태 정보 확인
정상적으로 동작하는 경우 아래와 같이 동작중인 모든 노드의 brick 들이 Y 상태가 되어 있어야 한다.
# gluster volume status
Status of volume: storage
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick gnode1:/brick 49152 0 Y 12153
Brick gnode2:/brick 49152 0 Y 12093
Task Status of Volume storage
------------------------------------------------------------------------------
There are no active volume tasks
- 마운트로 동작 확인
# mount -t glusterfs gnode1:/storage /test
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 16G 0 16G 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 16G 9.1M 16G 1% /run
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 14G 37G 27% /
/dev/nvme0n1p2 1014M 143M 872M 15% /boot
/dev/nvme0n1p1 200M 12M 189M 6% /boot/efi
/dev/sda1 3.7T 33M 3.7T 1% /brick
/dev/mapper/centos-home 399G 33M 399G 1% /home
/dev/loop0 11G 11G 0 100% /mnt
/dev/loop1 1.4G 1.4G 0 100% /mnt2
tmpfs 3.2G 0 3.2G 0% /run/user/0
gnode1:/storage 7.3T 75G 7.3T 2% /test
위 article 에 대해 질문이나 궁금한 점이 있다면 언제든지 댓글을 통해 문의하여 주시기 바랍니다.
'Software Defined Storage' 카테고리의 다른 글
볼륨 성능 테스트 방법 (0) | 2021.09.27 |
---|---|
Gluster 볼륨을 통한 Samba 서비스 구성 (0) | 2020.10.12 |
CEPH-Cluster 확장을 위한 이유와 시기에 대한 고찰 (0) | 2020.08.17 |
Ceph Use Case (0) | 2020.08.13 |
Ceph Overview (0) | 2020.08.13 |