우분투에서 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)
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
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
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 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 클라아언트 설치
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) 편집
참고URL
- Gluster Docs : Installing Gluster
- Gluster Install : https://www.gluster.org/install/
- Gluster Docs : gluster download
- GlusterFS 구축하기 https://scbyun.com/482
'리눅스' 카테고리의 다른 글
[draft] killall 명령어 (0) | 2022.12.03 |
---|---|
[리눅스] iTop(itsm) 설치하기 (0) | 2022.12.02 |
Ubuntu LTS(Long Term Support) releases cycle (0) | 2022.12.01 |
ping check 스크립트 (0) | 2022.12.01 |
웹 서버에서 리다이렉션(redirect) 설정하는 방법 (0) | 2022.11.30 |