웹사이트 검색

Ubuntu 서버에서 GlusterFS를 사용하여 중복 저장소 풀을 만드는 방법


상태: 더 이상 사용되지 않음

이 문서에서는 더 이상 지원되지 않는 Ubuntu 버전에 대해 설명합니다. 현재 Ubuntu 12.04를 실행하는 서버를 운영 중인 경우 지원되는 Ubuntu 버전으로 업그레이드하거나 마이그레이션하는 것이 좋습니다.

  • Ubuntu 14.04로 업그레이드합니다.
  • Ubuntu 14.04에서 Ubuntu 16.04로 업그레이드
  • 서버 데이터를 지원되는 버전으로 마이그레이션

이유:

대신 참조:

소개

중복성과 고가용성은 매우 다양한 서버 활동에 필요합니다. 데이터 저장 측면에서 단일 실패 지점을 갖는 것은 중요한 데이터에 대해 매우 위험한 구성입니다.

많은 데이터베이스 및 기타 소프트웨어를 사용하면 단일 애플리케이션의 컨텍스트에서 데이터를 분산시킬 수 있지만 다른 시스템은 파일 시스템 수준에서 작동하여 데이터가 디스크에 기록될 때마다 다른 위치로 복사되도록 할 수 있습니다. GlusterFS와 같은 클러스터 스토리지 솔루션은 이 정확한 기능을 제공합니다.

이 가이드에서는 두 개의 64비트 Ubuntu 12.04 VPS 인스턴스 간에 중복 GlusterFS 클러스터를 설정합니다. 이는 미러링된 RAID가 있는 NAS 서버와 유사하게 작동합니다. 그런 다음 세 번째 64비트 Ubuntu 12.04 VPS에서 클러스터에 액세스합니다.

일반 개념

클러스터 환경에서는 다양한 컴퓨터를 하나의 보다 강력한 장치로 취급할 수 있도록 리소스(일반적으로 컴퓨팅 또는 스토리지)를 풀링할 수 있습니다. GlusterFS를 사용하면 다양한 VPS 인스턴스의 스토리지를 풀링하고 마치 단일 서버인 것처럼 액세스할 수 있습니다.

GlusterFS를 사용하면 다양한 종류의 스토리지 구성을 생성할 수 있으며 그 중 다수는 기능적으로 RAID 레벨과 유사합니다. 예를 들어 클러스터의 여러 노드에 걸쳐 데이터를 스트라이프하거나 더 나은 데이터 가용성을 위해 중복성을 구현할 수 있습니다.

이 가이드에서는 분산 파일 시스템이라고도 하는 중복 클러스터 스토리지 어레이를 생성합니다. 기본적으로 이렇게 하면 네트워크를 통해 미러링된 RAID 구성과 유사한 기능을 사용할 수 있습니다. 각각의 독립적인 서버에는 데이터의 자체 사본이 포함되어 있어 응용 프로그램이 두 사본 중 하나에 액세스할 수 있으므로 읽기 로드를 분산하는 데 도움이 됩니다.

각 VPS에서 수행할 단계

이 가이드에서 사용하는 각 VPS 인스턴스에서 수행할 몇 가지 단계가 있습니다. 각 호스트 간에 DNS 확인을 구성하고 GlusterFS 패키지를 설치하는 데 사용할 소프트웨어 소스를 설정해야 합니다.

DNS 확인 구성

서로 다른 구성 요소가 서로 쉽게 통신할 수 있으려면 각 컴퓨터 간에 일종의 호스트 이름 확인을 설정하는 것이 가장 좋습니다.

각 시스템을 가리키도록 구성하려는 도메인 이름이 있는 경우 이 가이드에 따라 DigitalOcean으로 도메인 이름을 설정할 수 있습니다.

여분의 도메인 이름이 없거나 빠르고 쉽게 설정하려는 경우 대신 각 컴퓨터에서 호스트 파일을 편집할 수 있습니다.

첫 번째 컴퓨터에서 루트 권한으로 이 파일을 엽니다.

sudo nano /etc/hosts

다음과 같은 내용이 표시됩니다.

127.0.0.1       localhost gluster2

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

로컬 호스트 정의 아래에 각 VPS의 IP 주소와 이를 참조하는 데 사용할 길고 짧은 이름을 추가해야 합니다.

완료되면 다음과 같이 표시됩니다.

