본문 바로가기

리눅스

GlusterFS를 설치하고 설정하는 방법

반응형

GlusterFS를 설치하고 설정하는 방법

  • 테스트 환경
$ lsb_release -d
Description:	Ubuntu 22.04.2 LTS
  • 시스템 역할 및 현황
역할 호스트명 아이피 브릭 비고
서버 노드 node1 192.168.20.211 /gfsvolume/gv0  
서버 노드 node2 192.168.20.212 /gfsvolume/gv0  
서버 노드 node3 192.168.20.213 /gfsvolume/gv0  
클라이언트 node4 192.168.20.209 /mnt/myvolume  

** 노드를 hosts 파일(/etc/hosts)에 등록 또는 네임서버(DNS)에 등록

구성(Architecture)

출처-https://docs.gluster.org/en/latest/images/GlusterFS_Translator_Stack.png

1. 방화벽(ufw) 설정

방화벽 끄기

systemctl stop ufw
systemctl disable ufw

2. GlusterFS 설치

apt update
apt install -y glusterfs-server
  • GlusterFS(glusterfsd) 버전 정보 확인
glusterfsd --version
$ glusterfsd --version
glusterfs 10.1
Repository revision: git://git.gluster.org/glusterfs.git
Copyright (c) 2006-2016 Red Hat, Inc. <https://www.gluster.org/>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.
gluster --version

3. GlusterFS 서비스 시작

  • GlusterFS(glusterd) 서비스를 시작하고 부팅 시 자동으로 실행되도록 설정합니다.
systemctl --now enable glusterd
$ systemctl --now enable glusterd
Created symlink /etc/systemd/system/multi-user.target.wants/glusterd.service → /lib/systemd/system/glusterd.service.
  • GlusterFS(glusterd) 상태 확인
systemctl status glusterd
$ systemctl status glusterd
● glusterd.service - GlusterFS, a clustered file-system server
     Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-07-29 19:04:46 KST; 4s ago
       Docs: man:glusterd(8)
    Process: 2541 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited, status=0/SUCCESS)
   Main PID: 2542 (glusterd)
      Tasks: 9 (limit: 2219)
     Memory: 7.0M
        CPU: 1.617s
     CGroup: /system.slice/glusterd.service
             └─2542 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

Jul 29 19:04:45 node1 systemd[1]: Starting GlusterFS, a clustered file-system server...
Jul 29 19:04:46 node1 systemd[1]: Started GlusterFS, a clustered file-system server.

GlusterFS 서버 구성

GlusterFS 신뢰할 수 있는 풀 구성(trusted storage pool)

더보기

GlusterFS에서 "신뢰할 수 있는 풀 구성 (Trusted Storage Pool)"은 GlusterFS 클러스터를 구성하는 서버들 간의 상호 신뢰성을 보장하는 기능입니다. 이를 통해 클러스터 내의 서버들이 신뢰할 수 있는 동료로 간주되고, 클러스터에 악의적인 노드가 접근하는 것을 방지합니다.

 

Trusted Storage Pool은 다음과 같은 이점을 제공합니다.

1. 보안 강화: Trusted Storage Pool을 설정하여 악의적인 서버가 클러스터에 접근하는 것을 방지합니다. 신뢰할 수 없는 노드가 클러스터에 접근하지 못하도록 설정하고, 신뢰 가능한 서버들끼리만 데이터를 복제 및 분산 저장할 수 있도록 보안을 강화합니다.

2. 신뢰성 보장: 클러스터 내의 모든 서버가 신뢰할 수 있는 서버로 인정되면 데이터 복제와 분산이 신뢰성 있게 수행됩니다. 이는 데이터 유실을 최소화하고 안정적인 클러스터 운영을 지원합니다.

 

Trusted Storage Pool을 설정하려면 다음 단계를 따릅니다.

1. 모든 노드의 /etc/hosts 파일에 클러스터 내의 모든 서버들의 호스트 이름과 IP 주소를 등록합니다.

2. GlusterFS 클라이언트와 서버의 /var/lib/glusterd/secure-access 디렉토리에 클라이언트와 서버의 SSH 공개 키를 저장합니다.

3. 각 노드의 GlusterFS 서버에 다른 모든 노드를 "신뢰할 수 있는 풀"에 추가합니다.

