[입 개발] 우분투 11.04 에 glusterfs 3.3.0 설치하기

해당 블로그는 KT UCloud의 지원을 받고 있습니다.

갑자기 glusterfs 가 설치하고 싶어져서 KT UCloud 의 장비 3대에 glusterfs를 설치 했습니다. 위키피디아를 보면 glusterfs는 Scale-Out 가능한 NAS(Network Attached Storage) 파일 시스템입니다.  특징으로는 메타 정보 관리를 위한 Master Node가 따로 존재하지 않고, 모든 노드가 모든 정보를 관리합니다. 하둡과 카산드라를 생각해보면, 하둡은 마스터 노드가 모든 메타 정보를 관리해서 마스터 노드가 장애가 나면, 하둡의 기능이 정지합니다. 즉 마스터 노드가 SPOF(Single Point of Failure)가 됩니다. 그런데 glusterfs는 카산드라 처럼 모든 노드가 정보를 가지고 있어서(정확히는 카산드라는 키를 token으로 찾아낼 수 있는 거지만) 마스터 노드라는 개념이 없습니다.

설치한 장비는 우분투 11.04 장비이며, 설치 순서는 다음과 같습니다.  각 3대의 장비에 모두 실행해주어야 합니다.

거의 하단의 reference에서 참고하였습니다. 다만 reference를 보면 fstab 에 fuse 를 넣어라라고 되어있는데

먼저 glusterfs 는 nfs-common 에 의존성이 있고, nfs-common은 다시 libevent 에 의존성이 있으므로 설치를 해줘야 합니다.


sudo apt-get install libevent-dev

sudo apt-get install nfs-common

wget http://download.gluster.com/pub/gluster/glusterfs/3.3/3.3.0/Ubuntu/11.04/glusterfs_3.3.0-1_amd64.deb

sudo dpkg -i ./glusterfs_3.3.0-1_amd64.deb

그런 다음 /etc/hosts 파일에 설정을 위해서 각 노드로 사용될 서버를 지정해줍니다. ip는 각 장비에 맞도록 고쳐주시면 됩니다.


sudo vi /etc/hosts

#아래 부분을 /etc/hosts 에 추가

1.2.3.4 ucloud1
1.2.3.5 ucloud2
1.2.3.6 ucloud3

이제 glusterd를 기본 시작시 실행되도록 설정해 줍니다.


sudo update-rc.d glusterd defaults
sudo /etc/init.d/glusterd start

그리고 gluster 클러스터에 장비들을 추가합니다. 자기 자신을 추가 안해줘도 되지만 모두 추가합니다.


sudo gluster peer probe ucloud1
sudo gluster peer probe ucloud2
sudo gluster peer probe ucloud3

이제 replication 모드로 볼륨을 생성합니다.( 실제로 replication, strip 등으로 생성 가능합니다. )


sudo gluster volume create www-volume replica 3 transport tcp ucloud1:/exp1 ucloud2:/exp2 ucloud3:/exp3

이제 생성한 볼륨을 실행합니다.


sudo gluster volume start www-volume

실제로 해당 볼륨을 마운트할 디렉토리를 생성합니다. 그리고 마운트 합니다. 어느 장비껄 마운트 하셔도 상관 없습니다.


sudo mkdir -p /mnt/www-volume

sudo mount -t glusterfs -o log-level=WARNING,log-file=/var/log/gluster.log ucloud1:/www-volume /mnt/www-volume

이제 바로 사용하실 수 있습니다.  /mnt/www-volume 으로 가서 파일을 생성해보면 다른 서버에 즉각 반영되는 것을 볼 수 있습니다. 하지만 매번 재시작시에도 자동으로 마운트 하기 위해서는 fstab에 다음과 같이 추가가 필요합니다.


sudo vi /etc/fstab

#다음 내용을 추가

ucloud1:/www-volume /mnt/www-volume glusterfs defaults,_netdev,loglevel=WARNING,log-file=/var/log/gluster.log 0 0
ucloud2:/www-volume /mnt/www-volume glusterfs defaults,_netdev,loglevel=WARNING,log-file=/var/log/gluster.log 0 0
ucloud3:/www-volume /mnt/www-volume glusterfs defaults,_netdev,loglevel=WARNING,log-file=/var/log/gluster.log 0 0

그리고 /etc/modules 파일에 fuse 를 추가해줘야 합니다.(KT UCloud의 우분투 11.04는 해당 파일이 없고 추가하지 않아도 문제가 없었습니다. 아마도 커널에 아예 같이 컴파일 되지 않았을까 싶습니다. )


sudo vi /etc/modules

#아래 라인 추가

fuse

그리고 최종적으로 /etc/init.d/glusterd 파일을 수정해줘야 합니다. do_start() 를 다음과 같이 수정합니다. fstab의 것이 먼저 마운트를 시도하므로, 해당 데몬이 실행되기 전에 마운트를 시도해서 최초에 실패하기 때문에 데몬 구동 후에 강제로 다시 마운트를 시도하는 것입니다.

</pre>
do_start()
{
pidofproc -p $PIDFILE $DAEMON >/dev/null
status=$?
if [ $status -eq 0 ]; then
log_success_msg "glusterd service is already running with pid $PID"
else
log_daemon_msg "Starting glusterd service" "glusterd"
start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON -- -p $PIDFILE $GLUSTERD_OPTS
log_end_msg $?
start_daemon -p $PIDFILE $DAEMON -f $CONFIGFILE
#아래 줄을 추가
mount -a
return $?
fi
}
<pre>

이제 아무 서버에서 /mnt/www-volume 으로 가서 파일을 생성해보면 다른 서버에 바로 생성되거나 삭제되는 것을 볼 수 있습니다.
Reference: http://extremeshok.com/blog/clustering/ubuntu-11-04-server-3-node-glusterfs-3-2-2-replication/