우분투에서 GlusterFS를 설치하고 클러스터로 구성하는 방법
테스트 환경
$ lsb_release -d
Description: Ubuntu 22.04.2 LTS
시스템 역할 및 현황
역할 | 호스트명 | 아이피 | 브릭 | 비고 |
서버 노드 | node1 | 192.168.10.111 | /gfsvolume/gv0 | |
서버 노드 | node2 | 192.168.10.112 | /gfsvolume/gv0 | |
서버 노드 | node3 | 192.168.10.113 | /gfsvolume/gv0 | |
클라이언트 | node4 | 192.168.10.209 | /mnt/myvolume |
** 노드를 hosts 파일(/etc/hosts)에 등록 또는 네임서버(DNS)에 등록
구성(Architecture)
방화벽(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
방화벽 끄기
systemctl --now disable ufw
호스트(/etc/hosts) 파일 수정
cat <<EOF >> /etc/hosts
# GlusterFS Cluster
192.168.10.111 node1
192.168.10.112 node2
192.168.10.113 node3
EOF
2. GlusterFS 설치
모든 서버 노드(node1, node2, node3)에서 GlusterFS를 설치합니다.
sudo apt-get update
GlusterFS 저장소 추가
sudo add-apt-repository ppa:gluster/glusterfs-9
$ sudo add-apt-repository ppa:gluster/glusterfs-9
PPA publishes dbgsym, you may need to include 'main/debug' component
Repository: 'deb https://ppa.launchpadcontent.net/gluster/glusterfs-9/ubuntu/ jammy main'
Description:
GlusterFS 9
More info: https://launchpad.net/~gluster/+archive/ubuntu/glusterfs-9
Adding repository.
Press [ENTER] to continue or Ctrl-c to cancel.
또는
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
GlusterFS 서버 패키지 설치
sudo apt-get update
sudo apt-get 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
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 클러스터 구성
각 서버에서 다른 서버를 피어로 추가합니다.
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을 설정하는 것이 좋습니다.
---
피어 상태 확인
gluster peer status
$ gluster peer status
Number of Peers: 0
피어 추가
- node1 - Trusted Storage Pool에 node2, node3 노드를 추가
sudo gluster peer probe node2
$ sudo gluster peer probe node2
peer probe: success
sudo gluster peer probe node3
$ sudo gluster peer probe node3
peer probe: success
피어 상태 확인
- 각 노드에서 피어 상태를 확인하여 모든 노드가 올바르게 연결되었는지 확인합니다.
- 정상적으로 연결되면 각 노드에 다른 서버들이 "Connected" 상태로 표시됩니다.
sudo gluster peer status
$ sudo gluster peer status
Number of Peers: 2
Hostname: node2
Uuid: e0f37d0a-27ac-42e4-9af1-cc54333c037c
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 860d86d4-9fd4-4281-91eb-eff9bf1a1f40
State: Peer in Cluster (Connected)
---
node2
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)
node3
$ gluster peer status
Number of Peers: 2
Hostname: node1
Uuid: 444e2a60-c1d5-4790-b6ff-fa17df920eb6
State: Peer in Cluster (Connected)
Hostname: node2
Uuid: e0f37d0a-27ac-42e4-9af1-cc54333c037c
State: Peer in Cluster (Connected)
---
Trusted Storage Pool 목록 확인
sudo gluster pool list
root@node1:~$ sudo gluster pool list
UUID Hostname State
e0f37d0a-27ac-42e4-9af1-cc54333c037c node2 Connected
860d86d4-9fd4-4281-91eb-eff9bf1a1f40 node3 Connected
444e2a60-c1d5-4790-b6ff-fa17df920eb6 localhost Connected
4. GlusterFS Volume(GlusterFS 볼륨) 생성
GlusterFS를 사용할 디렉토리를 각 노드에서 생성합니다. 이 예제에서는 /gfsvolume/gv0 디렉토리를 사용합니다.
GlusterFS에서 "브릭 디렉터리(Brick Directory)"는 GlusterFS 볼륨이 실제 데이터를 저장하는 디렉터리입니다. 브릭 디렉터리는 GlusterFS 볼륨을 구성하는 서버의 로컬 디스크 또는 파일 시스템에 위치하며 해당 볼륨의 데이터가 저장되는 장소로 사용됩니다.
Brick 디렉터리 생성
각 노드에서 데이터를 저장할 디렉터리(Brick)를 만듭니다.
sudo mkdir -pv /gfsvolume/gv0
df -h -TP /gfsvolume
GlusterFS Volume 생성
GlusterFS Volume은 여러 서버 사이의 볼륨을 나타냅니다. 각 서버의 디렉토리를 볼륨에 연결하여 GlusterFS를 설정합니다.
myvolume은 볼륨 이름을 replica 3은 데이터를 3개의 서버에 복제함을 의미합니다. transport tcp는 GlusterFS가 TCP를 사용하여 통신하도록 설정합니다. node1, node2, node3의 /gfsvolume/gv 디렉토리가 볼륨에 연결됩니다.
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
위의 명령어를 사용하여 브릭 디렉터리를 생성하면 경고 메시지를 무시하고 브릭 디렉터리가 시스템 루트 파티션에 생성됩니다. 그러나 이는 안전하지 않은 방법이며, 가능한 경우 다른 디렉터리로 브릭 디렉터리를 지정하는 것이 좋습니다.
---
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 상태 확인)
볼륨이 정상적으로 생성되고 시작되었는지 확인합니다.
- Type: Replicate
- Status: Created
gluster volume info
$ gluster volume info
Volume Name: myvolume
Type: Replicate
Volume ID: 120b3968-f47d-432a-8b7e-e5489c74adee
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
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
$ sudo gluster volume info myvolume
Volume Name: myvolume
Type: Replicate
Volume ID: 120b3968-f47d-432a-8b7e-e5489c74adee
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 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 --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 클라이언트를 설치하고 마운트해야 합니다.
클라이언트에서 GlusterFS 클라이언트 설치
sudo apt-get update
sudo apt-get install -y glusterfs-client
마운트 포인트 생성(디렉터리 생성)
sudo mkdir -pv /mnt/myvolume
분산 볼륨(distributed volume) 마운트
- GlusterFS 볼륨을 클라이언트에서 /mnt/myvolume에 마운트합니다.
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 등록)
- 클라이언트에서 볼륨을 부팅 시 자동으로 마운트하려면 /etc/fstab 파일에 다음 항목을 추가합니다.
sudo vim /etc/fstab
###glusterfs
node1:/myvolume /mnt/myvolume glusterfs defaults,_netdev 0 0
fstab(/etc/fstab) 편집
볼륨 관리 명령어
볼륨 중지
sudo gluster volume stop myvolume
root@node1:~$ sudo gluster volume stop myvolume
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: myvolume: success
볼륨 삭제
sudo gluster volume delete myvolume
root@node1:~$ sudo gluster volume delete myvolume
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: myvolume: success
GlusterFS 서비스 중지
systemctl --now disable glusterd
참고URL
- Gluster Docs : https://docs.gluster.org/en/main/Install-Guide/Install/
- Gluster Install : https://www.gluster.org/install/
- GlusterFS 구축하기 : https://scbyun.com/482
'리눅스' 카테고리의 다른 글
Nginx HTTP Server Note (0) | 2016.03.02 |
---|---|
RackTable 설치 방법(Installing RackTables) (1) | 2016.02.05 |
sysfsutils 설치 및 systool 명령어 사용하는 방법 (0) | 2015.11.19 |
[리눅스] Install Gitlab on CentOS (0) | 2015.09.14 |
[리눅스] git 설치(gitlab) (0) | 2015.09.11 |