우분투 GlusterFS 설치 방법
GlusterFS는 확장 가능한 분산 파일 시스템입니다. Ubuntu에서 GlusterFS를 설치하고, 볼륨을 생성한 뒤에 마운트 하는 방법을 정리하였습니다. Replicated Volume을 2대의 서버로 구성하며, 1대의 서버로 클라이언트 접속 방법을 설명드립니다. LVM으로 파티션을 구성하고자 하시는 분들은 아래의 내용을 참고해 주시기 바랍니다.
환경
우분투 18.04 서버를 기준으로 설명드리지만, 우분투 16.04 등의 버전를 사용하시더라도 동일합니다. 총 2대의 GlusterFS 서버가 필요하며 1대의 클라이언트를 기준으로 설명드리도록 하겠습니다. gfs1, gfs2의 정보가 아래와 같이 /etc/hosts 파일에 추가되어 있어야 합니다.
- gfs1 : GlusterFS 서버1
- gfs2 : GlusterFS 서버2
- client : 클라이언트 (옵션)
172.17.0.2 gfs1
172.17.0.3 gfs2
참고로, docker를 이용하여 분산 파일시스템을 구성하고자 하실 경우 –privileged=true 옵션을 추가하여 컨테이너를 생성해 주셔야 합니다. 서버에서 직접 분산 파일시스템을 구성하실 경우에는 해당사항이 없습니다.
구성
이번 글에서 설명드릴 구조는 2대의 GlusterFS 서버를 이용하여 Replicated Volume을 생성해 보도록 하겠습니다. 생성된 볼륨은 각각의 GlusterFS 서버에 마운트 하는 예제와 볼륨을 추가 클라이언트에서 사용하는 방법을 함께 설명드리도록 하겠습니다.
Gluster 서버 설치
gfs1과 gfs2 서버에서 모두 각각 아래의 명령어를 실행하여, 서버 프로그램을 설치해 주시기 바랍니다.
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:gluster/glusterfs-5
$ sudo apt-get update
$ sudo apt install glusterfs-server
GlusterFS 설정
Peer 연결
2대의 서버 모두 서버 프로그램이 설치한 다음에는 peer로 연결을 해주셔야 합니다. gfs1 서버에서 아래의 명령어를 실행해 주시기 바랍니다.
gfs1$ sudo gluster peer probe gfs2
peer probe: success.
위의 연결 명령어를 한 번 실행하면, 각 서버에서 연결된 peer 정보는 다음 명령어로 확인 할 수 있습니다.
gfs1$ sudo gluster peer status
Number of Peers: 1
Hostname: gfs2
Uuid: 6b6cf010-3f17-4c61-8dd3-c48ac698bc07
State: Peer in Cluster (Connected)
gfs2$ sudo gluster peer status
Number of Peers: 1
Hostname: gfs1
Uuid: 172656f6-cc3a-4019-87dc-5a08c7a49d4d
State: Peer in Cluster (Connected)
그리고 pool 정보는 다음 명령어로 확인 할 수 있습니다.
$ sudo gluster pool list
UUID Hostname State
6b6cf010-3f17-4c61-8dd3-c48ac698bc07 gfs2 Connected
172656f6-cc3a-4019-87dc-5a08c7a49d4d localhost Connected
볼륨 생성
gfs1과 gfs2 서버에서 각각 다음 명령어로 볼륨 디렉터리를 생성해 주시기 바랍니다.
gfs1$ sudo mkdir -p /gluster/fs
gfs2$ sudo mkdir -p /gluster/fs
그리고 gfs1 서버에서 아래의 명령어로 볼륨을 생성한 뒤에 시작 명령어를 함께 실행합니다.
gfs1$ sudo gluster volume create vol replica 2 transport tcp gfs1:/gluster/fs gfs2:/gluster/fs force
volume create: vol: success: please start the volume to access data
gfs1$ sudo gluster volume start vol
volume start: vol: success
위의 명령어는 Replicated Volume을 vol 이름으로 생성하는 의미입니다. 생성된 볼륨 정보는 gfs1과 gfs2 서버에서 아래의 명령어로 확인 할 수 있습니다.
gfs1$ $ sudo gluster volume info vol
Volume Name: vol
Type: Replicate
Volume ID: c2a6d0e9-ddab-45bc-a84c-00ad5c94666c
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gfs1:/gluster/fs
Brick2: gfs2:/gluster/fs
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
GlusterFS 마운트
생성된 볼륨을 gfs1과 gfs2서버에 각각 마운트하여 파일이 동기화 되는지 확인해 보도록 하겠습니다. 먼저 gfs1 서버에서 아래의 명령어를 실행해 주시기 바랍니다.
gfs1$ sudo mkdir -p /mnt/gluster
gfs1$ sudo mount -t glusterfs gfs1:/vol /mnt/gluster
위의 명령어를 실행하면 Gluster gfs1서버의 볼륨 vol가 /mnt/gluster 디렉터리에 마운트 되게 됩니다. 그리고 다음 명령어로 테스트 파일을 생성해 보도록 하겠습니다.
gfs1$ sudo touch /mnt/gluster/hello.txt
다음은 gfs2 서버에서 Gluster을 마운트하고, 파일이 동기화 되었는지 확인해 보도록 하겠습니다. gfs2서버에서 다음의 명령어로 볼륨을 마운트 합니다.
gfs2$ sudo mkdir -p /mnt/gluster
gfs2$ sudo mount -t glusterfs gfs2:/vol /mnt/gluster
그리고 아래의 명령어로 파일이 동기화 되었는지 확인 합니다.
gfs2$ ls -alh /mnt/gluster/hello.txt
-rw-r--r-- 1 root root 0 Oct 26 15:53 /mnt/gluster/hello.txt
GlusterFS 클라이언트 마운트
GlusterFS 서버에서 파일시스템으로 마운트 할 수 있을 뿐만 아니라, 외부 서버에서 마운트 할 수 있습니다. 아래의 명령어로 glusterfs-client 패키지를 설치해 주시기 바랍니다.
client$ sudo apt-get install software-properties-common
client$ sudo add-apt-repository ppa:gluster/glusterfs-5
client$ sudo apt-get update
client$ sudo apt install glusterfs-client
그리고 다음의 명령어로 볼륨을 마운트 해주시면 됩니다.
client$ sudo mkdir -p /mnt/gluster
client$ sudo mount -t glusterfs gfs1:/vol /mnt/gluster
GlusterFS 볼륨 접근제어
위의 명령어를 실행하면, 바로 마운트 되는 것을 확인 할 수 있습니다. 외부에서 마운트 되는 것을 방지하기 위해서 로컬에서만 연결될 수 있도록 설정 하실 수 있습니다.
gfs1$ sudo gluster volume set vol auth.allow 127.0.0.1
volume set: success
fstab 설정
부팅시 자동으로 볼륨이 마운트 될 수 있도록 설정하기 위해서는 아래의 내용을 /etc/fstab 파일에 추가해 주시면 됩니다.
gfs1:/vol /mnt/gluster glusterfs defaults,_netdev 0 0
/etc/fstab 파일을 잘 못 수정하면 부팅이 안 될 수 있습니다. 따라서 /etc/fstab 파일을 수정 후 아래의 명령어로 올바르게 마운트 되는지 확인 후 재부팅을 해주시기 바랍니다. 우분투 GlusterFS 설치 방법 대하여 설명드렸습니다.
$ sudo mount -a
( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)