* LVM configuration 파일 소개
/etc/lvm/lvm.conf 파일은 LVM의 동작을 구성한다. 이 파일은 locking 동작을 제어하는 설정, LVM 서명을 검사해야 하는 장치 및 기타 여러 동작을 제어하는 설정을 가지고 있다. 대부분 상황에서는 이 파일을 수정할 필요가 없다. 클러스터에서는 공유 스토리지로써 LVM을 사용하는 두가지 방법이 있는데, HA-LVM (High Availability LVM) 과 LVM 공유 볼륨 그룹 두가지이다. 각각 방식을 설정할 때lvm.conf의 수정이 필요하다.
* 클러스터 스토리지 방식 1 : High Availability LVM 방식
한번에 한 노드가 VG를 액세스하고, 그 VG안에 있는 LV에 액세스한다. HA-LVM은 xfs나 ext4같은 전통적인 파일시스템을 쓰는어플리케이션이 active/passive 형태로 클러스터를 사용할 때 좋은 선택이다. 데이터 커럽션을 막기 위해서, 단 하나의 노드만 vg에 액세스 가능하고 파일시스템 마운트가 가능하다.
HA-LVM 구성 전에, 모든 클러스터 노드에서 LVM을 먼저 설정해야 한다. 이 설정은 여러 노드에서 VG가 활성화되는것을 막기 위해 HA-LVM은 VG 메타데이터 안에 SYSTEM ID를 저장한다. 이 구성을 통해서, 해당 SYSTEM ID와 매치되는 그 볼륨 그룹과 그 볼륨그룹의LV만 활성화 될 수 있다. LVM 은 여러 타입의 SYSTEM ID를 지원하는데, uname 타입은 SYSTEM ID로써 호스트명을 사용한다. 이 방법은 구성하기 쉽다. uname 타입 구성을 지원하기 위해, 모든 클러스터 노드에서 /etc/lvm/lvm.conf를 수정하고, 거기서system_id_source 파라미터를 uname으로 변경하면 된다.
이 초기 설정이 끝나면, 평소대로 PV를 만들고 VG를 생성하고 LV를 만들면 된다.
HA LVM 생성 및 리소스 올리기
1. lvm conf 변경
nodea / nodeb / nodec 장비를 HA LVM 쓰도록 준비한다. 각 세 노드에서 /etc/lvm/lvm.conf 에서 아래 부분을 수정한다. (수정 전 백업파일을 꼭 만들도록 하자.)
그리고 각 세 노드에서 lvm systemid 명령으로 확인한다.
2. nodea에서, 평소대로 lvm 생성
PV 생성
VG 생성
VG를 만들때는, system id도 확인된다. 앞의 결과에서, LVM이 VG의 SYSTEM ID로 호스트명을 사용하는것을 알 수 있다. 이 구성에서는 nodea만 이 VG와 통신할 수 있는것이다. lvm systemid 명령, vgdisplay 명령에서도 해당 VG의 System ID를 확인할 수 있다.
LV 생성
참고로 이 LV에 이전에 FILESYSTEM 시그니쳐가 남아있는경우, 아래처럼 뜨는데 Y 하면 된다.
파일시스템 생성
3. nodea에서 halvm이라는 이름으로 LVM-activate 리소스 에이전트를 만든다.
이 에이전트는 HA-LVM 볼륨그룹을 관리하고, 또한 VG와 VG의 LV 활성화/비활성화를 담당한다. 이리소스는 생성할 때 halvmfs 리소스 그룹에 포함되게 한다. 이 리소스가 시작되면, 해당 리소스를 실행하는 노드에서 clustervg VG가 활성화된다.
4. nodea에 서 파일시스템 리소스를 만든다.
이름은 xfsfs이며, halvmfs 리소스 그룹에 포함된다. 이 파일시스템은 /dev/clustervg/clusterlv LV를 사용하며, 마운트 포인트는 /mnt이다.
LVM-activate 리소스가 먼저 생성되고, 그다음 Filesystem 리소스가 생성되어 순서대로 리소스가 올라가도록 해야한다.
5. 확인
* 클러스터 스토리지 방식 2 : LVM 공유 볼륨 그룹
VG와 LV가 모든 클러스터 노드에 모든 시간에 접근이 가능하다. 한번에 하나의 클러스터 노드에서만 VG에 액세스할 수 있는 HA-LVM과 달리, LVM 공유 VG와 LV는 모든 클러스터 노드에서 동시에 사용할 수 있다. 이를 위해 GFS2 파일시스템을 사용한다. GFS2 파일시스템과 함께 LV 공유 VG는 어플리케이션에서 모든 클러스터 노드에서 해당 데이터에 대한 동시 읽기/쓰기를 제공한다. 이 방식은 여러 노드가 동시에 공유 데이터에 접근하는 방식을 사용하므로, lvm.conf에서 LVM 공유 볼륨 그룹 방식을 구성해야 한다. 다만 실제로 수정하지는 않고 리소스로서 구성한다. 이 구성은 꽤 복잡한 작업이며, 다음 섹션에서 설명한다.
유의해야 할 것은, 클러스터되지 않은 파일시스템, ext4나 xfs를 LVM 공유 볼륨 그룹에서 사용해서는 안된다. 이렇게 구성하고 동시에I/O가 발생하면 해당 파일시스템은 커럽션과 부정합이 나타난다. 이는 데이터 손실을 야기시키므로 절대 해서는 안된다. ext4나 xfs를 사용하지 말고, 클러스터 파일시스템 GFS2와 같은걸 써라. GFS2는 여러 노드에서 동시에 마운트하고 액세스할 수 있다.
LVM 공유 볼륨 그룹을 사용할때, LVM 명령어는 모든 클러스터 내에서 메타데이터 변경을 관리하기 위해 로컬 LVM Locking 데몬(lvmlockd) 과 상호작용한다. 이러한 lvmlockd 프로세스는 각 클러스터 노드에서 실행되고 있어야만 한다. lvmlockd는 High Availability Add-on과 별개로 제공되는 Resilient storage Add-on의 부분 중 하나이며, lvm-2lockd rpm패키지에서 제공된다.
또한 서로 다른 노드에서 실행되고 있는 lvmlockd 프로세스들이 서로 자기들의 작업을 싱크로 하기위해, lvmlockd는 Distributed Lock Manager (DLM)에 의존한다. DLM은 dlm 커널 모듈과 커널 모듈을 pilot하는 dlm_controld 프로세스 두가지로 구성된다. 차례대로, dlm_controld 프로세스는 node membership을 위해 클러스터 infrastructure에 의존한다. dlm RPM 패키지가 DLM을 제공한다.
아래 그래픽은 모든 LVM 공유 볼륨 그룹 사이에 컴포넌트들이 상호작용하는것을 보여준다. DLM과 lvmlockd 인프라스트럭쳐가 구축된 후, 사용자는 전통적인 pvcreate, vgcreate, lvcreate 명령어로 LVM 공유 볼륨그룹을 관리할 수 있다.
LVM 공유 볼륨 그룹 구성을 위한 사전준비 : dlm, lvm2-lockd 구성
1. dlm, lvm2-lockd 설치
dlm은 클러스터 인프라에 의존하므로, 우선 인프라부터 설치해야 한다. 또한 이 인프라는 FENCE DEVICE까지 포함이 된다. 즉 dlm은 클러스터 구성과 펜스등에 연관이 있다는 것이다. dlm과 lvm2-lockd RPM을 각 노드에 설치한다.
2. dlm, lvm2-lockd 프로세스 구성
이제 이 두 dlm_controld와 lvmlockd 프로세스를 모든 노드에서 실행되어야 한다. 그런데 이것은 단순히 데몬으로 띄우는 것이 아니라 클러스터에서 띄워줘야 한다. 따라서 클러스터 리소스로서 이 두가지 프로세스를 실행해야 한다. 레드햇 클러스터에서는 위 두 프로세스를 컨트롤하기 위해 ocf:pacemaker:controld와 ocf:heartbeat:lvmlockd 리소스 에이전트 두가지를 제공한다.
두 리소스는 하나의 리소스 그룹에서, 정확한 순서대로 생성해야 한다. lvmlockd가 시작하기 전에 DLM이 먼저 시작해야 하기 때문이다. 아래 예시에서는 on-fail 파라미터 fence로 설정했는데, 이것은 어떤 노드에서 이 프로세스중 하나라도 fail이 되면 그 프로세스를 재시작하려고 시도하지 않고 해당 노드를 Fence 한다. 그만큼 이 리소스들은 매우 중요하다.
또한 이 프로세스들이 모든 클러스터 노드에서 무조건 실행되고 있어야 하기 때문에, 이 리소스 그룹을 clone 한다. interleave 파라미터를 true로 설정하는것은, 로컬 노드에서 dlm_controlled 프로세스가 시작되자마자 lvmlockd 프로세스가 시작될 수 있도록 하는 파라미터이다. 이 파라미터가 없으면 lvmlockd 리소스는 모든 노드에서 모든 dlm_controld 프로세스가 시작될 때까지 대기하게 된다.
3. 상태 확인
pcs status --full 명령을 사용하여, 클러스터와 클러스터 정보에 대한 모든 정보를 보게 한다. 아래 정보는 lock_group 리소스 그룹이 3개의 노드에 실행되고 있음을 보여준다.
4. 참고사항
HA-LVM과 달리, /etc/lvm/lvm.conf에 있는 system_id_source 파라미터를 건드리지 않는다. LVM 공유 VG의 경우, 기본값인 none 을 그대로 두면 된다.
LVM 공유 볼륨 그룹과 LV 생성, 그리고 리소스 생성
LVM 공유 VG 인프라스트럭쳐가 설치되었으면, 사용자는 이제 표준 lvm 명령어를 통해 vg와 lv를 생성할 수 있다. (몇가지 옵션을 넣어야 한다) 이 명령어는 한 노드에서만 실행하면 되고, 그 명령어는 lvmlockd가 복제하여 모든 노드에 구성을 실행한다. 참고로 LVM 공유 VG를 변경을 할 때는 lvmlockd가 모든 노드에서 살아있고 정상적이어야 한다.
1. PV 및 VG 생성하기
/dev/sdb에 대하여, 아래 명령을 수행한다. 또한 vgcreate 수행시 --shared 옵션을 넣는다. 이것은 일반적인 로컬 vg가 아닌 LVM 공유VG임을 의미한다.
이후 모든 노드에서, VG가 시작된다. 이 명령을 실행하지 않은 다른 모든 노드에서 VG가 lock을 사용하도록 해야한다. 아래와 같이 수행한다.
2. LV 생성하기
lvcreate에 --activate sy 옵션을 넣어야 한다. 이 옵션은 여러 노드가 LV를 동시에 활성화하고 사용할 수 있게 하는 옵션이다. 이 명령어는 한 노드에서만 하면 된다.
3. 파일시스템 생성
이와 같은 공유 논리 볼륨은 GFS2와 같은 클러스터 파일 시스템에 자주 사용된다. GFS2 파일 시스템으로 공유 논리 볼륨을 포맷하고 사용하는 방법은 내용이 많아 다음 섹션에서 전달한다.
4. LVM 공유 VG 리소스 올리기
공유 LV를 클러스터에서 사용하기 위해, 첫번째로 해당 노드에서 activate를 해야한다. RHEL HA 클러스터는 모든 클러스터 노드에서activation을 하기 위해 LVM-activate 라는 리소스 에이전트를 제공한다. 아래 예시는 lvmsharedvg/lv1 LV를 활성화하고LVMshared_group 리소스 그룹에 넣도록 sharedlv1 리소스를 생성한다. 또한 이 예시는 이러한 activation이 모든 클러스터 노드에 수행되도록 resource group를 clone 한다.
현재 해당 리소스 그룹 (LVMshared_group) 은 하나의 리소스만 가지고 있는 상태다. 사용자는 일반적으로 LV를 공유 파일시스템인GFS2로 포맷하고, 이 리소스 그룹의 두번째 리소스로서 파일시스템 마운트를 설정한다. 이것도 마찬가지로 모든 노드에 걸쳐 수행해야 한다. 위 3번 절차처럼 GFS2를 생성하고 마운트하는것은 이후 코스에서 다룬다.
마지막 리소스 그룹 (LVMshared_group) 을 생성한 후에는, 클러스터는 2개의 클론된 리소스 그룹을 가진다. 하나는 DLM과 lvmlockd 프로세스 가 있는 리소스 그룹, 그리고 다른 하나는 공유 LV활성화와 파일시스템 리소스 그룹. 총 2개이다.
공유 LV를 활성화하는것은 DLM과 lvmlockd 프로세스에 의존되므로, dlm, lvmlcokd 프로세스가 먼저 실행되고, 그 이후에 공유 lv 활성화하는 리소스 그룹이 실행되게 해야 한다. 그렇게 하기 위해 아래와 같이 order와 colocation 컨스트레인트를 두 그룹 사이에 설정해야 한다.
* References
lvmlockd(8) and dlm_controld(8) lvmsystemid(7) man pages
Knowledgebase: "Support Policies for RHEL Resilient Storage - dlm General Policies" https://access.redhat.com/articles/3068921
For more information, refer to the Configuring a GFS2 file system in a cluster chapter in the Configuring and managing high availability clusters guide at
For more information, refer to the LVM logical volumes in a Red Hat high availability cluster section in the Configuring and managing high availability clusters guide at
'High Availability > RH436 & EX436' 카테고리의 다른 글
[RH436/EX436] 11. SPoF, 클러스터 링크 추가, Fence Level 구성하기 (1) | 2024.02.08 |
---|---|
[RH436/EX436] 10. GFS2 Filesystem (1) | 2024.02.07 |
[RH436/EX436] 8. LVM Basic (1) | 2024.02.07 |
[RH436/EX436] 7. Multipath 구성 (2) | 2024.02.07 |
[RH436/EX436] 6. iSCSI 연결 (1) | 2024.02.06 |