본문 바로가기

리눅스

[draft] 우분투에서 GlusterFS를 설치하고 클러스터로 구성하는 방법

728x90

우분투에서 GlusterFS를 설치하고 클러스터로 구성하는 방법

테스트 환경

$ lsb_release -d
Description:	Ubuntu 22.04.2 LTS

시스템 역할 및 현황

역할 호스트 이름 아이피 주소 Brick 비고
서버 노드 node1 192.168.0.112 /gfsvolume/gv0  
서버 노드 node2 192.168.0.121 /gfsvolume/gv0  
서버 노드 node3 192.168.0.141 /gfsvolume/gv0  
클라이언트 node4 192.168.0.212 /mnt/myvolume  

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

구성(Architecture)

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

1. 방화벽(ufw) 설정

GlusterFS가 사용하는 포트를 허용합니다.

  • 24007 : GlusterFS 관리 포트
  • 24008 : GlusterFS 이벤트 포트
  • 49152-49251 : GlusterFS Brick 통신 포트
sudo ufw allow 24007/tcp
sudo ufw allow 24008/tcp
sudo ufw allow 49152:49251/tcp
sudo ufw reload

(또는) 방화벽 끄기

sudo systemctl --now disable ufw

호스트(/etc/hosts) 파일 수정

cat <<EOF >> /etc/hosts

# GlusterFS Cluster
192.168.0.112 node1
192.168.0.121 node2
192.168.0.141 node3
EOF

Install-Gluster

2. GlusterFS 설치

모든 서버 노드(node1, node2, node3)에서 GlusterFS를 설치합니다.

sudo apt-get update

GlusterFS 저장소 추가

sudo add-apt-repository ppa:gluster/glusterfs-9

또는

sudo cat <<EOF | tee gluster-ubuntu-glusterfs-9-jammy.list
deb https://ppa.launchpadcontent.net/gluster/glusterfs-9/ubuntu $(lsb_release -cs) main
deb-src https://ppa.launchpadcontent.net/gluster/glusterfs-9/ubuntu $(lsb_release -cs) main
EOF
sudo apt-get update

GlusterFS 서버 패키지 설치

sudo apt-get install -y glusterfs-server

GlusterFS(glusterfsd) 버전 정보 확인

glusterfsd --version
gluster --version

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.

3. GlusterFS 클러스터 구성

각 서버에서 다른 서버를 피어로 추가합니다. 이 단계는 node1, node2, node3에서 동일하게 수행됩니다.

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와 node3 노드를 추가(node1)

sudo gluster peer probe node2
sudo gluster peer probe node3

피어 상태 확인(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)

Trusted Storage Pool 목록 확인

sudo gluster pool list
root@node1:~$ sudo gluster pool list
UUID                                    Hostname        State
e05ada6f-47b6-4664-b762-89e012178b75    node2           Connected 
a384054a-3b6c-4f10-870c-9bcd0b387a77    node3           Connected 
001afd45-f296-4c96-85ca-b6a855ea69ca    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

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

gluster

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

gluster

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 클라아언트 설치

sudo apt-get update
sudo apt-get install -y glusterfs-client

마운트 포인트 생성(디렉터리 생성)

mkdir -pv /mnt/myvolume

분산 볼륨(distributed volume) 마운트

sudo mount -t glusterfs node1:/myvolume /mnt/myvolume/

마운트된 파일시스템(filesystem) 확인

df -h -TP /mnt/myvolume
root@node4:~$ df -h -TP /mnt/myvolume
Filesystem      Type            Size  Used Avail Use% Mounted on
node1:/myvolume fuse.glusterfs   79G  9.0G   70G  12% /mnt/myvolume

시스템 부팅 시 볼륨 자동 마운트(/etc/fstab 등록)

sudo vim /etc/fstab
###glusterfs
node1:/myvolume /mnt/myvolume glusterfs defaults,_netdev 0 0

또는

echo -e "\n###glusterfs\nnode1:/myvolume /mnt/myvolume glusterfs defaults,_netdev 0 0" | sudo tee -a /etc/fstab

fstab(/etc/fstab) 편집

gluster

 

참고URL

- Gluster Docs : Installing Gluster

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

- Gluster Docs : gluster download

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

 

728x90