sudo gluster peer probe <서버 IP 또는 호스트 이름>

4. Trusted Storage Pool에 노드를 추가했으면, 클러스터 내의 모든 노드에서 다른 모든 노드가 신뢰할 수 있는 풀에 속해 있는지 확인합니다.

sudo gluster peer status

이 명령을 실행하면 각 노드 간의 상태와 풀 소속 여부가 표시됩니다. 모든 노드가 신뢰할 수 있는 풀에 속해 있다면 Trusted Storage Pool 구성이 완료된 것입니다.

 

Trusted Storage Pool은 GlusterFS 클러스터의 안정성과 보안성을 강화하는데 중요한 역할을 합니다. 따라서 GlusterFS 클러스터를 구성할 때 Trusted Storage Pool을 설정하는 것이 좋습니다.

---

  • 신뢰할 수 있는 풀에 속해 있는지 확인(Trusted Storage Pool 노드 확인) 
gluster peer status
$ gluster peer status
Number of Peers: 0
  • Trusted Storage Pool에 node2 노드를 추가(node2)
sudo gluster peer probe node2
node1:~$ sudo gluster peer probe node2
peer probe: success
  • Trusted Storage Pool에 node3 노드를 추가(node3)
sudo gluster peer probe node3
root@node1:~$ sudo gluster peer probe node3
peer probe: success
  • Trusted Storage Pool 노드 확인
sudo gluster peer status
root@node1:~$ sudo gluster peer status
Number of Peers: 2

Hostname: node2
Uuid: fcd875c5-b695-40bb-afef-9cd76945cb44
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 0b3ae661-2da4-4dea-b6bc-23d0d5aabd83
State: Peer in Cluster (Connected)
더보기
root@node2:~$ sudo gluster peer status
Number of Peers: 2

Hostname: node1
Uuid: 3961441e-e8b6-4cbb-8a6f-bb85ac4b0cab
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 0b3ae661-2da4-4dea-b6bc-23d0d5aabd83
State: Peer in Cluster (Connected)
root@node3:~$ sudo gluster peer status
Number of Peers: 2

Hostname: node1
Uuid: 3961441e-e8b6-4cbb-8a6f-bb85ac4b0cab
State: Peer in Cluster (Connected)

Hostname: node2
Uuid: fcd875c5-b695-40bb-afef-9cd76945cb44
State: Peer in Cluster (Connected)

---

  • Trusted Storage Pool 목록 확인
sudo gluster pool list
root@node1:~$ sudo gluster pool list
UUID					Hostname 	State
fcd875c5-b695-40bb-afef-9cd76945cb44	node2    	Connected
0b3ae661-2da4-4dea-b6bc-23d0d5aabd83	node3    	Connected
3961441e-e8b6-4cbb-8a6f-bb85ac4b0cab	localhost	Connected
더보기
root@node2:~$ sudo gluster pool list
UUID					Hostname 	State
3961441e-e8b6-4cbb-8a6f-bb85ac4b0cab	node1    	Connected
0b3ae661-2da4-4dea-b6bc-23d0d5aabd83	node3    	Connected
fcd875c5-b695-40bb-afef-9cd76945cb44	localhost	Connected
root@node3:~$ sudo gluster pool list
UUID					Hostname 	State
3961441e-e8b6-4cbb-8a6f-bb85ac4b0cab	node1    	Connected
fcd875c5-b695-40bb-afef-9cd76945cb44	node2    	Connected
0b3ae661-2da4-4dea-b6bc-23d0d5aabd83	localhost	Connected

---

728x90

GlusterFS Volume(GlusterFS 볼륨) 생성

1. GlusterFS 디렉토리 생성

  • GlusterFS를 사용할 디렉토리를 각 노드에서 생성합니다. 이 예제에서는 /gfsvolume/gv0 디렉토리를 사용합니다.
  • GlusterFS에서 "브릭 디렉터리 (Brick Directory)"는 GlusterFS 볼륨이 실제 데이터를 저장하는 디렉터리입니다. 브릭 디렉터리는 GlusterFS 볼륨을 구성하는 서버의 로컬 디스크 또는 파일 시스템에 위치하며, 해당 볼륨의 데이터가 저장되는 장소로 사용됩니다.
  • 브릭 디렉터리(brick directory)를 저장할 디렉터리를 생성