<예비>

::1 ip6-localhost ip6-루프백

행의 gluster0.droplet.comgluster0 부분은 각 드롭릿에 액세스하는 데 사용하려는 이름으로 변경할 수 있습니다. 이 가이드에서는 이러한 설정을 사용합니다.

완료되면 추가한 줄을 복사하여 다른 VPS 인스턴스의 /etc/hosts 파일에 추가합니다. 각 /etc/hosts 파일에는 IP를 선택한 이름에 연결하는 줄이 포함되어야 합니다.

완료되면 각 파일을 저장하고 닫습니다.

소프트웨어 소스 설정

Ubuntu 12.04에는 GlusterFS 패키지가 포함되어 있지만 상당히 오래되었으므로 GlusterFS 프로젝트에서 이 글을 작성할 당시(버전 3.4) 최신 안정 버전을 사용할 것입니다.

클러스터 내에서 노드로 작동할 모든 컴퓨터와 클라이언트 컴퓨터에서 소프트웨어 소스를 설정할 것입니다.

프로젝트에서 우분투 사용자에게 권장하는 PPA(개인 패키지 아카이브)를 실제로 추가할 예정입니다. 이를 통해 다른 시스템 소프트웨어와 동일한 도구로 패키지를 관리할 수 있습니다.

먼저 python-software-properties 패키지를 설치해야 합니다. 그러면 apt로 PPA를 쉽게 관리할 수 있습니다.

sudo apt-get update
sudo apt-get install python-software-properties

PPA 도구가 설치되면 다음을 입력하여 GlusterFS 패키지용 PPA를 추가할 수 있습니다.

sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4

PPA가 추가되면 시스템이 PPA에서 사용할 수 있는 새 패키지에 대해 알 수 있도록 로컬 패키지 데이터베이스를 새로 고쳐야 합니다.

sudo apt-get update

이 가이드에 사용 중인 모든 VPS 인스턴스에서 이 단계를 반복합니다.

서버 구성 요소 설치

이 가이드에서는 두 대의 시스템을 클러스터 구성원으로 지정하고 세 번째 시스템을 클라이언트로 지정합니다.

gluster0gluster1로 레이블이 지정된 컴퓨터를 클러스터 구성 요소로 구성할 것입니다. gluster2를 클라이언트로 사용하겠습니다.

클러스터 구성원 시스템(gluster0 및 gluster1)에서 다음을 입력하여 GlusterFS 서버 패키지를 설치할 수 있습니다.

sudo apt-get install glusterfs-server

이것이 두 노드에 설치되면 스토리지 볼륨 설정을 시작할 수 있습니다.

호스트 중 하나에서 두 번째 호스트와 피어링해야 합니다. 어떤 서버를 사용하는지는 중요하지 않지만 단순성을 위해 gluster0 서버에서 다음 명령을 수행할 것입니다.

sudo gluster peer probe gluster1.droplet.com
peer probe: success

이는 피어링이 성공했음을 의미합니다. 다음을 입력하여 언제든지 노드가 통신하고 있는지 확인할 수 있습니다.

sudo gluster peer status
Number of Peers: 1

Hostname: gluster1.droplet.com
Port: 24007
Uuid: 7bcba506-3a7a-4c5e-94fa-1aaf83f5729b
State: Peer in Cluster (Connected)

이 시점에서 두 서버가 통신 중이며 함께 스토리지 볼륨을 설정할 수 있습니다.

스토리지 볼륨 생성

이제 서버 풀을 사용할 수 있으므로 첫 번째 볼륨을 만들 수 있습니다.

중복성에 관심이 있으므로 복제 기능이 있는 볼륨을 설정합니다. 이렇게 하면 데이터의 여러 복사본을 보관할 수 있으므로 단일 장애 지점에서 벗어날 수 있습니다.

각 서버에 하나의 데이터 복사본이 필요하므로 복제본 옵션을 보유하고 있는 서버 수인 "2\로 설정합니다. 볼륨을 생성하는 데 사용할 일반 구문은 다음과 같습니다.

<예비>

실행할 정확한 명령은 다음과 같습니다.

sudo gluster volume create volume1 replica 2 transport tcp gluster0.droplet.com:/gluster-storage gluster1.droplet.com:/gluster-storage force
volume create: volume1: success: please start the volume to access data