sudo mkdir -pv /gfsvolume/gv0
$ mkdir -pv /gfsvolume/gv0
mkdir: created directory '/gfsvolume'
mkdir: created directory '/gfsvolume/gv0'
df -h -TP /gfsvolume
$ df -h -TP /gfsvolume
Filesystem            Type  Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv--0 ext4   48G   15G   31G  32% /

2. GlusterFS Volume 생성

  • GlusterFS Volume은 여러 서버 사이의 볼륨을 나타냅니다. 각 서버의 디렉토리를 볼륨에 연결하여 GlusterFS를 설정합니다.
  • 예를 들어, node1, node2, node3 서버를 이용하여 볼륨을 생성하는 방법은 다음과 같습니다.
sudo gluster volume create myvolume replica 3 transport tcp node1:/gfsvolume/gv0 node2:/gfsvolume/gv0 node3:/gfsvolume/gv0 force
$ sudo gluster volume create myvolume replica 3 transport tcp node1:/gfsvolume/gv0 node2:/gfsvolume/gv0 node3:/gfsvolume/gv0 force
volume create: myvolume: success: please start the volume to access data
더보기
$ sudo gluster volume create myvolume replica 3 transport tcp node1:/gfsvolume/gv0 node2:/gfsvolume/gv0 node3:/gfsvolume/gv0
volume create: myvolume: failed: The brick node1:/gfsvolume/gv0 is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior.

해당 오류는 GlusterFS 볼륨 브릭 디렉터리가 시스템의 루트 파티션에 생성되고 있다는 것을 알려주는 메시지입니다. GlusterFS 볼륨의 브릭 디렉터리는 시스템 루트 파티션에 위치하는 것을 권장하지 않으며, 이러한 경우 데이터 관리와 보안에 문제가 발생할 수 있습니다.

이 문제를 해결하려면 브릭 디렉터리를 시스템의 루트 파티션이 아닌 다른 디스크 또는 디렉터리로 지정하거나, 볼륨 생성 명령 뒤에 force 키워드를 사용하여 강제로 브릭 디렉터리를 생성할 수 있습니다.

 

방법 1: 다른 디렉터리로 브릭 디렉터리 지정하기

보다 안전한 방법은 GlusterFS 볼륨의 브릭 디렉터리를 루트 파티션이 아닌 다른 디스크 또는 디렉터리로 지정하는 것입니다. 다른 파티션 또는 마운트된 디스크를 사용하여 브릭 디렉터리를 생성하십시오.

sudo mkdir -p /data/glusterfs/gv0

그리고 다음과 같이 볼륨을 생성합니다.

sudo gluster volume create myvolume replica 3 transport tcp node1:/data/glusterfs/gv0 node2:/data/glusterfs/gv0 node3:/data/glusterfs/gv0

방법 2: force 키워드 사용하기

force 키워드를 사용하여 시스템 루트 파티션에 브릭 디렉터리를 생성하는 것도 가능하지만, 주의해야 합니다. 시스템 루트 파티션에 브릭 디렉터리를 생성하는 것은 보안과 관리 측면에서 적합하지 않으므로 권장되지 않습니다.

 

다음과 같이 force 키워드를 사용하여 브릭 디렉터리를 생성할 수 있습니다.

sudo gluster volume create myvolume replica 3 transport tcp node1:/ gfsvolume/gv0 node2:/gfsvolume/gv0 node3:/gfsvolume/gv0 force

위의 명령어를 사용하여 브릭 디렉터리를 생성하면 경고 메시지를 무시하고 브릭 디렉터리가 시스템 루트 파티션에 생성됩니다. 그러나 이는 안전하지 않은 방법이며, 가능한 경우 다른 디렉터리로 브릭 디렉터리를 지정하는 것이 좋습니다.

---

위 명령어에서 myvolume은 볼륨 이름을, replica 3은 데이터를 3개의 서버에 복제함을 의미합니다. transport tcp는 GlusterFS가 TCP를 사용하여 통신하도록 설정합니다. node1, node2, node3의 /data/glusterfs 디렉토리가 볼륨에 연결됩니다.

glusterfs 분산 볼륨 설정

더보기