이렇게 하면 volume1이라는 볼륨이 생성됩니다. /gluster-storage에 있는 각 호스트의 디렉토리에 이 볼륨의 데이터를 저장합니다. 이 디렉터리가 없으면 생성됩니다.

이 시점에서 볼륨이 생성되었지만 비활성 상태입니다. 다음을 입력하여 볼륨을 시작하고 사용할 수 있도록 할 수 있습니다.

sudo gluster volume start volume1
volume start: volume1: success

볼륨이 현재 온라인 상태여야 합니다.

클라이언트 구성 요소 설치 및 구성

이제 볼륨을 구성했으므로 클라이언트 시스템에서 사용할 수 있습니다.

시작하기 전에 이전에 설정한 PPA에서 관련 패키지를 실제로 설치해야 합니다.

클라이언트 시스템(이 예에서는 gluster2)에서 다음을 입력합니다.

sudo apt-get install glusterfs-client

이렇게 하면 클라이언트 응용 프로그램이 설치되고 커널 외부에서 파일 시스템 기능을 제공하는 데 필요한 퓨즈 파일 시스템 도구도 설치됩니다.

클라이언트 컴퓨터에 원격 스토리지 볼륨을 마운트할 것입니다. 그러기 위해서는 마운트 지점을 만들어야 합니다. 전통적으로 이것은 /mnt 디렉토리에 있지만 편리한 곳이라면 어디에서나 사용할 수 있습니다.

/storage-pool에 디렉토리를 생성합니다:

sudo mkdir /storage-pool

이 단계를 거치지 않으면 원격 볼륨을 마운트할 수 있습니다. 이렇게 하려면 다음 구문을 사용하기만 하면 됩니다.

<예비>

mount 명령에서 볼륨 이름을 사용하고 있음에 유의하십시오. GlusterFS는 각 호스트의 실제 스토리지 디렉토리를 추상화합니다. 우리는 /gluster-storage 디렉토리가 아니라 volume1 볼륨을 마운트하려고 합니다.

또한 스토리지 클러스터의 구성원을 하나만 지정하면 됩니다.

실행할 실제 명령은 다음과 같습니다.

sudo mount -t glusterfs gluster0.droplet.com:/volume1 /storage-pool

이렇게 하면 볼륨이 마운트됩니다. df 명령을 사용하면 GlusterFS가 올바른 위치에 마운트된 것을 볼 수 있습니다.

중복 기능 테스트

스토리지 풀을 사용하도록 클라이언트를 설정했으므로 이제 기능을 테스트해 보겠습니다.

클라이언트 시스템(gluster2)에서 다음을 입력하여 스토리지 풀 디렉토리에 일부 파일을 추가할 수 있습니다.

cd /storage-pool
sudo touch file{1..20}

이렇게 하면 스토리지 풀에 20개의 파일이 생성됩니다.

각 스토리지 호스트의 /gluster-storage 디렉토리를 보면 이러한 모든 파일이 각 시스템에 있음을 알 수 있습니다.

# on gluster0.droplet.com and gluster1.droplet.com
cd /gluster-storage
ls
file1  file10  file11  file12  file13  file14  file15  file16  file17  file18  file19  file2  file20  file3  file4  file5  file6  file7  file8  file9

보시다시피 이것은 클라이언트의 데이터를 두 노드 모두에 기록했습니다.

스토리지 클러스터의 노드 중 하나가 다운되고 파일 시스템이 변경되는 지점이 있는 경우. 노드가 다시 온라인 상태가 된 후 클라이언트 마운트 지점에서 읽기 작업을 수행하면 누락된 파일을 가져오도록 경고해야 합니다.

ls /storage-pool

볼륨에 대한 액세스 제한

이제 스토리지 풀을 마운트하고 클러스터의 두 시스템 모두에 데이터를 복제할 수 있음을 확인했으므로 풀을 잠가야 합니다.

현재 모든 컴퓨터는 제한 없이 스토리지 볼륨에 연결할 수 있습니다. 볼륨에 옵션을 설정하여 이를 변경할 수 있습니다.

스토리지 노드 중 하나에서 다음을 입력합니다.

<예비>

이 명령에서 클러스터 클라이언트(gluster2)의 IP 주소를 대체해야 합니다. 현재 최소한 /etc/hosts 구성에서는 도메인 이름 제한이 제대로 작동하지 않습니다. 이 방법으로 제한을 설정하면 모든 트래픽이 차단됩니다. 대신 IP 주소를 사용해야 합니다.