스토리지 볼륨 생성

  • 분산 볼륨(distributed volume) : gluster volume create gfs_vol transport tcp
gluster volume create gfs_vol transport tcp kube-node1:/gfsvolume/gv0 kube-node2:/gfsvolume/gv0 kube-node3:/gfsvolume/gv0 force
$ gluster volume create gfs_vol transport tcp kube-node1:/gfsvolume/gv0 kube-node2:/gfsvolume/gv0 kube-node3:/gfsvolume/gv0 force
volume create: gfs_vol: success: please start the volume to access data
  • 복제 볼륨(replicate volume) : gluster volume create gfs_vol replica 3
gluster volume create gfs_vol replica 3 kube-node1:/gfsvolume/gv0 kube-node2:/gfsvolume/gv0 kube-node3:/gfsvolume/gv0 force

---

  • GlusterFS Volume 상태 확인(myvolume 볼륨 정보 확인)
    • Type: Replicate
    • Status: Created
gluster volume info
$ gluster volume info

Volume Name: myvolume
Type: Replicate
Volume ID: 99dddca3-51ab-4e76-b6f7-7a58bb11bc66
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node1:/gfsvolume/gv0
Brick2: node2:/gfsvolume/gv0
Brick3: node3:/gfsvolume/gv0
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
  • GlusterFS Volume 상태 확인(myvolume)
gluster volume status
$ gluster volume status
Volume myvolume is not started

3. GlusterFS Volume(Gluster 볼륨) 시작

sudo gluster volume start myvolume
$ sudo gluster volume start myvolume
volume start: myvolume: success
  • GlusterFS Volume 상태 확인(myvolume 볼륨 정보 확인)
    • Type: Replicate
    • Status: Started
sudo gluster volume info myvolume
$ gluster volume info myvolume

Volume Name: myvolume
Type: Replicate
Volume ID: 99dddca3-51ab-4e76-b6f7-7a58bb11bc66
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node1:/gfsvolume/gv0
Brick2: node2:/gfsvolume/gv0
Brick3: node3:/gfsvolume/gv0
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
  • Gluster Volume (Gluster 볼륨) 상태 확인
sudo gluster volume status

gluster1

Gluster volume profile(볼륨 프로파일링)

  • gluster volume profile 명령어를 사용하여 GlusterFS 볼륨의 프로파일링을 시작할 수 있습니다. 프로파일링은 볼륨에서 수행되는 I/O 작업에 대한 통계 정보를 수집하여 볼륨의 성능을 분석하는 데 사용됩니다.
  • 각 노드의 성능에 대한 자세한 정보를 보기 위해 볼륨을 프로파일링한다
sudo gluster volume profile myvolume start
$ sudo gluster volume profile myvolume start
Starting volume profile on myvolume has been successful
sudo gluster volume profile myvolume info

gluster2

gluster 사용법

$ gluster --help
 peer help                - display help for peer commands
 volume help              - display help for volume commands
 volume bitrot help       - display help for volume bitrot commands
 volume quota help        - display help for volume quota commands
 snapshot help            - display help for snapshot commands
 global help              - list global commands

glusterfs 클라이언트 설치

  • GlusterFS 클라아언트 설치
apt update
apt install -y glusterfs-client
  • 마운트 포인트 생성(디렉터리 생성)
mkdir -pv /mnt/myvolume
  • 분산 볼륨(distributed volume) 마운트
sudo mount -t glusterfs node1:/myvolume /mnt/myvolume/
  • 마운트된 파일시스템(filesystem) 확인
df -h -TP /mnt/myvolume
$ df -h -TP /mnt/myvolume
Filesystem      Type            Size  Used Avail Use% Mounted on
node1:/myvolume fuse.glusterfs   20G  5.7G   15G  29% /mnt/myvolume
  • 시스템 부팅 시 볼륨 자동 마운트(/etc/fstab 등록)
sudo vim /etc/fstab
###glusterfs
node1:/myvolume /mnt/myvolume glusterfs defaults,_netdev 0 0
  • fstab(/etc/fstab) 편집

gluster3

 

참고URL

- Gluster Docs : https://docs.gluster.org/en/main/Install-Guide/Install/

- Gluster Install : https://www.gluster.org/install/

- GlusterFS 구축하기 https://scbyun.com/482

 

728x90
반응형