언제든지 제한을 제거해야 하는 경우 다음을 입력할 수 있습니다.

sudo gluster volume set volume1 auth.allow *

이렇게 하면 모든 컴퓨터에서 다시 연결할 수 있습니다. 이는 안전하지 않지만 디버깅 문제에 유용할 수 있습니다.

클라이언트가 여러 개인 경우 쉼표로 구분하여 동시에 IP 주소를 지정할 수 있습니다.

<예비>

GlusterFS 명령으로 정보 얻기

GlusterFS 스토리지에 대한 일부 설정을 변경하기 시작하면 사용 가능한 옵션, 라이브 볼륨 및 각 볼륨과 연결된 노드에 대해 혼란스러울 수 있습니다.

이 데이터를 검색하고 스토리지 풀과 상호 작용하기 위해 노드에서 사용할 수 있는 다양한 명령이 있습니다.

각 볼륨에 대한 정보를 보려면 다음을 입력하십시오.

sudo gluster volume info
Volume Name: volume1
Type: Replicate
Volume ID: 3634df4a-90cd-4ef8-9179-3bfa43cca867
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster0.droplet.com:/gluster-storage
Brick2: gluster1.droplet.com:/gluster-storage
Options Reconfigured:
auth.allow: 111.111.1.11

마찬가지로 이 노드가 연결된 피어에 대한 정보를 얻으려면 다음을 입력할 수 있습니다.

sudo gluster peer status
Number of Peers: 1

Hostname: gluster0.droplet.com
Port: 24007
Uuid: 6f30f38e-b47d-4df1-b106-f33dfd18b265
State: Peer in Cluster (Connected)

각 노드의 성능에 대한 자세한 정보가 필요한 경우 다음을 입력하여 볼륨을 프로파일링할 수 있습니다.

<예비>

이 명령이 완료되면 다음을 입력하여 수집된 정보를 얻을 수 있습니다.

<예비> sudo gluster 볼륨 프로필 volume_name 정보\n <예비> 브릭: gluster1.droplet.com:/gluster-storage

누적 통계:

  0.00       0.00 us       0.00 us       0.00 us             20     RELEASE
  0.00       0.00 us       0.00 us       0.00 us              6  RELEASEDIR
 10.80     113.00 us     113.00 us     113.00 us              1    GETXATTR
 28.68     150.00 us     139.00 us     161.00 us              2      STATFS
 60.52     158.25 us     117.00 us     226.00 us              4      LOOKUP

Duration: 8629 seconds

데이터 읽기: 0바이트

이 명령으로 각 노드에 대한 많은 정보를 받게 됩니다.

각 노드에서 실행되는 모든 GlusterFS 관련 구성 요소 목록을 보려면 다음을 입력하십시오.

sudo gluster volume status
Status of volume: volume1
Gluster process                                         Port    Online  Pid
------------------------------------------------------------------------------
Brick gluster0.droplet.com:/gluster-storage             49152   Y       2808
Brick gluster1.droplet.com:/gluster-storage             49152   Y       2741
NFS Server on localhost                                 2049    Y       3271
Self-heal Daemon on localhost                           N/A     Y       2758
NFS Server on gluster0.droplet.com                      2049    Y       3211
Self-heal Daemon on gluster0.droplet.com                N/A     Y       2825
 
There are no active volume tasks

GlusterFS 저장소 볼륨을 관리하려는 경우 GlusterFS 콘솔을 사용하는 것이 좋습니다. 이렇게 하면 모든 작업 전에 sudo gluster를 입력하지 않고도 GlusterFS 환경과 상호 작용할 수 있습니다.

sudo gluster

이렇게 하면 명령을 입력할 수 있는 프롬프트가 표시됩니다. 이것은 자신을 지향하기에 좋은 것입니다.

help

완료되면 다음과 같이 종료합니다.

exit

결론

이 시점에서 두 개의 개별 서버에 동시에 쓸 수 있는 중복 스토리지 시스템이 있어야 합니다. 이는 많은 애플리케이션에 유용할 수 있으며 한 서버가 다운된 경우에도 데이터를 사용할 수 있도록 보장할 수 있습니다.

저스틴 엘링우드