DRBD + APM 서버 구축

OS

- CentOS Linux release 7.9.2009 (Core)

 

테스트에 사용한 IP

- 192.168.100.249(192.168.0.100) active.tyjung.site

- 192.168.100.251(192.168.0.101) standby.tyjung.site

- 192.168.100.254 VIP

 

DRBD 구성 파티션 (Active, Standby 동일)

/dev/xvda2 : /home

/dev/xvdb1 : /home2

 

(1) Pacemaker Cluster 구성

1. 사설망 연결을 위해 사설 IP 등록

# vi /etc/hosts

192.168.0.100   active.tyjung.site

192.168.0.101   standby.tyjung.site

 

* Pacemaker 

  ■ 데몬

   - Corosync : 클러스터 인프라 지원

   - Pacemaker : 클러스터 자원 관리자

   - PCS : Corosync / pacemaker 관리하는 Management 데몬

 

  ■ 방화벽 포트

   - TCP : 2224, 3121, 21064

   - UDP : 5405

 

2. Pacemaker 주요 패키지 설치

# yum install -y pacemaker corosync pcs psmisc policycoreutils-python

# systemctl enable pcsd

# systemctl enable corosync

# systemctl enable pacemaker

# systemctl start pcsd

 

3. Cluster Node 인증 설정

# pcs cluster auth active standby

Username : hacluster

Password : 

standby : Authorized

active : Authorized

 

4. Cluster 구성

# pcs cluster setup --name drbd_cluster active standby

 -> PCS로 클러스터 생성시, /etc/corosync/corosync.conf 파일 생성

 

# pcs cluster start --all

# pcs cluster enable --all

# pcs property set stonith-enabled-false

STONITH(Fencing Device) : 의도치 않은 동시 엑세스로 인한 데이터 손상을 보호함.

→ 클러스터 장애 시 해당 node를 끊어 공유 데이터의 무결성을 보장.

 

(2) DRBD 구성

1. 주요 패키지 설치

# yum install https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

# yum -y install kmod-drbd84 drbd84-utils

 

* drbd 모듈 확인 (확인 되지 않을 경우 모듈로드)

# lsmod | grep drbd

# modprobe drbd

drbd 585395 0

libcrc32c 12644 2 drbd,nf_conntrack

 

2. DRBD 설정 (Active, Standby)

# vi /etc/drbd.conf

============================

global {

usage-count yes;

}

common {

syncer {

}

}

resource "r0" {

protocol C;

startup {

wfc-timeout 0;

degr-wfc-timeout 120;

}

disk {

on-io-error detach;

}

net {

timeout 60;

connect-int 10;

ping-int 10;

max-buffers 2048;

max-epoch-size 2048;

}

 

on active.tyjung.site {

device /dev/drbd0;

disk /dev/xvda2;

address 192.168.0.100:7787;

meta-disk internal;

}

 

on standby.tyjung.site {

device /dev/drbd0;

disk /dev/xvda2;

address 192.168.0.101:7787;

meta-disk internal;

}

 

}

 

resource "r1" {

protocol C;

 

startup {

wfc-timeout 0;

degr-wfc-timeout 120;

}

disk {

on-io-error detach;

}

net {

timeout 60;

connect-int 10;

ping-int 10;

max-buffers 2048;

max-epoch-size 2048;

}

on active.tyjung.site {

device /dev/drbd1;

disk /dev/xvdb1;

address 192.168.0.100:7788;

meta-disk internal;

}

on standby.tyjung.site {

device /dev/drbd1;

disk /dev/xvdb1;

address 192.168.0.101:7788;

meta-disk internal;

}

 

}

============================

 

3. DRBD Metadata 생성 (Active, Standby)

 * metadata 생성전 DRBD 볼륨으로 사용할 공간은 파일 시스템이 생성되어 있지 않아야되며,

   미리 파일시스템이 생성된 상태면 dd명령어를 이용하여 MBR 영역을 제거

# drbdadm create-md r0

# drbdadm create-md r1

--== Thank you for participating in the global usage survey ==--

The server's response is:

 

you are the 4215th user to install this version

initializing activity log

initializing bitmap (960 KB) to all zero

Writing meta data...

New drbd meta data block successfully created.

Success

 

# systemctl start drbd

# systemctl status drbd

● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager.

Loaded: loaded (/usr/lib/systemd/system/drbd.service; disabled; vendor preset: disabled)

Active: active (exited)

Process: 5530 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS)

Main PID: 5530 (code=exited, status=0/SUCCESS)

CGroup: /system.slice/drbd.service

 

# cat /proc/drbd

GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2020-04-05 02:58:18

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:84 nr:35276312 dw:35276400 dr:2193 al:11 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:17160 nr:32202748 dw:32219932 dr:3497 al:16 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

* 네트워크 상태

StandAlone : 리소스가 아직 연결되지 않았거나, 사용자가 drbdadm disconnect를 사용하여 연결을 끊었거나, 인증 실패 또는 스플릿 브레인과 같은 이유로 연결이 끊어져 네트워크 구성이 가능하지 않은 상태.

 

Disconnecting : 연결이 끊어지는 동안의 일시적인 상태

→ 다음 상태: StandAlone

 

Unconnected : 연결을 시도하기 전의 일시적인 상태

→ 다음 상태: Connecting 또는 Connected.

 

Timeout : 상대 노드와의 통신 시간 초과에 따른 일시적인 상태

→ 다음 상태: Unconnected

 

BrokenPipe : 상대 노드와의 연결이 끊어진 후 일시적으로 표시되는 상태

NetworkFailure : 상대 노드와의 연결이 끊어진 후 일시적으로 표시되는 상태

ProtocolError : 상대 노드와의 연결이 끊어진 후 일시적으로 표시되는 상태

→ 다음 상태: Unconnected

 

TearDown : 상대 노드가 연결 종료 중임을 나타내는 일시적인 상태

→ 다음 상태: Unconnected

 

Connecting : 상대 노드가 네트워크에서 확인 되기를 기다리고 있는 상태

 

Connected : TCP 연결이 설정되었으며, 상대 노드로부터 첫 번째 네트워크 패킷을 기다림

 

* 복제 상태 (Replication states)

Off : 상대노드와 연결이 끊어졌거나, 복제가 진행되지 않는 상태

 

Established : 정상적으로 연결된 상태, WDRBD 연결이 설정되었으며 데이터 미러링이 활성화된 상태

 

WFConnection : 해당 노드가 네트워크에 표시될 때까지 기다리고 있는 상태.

 

WFReportParams : TCP 연결 설정이 정상적으로 되었으며, 해당 노드에서 네트워크 패킷을 기다리고 있는 상태.

 

SyncSource : 로컬 노드가 소스이고, 동기화가 진행 중인 상태

 

SyncTarget : 로컬 노드가 타겟이고, 동기화가 진행 중인 상태

 

VerifyS : 로컬 노드가 소스이고, On-line 디바이스 검증이 실행 중

 

VerifyT : 로컬 노드가 타겟이고, On-line 디바이스 검증이 실행 중

 

PausedSyncS : 로컬 노드가 소스이고, 다른 동기화 작업 완료에 대한 의존성 또는 수동 명령 (drbdadm pause-sync)에 의해 동기화가 일시 정지된 상태

 

PausedSyncT : 로컬 노드가 타겟이고, 다른 동기화 작업 완료에 대한 의존성 또는 수동 명령 (drbdadm pause-sync)에 의해 동기화가 일시 정지된 상태

 

Ahead : 로컬노드가 네트워크 혼잡상태에 도달하여 복제데이터를 전송할 수 없는 상태

→ (상대노드로 OOS Info 전송

 

Behind : 상대노드가 네트워크 혼잡상태에 도달하여 복제데이터를 수신할 수 없는 상태

→ 이후 SyncTarget 상태로 전환

 

* 디스크 상태(disk state)

Diskless : 디바이스가 드라이버에 할당되어 있지 않은 상태입니다. 리소스 디바이스에 부착된 적이 없거나, drbdadm detach <resource> 명령으로 수동 분리되었거나, lower-level I/O 오류 후에 자동으로 분리된 경우 이 상태가 됩니다.



Attaching : 메타 데이터를 읽는 동안의 일시적인 상태입니다.

 

Failed : 디바이스의 I/O 실패 보고에 따른 일시적인 상태입니다.

→ 다음 상태 : Diskless

 

Negotiating : 이미 연결된 WDRBD 디바이스에서 Attach 가 실행되었을 때, 디스크는 일시적으로 이 상태가 됩니다.

 

Inconsistent : 데이터의 불일치 상태입니다. 새로운 리소스를 구성했을 경우 양 노드의 상태이며, 동기화 중인 타겟 노드의 디스크 상태입니다.

 

Outdated : 리소스의 데이터가 일치하지만, 업데이트가 오래된 상태 입니다.

 

Dunknown : 네트워크 연결을 사용할 수 없는 경우, 원격 디스크의 상태를 표시하기 위해 사용됩니다.

 

Consistent : 노드가 연결되지 않았지만, 데이터는 일치한 상태입니다. 연결이 완료되면, UpToDate 인지 Outdated인지 결정됩니다.

 

UpToDate : 데이터가 일치하고, up-to-date 상태입니다. 이는 정상 상태입니다.

 

4. Primary 지정 및 파일시스템 생성 (Active)

# drbdadm primary --force r0

# drbdadm primary --force r1

 

# mkfs.ext4 /dev/drbd0

# mkfs.ext4 /dev/drbd1

 

# mount /dev/drbd0 /home

# mount /dev/drbd1 /home2

 

/dev/drbd0 ext4 33G 49M 31G 1% /home

/dev/drbd1 ext4 30G 45M 28G 1% /home2

 

5. DRBD Test

* DRBD 구성된 파티션에 아래와 같은 데이터 존재

[active.tyjung.site]

# umount /dev/drbd0

# umount /dev/drbd1

 

# drbdadm secondary r0

# drbdadm secondary r1

 

[standby.tyjung.site]

# drbdadm primary r0

# drbdadm primary r1

 

# mount /dev/drbd0 /home

# mount /dev/drbd1 /home2

# cd /home2; ls -al

 

(3) APACHE, MYSQL 설정

1. 설정파일 이동

양쪽 서버의 설정이 동일해야 하는 설정들은 drbd 구성한 파티션으로 이동

 * apache 설정파일

 * mysql data

 * my.cnf

 * php.ini

 

2. 각 설정 파일 링크

# ln -s /home2/APACHE_CONF /usr/local/httpd2/conf

# ln -s /home2/MYSQL_DATA /usr/local/mysql/data

# ln -s /home2/my.cnf /etc/my.cnf

# ln -s /home2/php.ini /usr/local/lib/php.ini

 

3. apache 설정

# vi /usr/local/httpd2/conf/vhosts.conf

===============================

<VirtualHost *:80>

ServerAdmin test@tyjung.site

DocumentRoot /home/tyjung.site/docs

ServerName tyjung.site

CustomLog logs/tyjung.site-access_log combined

ErrorLog logs/tyjung.site-error_log

</VirtualHost>

===============================

 

# vi /home/tyjung.site/docs/index.php

===============================

<?php

$db_host = "localhost";

$db_user = "tyjung";

$db_passwd = "tyjung$!$@";

$db_name = "tyjung";

$db_conn = mysqli_connect($db_host,$db_user,$db_passwd,$db_name);

if(!$db_conn)

echo "Mysql Session Connect Fail!!!!!";

else

echo "This is tyjung.site DRBD Testing Server. Mysql connect success";

?>

===============================

 

4. mysql 설정

mysql ((none))>create database hkchoi;

Query OK, 1 row affected (0.01 sec)

 

mysql ((none))>grant all privileges on tyjung.* to tyjung@localhost identified by 'tyjung$!$@';

Query OK, 0 rows affected (0.00 sec)

 

mysql ((none))>flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

(4) pcs resource 생성

CIB(Cluster Information Base) : Raw xml 에 우선 설정을 저장 후 업데이트 하는 방식으로 진행

 

# pcs cluster cib drbd_cfg 

 → 'drbd_cfg' 파일을 cib 형식으로 생성.

 

# pcs -f drbd_cfg resource create Data1 ocf:linbit:drbd drbd_resource=r0 op monitor timeout="30" interval="20" role="Master" op monitor timeout="30" interval="10" role="Slave"

→ “drbd r0” 리소스의 대한 설정으로 Primary/Secondary가 변경이 된다.

 

# pcs -f drbd_cfg resource create Data2 ocf:linbit:drbd drbd_resource=r1 op monitor timeout="30" interval="20" role="Master" op monitor timeout="30" interval="10" role="Slave"

→ “drbd r1” 리소스의 대한 설정으로 Primary/Secondary가 변경이 된다.

 

# pcs -f drbd_cfg resource master DataSync1 Data1 master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

# pcs -f drbd_cfg resource master DataSync2 Data2 master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

→ Data1, Data2 각 리소스의 Master / Slave 구성 제약조건.

=================================================

→ 각 [Data1], [Data2] Resource에 대한 제약 조건.

ex) pcs resource master [<master/slave id>] <resource id | group id> [options]

 

- master-max = 1

마스터로 승격시킬 수있는 자원의 매수

 

- master-node-max = 1

하나의 노드에서 마스터로 승격시킬 수있는 자원의 매수

 

- clone-max = 2

시작할 리소스 복사본 수로, 기본값은 클러스터의 노드 수

 

- clone-node-max = 1

단일 노드에서 시작할 수 있는 리소스 복사본 수

 

- notify = true

복사본을 중지하거나 시작할때 모든 복사본을 미리 알리고, 작업 성공시 알려준다.

=================================================

# pcs -f drbd_cfg resource create storage1 ocf:heartbeat:Filesystem device="/dev/drbd0" directory="/home" fstype="ext4"

# pcs -f drbd_cfg resource create storage2 ocf:heartbeat:Filesystem device="/dev/drbd1" directory="/home2" fstype="ext4"

drbd 파티션과 파일시스템을 지정하여 mount 시키는 리소스로, 노드별로 Master 노드에 마운트 시킨다.

 

# pcs -f drbd_cfg resource create VirtualIP ocf:heartbeat:IPaddr2 ip=121.254.171.254 cidr_netmask=32 nic=eth0:1 op monitor timeout="30" interval="20" role="Master" op monitor timeout="30" interval="10" role="Slave"

→ VIP에 대한 Resource 설정.

 

# pcs -f drbd_cfg resource create Apache lsb:apache op monitor timeout="30s" interval="20s" role="Master" op monitor timeout="30s" interval="10s" role="Slave"

=================================================

→ /etc/init.d/ 경로에 아래와 같은 스크립트 작성

#!/bin/sh

 

case "$1" in

start)

echo -n "Starting apahce: "

/usr/local/httpd2/bin/apachectl start

;;

stop)

echo -n "Shutting down apache"

/usr/local/httpd2/bin/apachectl stop

;;

*)

echo "Usage: $0 {start|stop}"

esac

 

exit 0

=================================================

# pcs -f drbd_cfg resource create Mysql lsb:mysql.server op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s

 

# pcs -f drbd_cfg resource group add HA-GROUP VirtualIP storage1 storage2 Apache Mysql

→ HA-GROUP에 VIP, DRBD mount, Apache, Mysql 순서대로 구동되도록 그룹화.

 

# pcs -f drbd_cfg constraint colocation add HA-GROUP DataSync1 INFINITY with-rsc-role=Master

# pcs -f drbd_cfg constraint colocation add HA-GROUP DataSync2 INFINITY with-rsc-role=Master

→ HA-GROUP & DataSync 리소스의 Master 가 공통된 Master 에서 실행되도록 설정.

 

# pcs -f drbd_cfg constraint order promote DataSync1 then start storage1

→ DataSync1 리소스가 실행된 후 storge1 리소스 (/dev/drbd0 mount) 실행

 

# pcs -f drbd_cfg constraint order promote DataSync2 then start storage2

→ DataSync2 리소스가 실행된 후 storge2 리소스 (/dev/drbd1 mount) 실행

 

(5) 리소스 확인

# pcs status

Online: [ standby ]

OFFLINE: [ active ]

 

Full list of resources:

 

Master/Slave Set: DataSync1 [Data1]

Masters: [ standby ]

Stopped: [ active ]

Master/Slave Set: DataSync2 [Data2]

Masters: [ standby ]

Stopped: [ active ]

Resource Group: HA-GROUP

VirtualIP (ocf::heartbeat:IPaddr2): Started standby

storage1 (ocf::heartbeat:Filesystem): Started standby

storage2 (ocf::heartbeat:Filesystem): Started standby

Apache (lsb:apache): Started standby

Mysql (lsb:mysql.server): Started standby

'서버 이중화 > Pacemaker' 카테고리의 다른 글

[CentOS 7 / Pacemaker] LVS 서버 구축 및 테스트  (0) 2022.08.19

◆ LVS 구축

OS

- CentOS Linux release 7.9.2009 (Core)

 

테스트에 사용한 IP

- 192.168.0.250 LVS-Master

- 192.168.0.251 LVS-Slave

- 192.168.0.254 VIP

- 192.168.0.249 WEB1 (Real Server)

 

■ 구성에 사용되는 데몬

- Corosync : 클러스터 인프라 지원(Quorum 관리, 메세지 관리 등)

- Pacemaker : 클러스터 자원 관리자

- PCS : Corosync / pacemaker 관리하는 Management 데몬

 

(1) Pacemaker (LVS-Master , LVS-Slave)

- hosts 파일에 호스트 등록

# vi /etc/hosts

====================================

121.254.171.250 lvsm lvsm.test.shop

121.254.171.251 lvss lvss.test.shop

====================================

 

- sysctl.conf 파일에 net.ipv4.ip_forward 수치를 0에서 1로 변경

→ 커널에서 IP 포워딩이 가능하도록 기능 활성화.

# vi /etc/sysctl.conf

====================================

net.ipv4.ip_forward = 1

#sysctp -p

====================================

 

- 주요 패키지 설치

# yum install -y pacemaker corosync pcs psmisc policycoreutils-python

# systemctl enable pcsd

# systemctl enable corosync

# systemctl enable pacemaker

 

- PCS 데몬 구동 및 노드간 통신을 위해 관리계정 (hacluster) 패스워드 설정

Master, Slave 모두 동일한 패스워드로 설정

노드간 로그인을 통해 corosync 구성을 동기화 하거나, 다른 노드에서 클러스터 실행 및 중지 작업 수행에 必

# systemctl start pcsd

# password hacluster

 

- Cluster Node 인증 설정

→ 마스터 서버에서 인증을 진행하여도 슬레이브 서버까지 반영이 됨.

# pcs cluster auth lvsm lvss

Username: hacluster

Password:

Error: Operation timed out

Error: Unable to communicate with lvss

Error: Unable to communicate with lvsm

 

→ 노드간 통신이 되지 않아 발생한 에러로 아래의 포트를 방화벽에서 오픈.

◇ TCP : 2224, 3121, 21064

◇ UDP : 5405

 

# 방화벽 오픈 후 정상적으로 인증 완료.

lvss: Authorized

lvsm: Authorized

 

- Cluster 생성 및 Node 추가

# pcs cluster setup --name lvs_cluster lvsm lvss

- Cluster 활성화 및 시작

# pcs cluster start --all

# pcs cluster enable --all

→ 노드간 통신은 UDP 포트를 이용하여 통신 하는 것으로 확인.

 # pcs status

- Cluster 기본 셋팅

STONITH(Fencing Device) : 의도치 않은 동시 엑세스로 인한 데이터 손상을 보호함.

→ 클러스터 장애 시 해당 node를 끊어 공유 데이터의 무결성을 보장.

no-quorum-policy : 클러스터에 quorum이 없을 때의 수행작업을 설정.

 

# pcs property set stonith-enabled=false

→ Fencing Device 기능 비활성화

# pcs property set no-quorum-policy=ignore

→ 2개의 node로 구성 시 일반적으로 사용하는 옵션이며, 해당 설정이 안되어 있을 경우, 클러스터 간에 failover 시 부자연스러울 수 있음.

 

# pcs property show

* VIP 설정

# pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.254 cidr_netmask=32 nic=eth0:1 op monitor interval=30s

 * Cluset resource 설정 방법.

→ pcs resource disable [Cluster name] / 비활성화

→ pcs resource enable [Cluster name] / 활성화

→ pcs resource delete [Cluster name] / 제거

 

 * Pcs Resourece 에이전트

□ lsb ( Linux Standard Base) : /etc/init.d 아래에 존재하는 스크립트이며 OS 배포판에서 제공.

□ ocf (Open Cluster Framework) : 기본적으로 제공하는 LSB 인스텐션으로 /lib/ocf/resource.d 경로에서 기본 스크립트를 확인할 수 있음.

□ systemd : 기본 리눅스 service 관리 파일.

 

(2) ldirectord 설정

- Real Server VIP 추가

# vi /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0

IPADDR=192.168.0.254

NETMASK=255.255.255.255

ONBOOT=no

 

- Real Server Sysctl 설정 추가

→ 해당 설정을 하지 않을 경우 lo:0에서 VIP의 MAC 주소를 가져오려는 시도가 계속됨.

# vi /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.eth0.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.eth0.arp_announce = 2

 

# sysctp -p

 

- ldirectord 설치

# cd /usr/local/src/;wget --content-disposition https://packagecloud.io/s_mcleod/pacemaker/packages/el/7/ldirectord-4.0.1-1.84.caee.el7.centos.x86_64.rpm/download.rpm

 

# yum -y install ldirectord-4.0.1-1.84.caee.el7.centos.x86_64.rpm

 

- ldirectord 설정 및 resource 추가

# vi /etc/ha.d/ldirectord.cf

=============================

checktimeout=10

checkinterval=10

autoreload=no

quiescent=no

 

# HTTP Service

virtual = 192.168.0.254:80

real=192.168.0.249:80 gate 10

service=http

scheduler=wlc

persistent=3600

protocol=tcp

checkport=80

checktype=connect

=============================

 

- ldirctord Reousrce 추가.

# pcs resource create ldirectord lsb:ldirectord op monitor interval="20" timeout="10"

 

- pcs resource를 group으로 관리 가능.

→ VIP와 ldirectord

[ex] pcs resource group add [Group ID] [Resource ID] [Resource ID2]

# pcs resource group add WebSite VirtualIP ldirectord

 

- Constraint

Constraint ?

- Pacemaker 를 통해 리소스 위치나 순서, 동거 조건을 제약하는 설정.

- Score 점수를 통해 여러 설정이 가능하므로, 설정 방법에 대해서는 알고 있어야 함.

 

1) Constraint 값 확인.

# crm_simulate -sL

- Pacemaker를 시작할 때 리소스가 어느 node에서 설정을 가져갈지 예상하는 시뮬레이션 값.

 

# pcs constraint show

- constraint 설정 값 확인하는 명령어.


2) Location 설정 추가
- Locaiton : 시작 노드를 제약하는 명령으로, 해당 노드의 상태를 평가하고 그것에 매치하였을 경우 점수 값을 부여.
[ex] pcs constraint location [Resource Name] prefers <[Node Name]=Score >
주의사항 : Score값을 지정하지 않을 경우 가장 높은 우선순위인 'INFINITY' 값을 부여.

 

# pcs constraint location ldirectord prefers lvsm=50

# crm_simulate -sL

→ 스코어 점수가 높은 node로 이동되는 모습을 확인 할수 있음.

 

3) Colocation을 통한 리소스 그룹화

- Colocation : 지정된 자원이 동일 노드에서 시작하는 것에 대한 점수 값을 부여.

[ex] pcs constarint colocation add <resouce id> with <resource name>

# pcs constraint colocation add VirtualIP with ldirectord

마스터 서버에서 리소스를 가져 갈때 자동으로 lvss에 (-)INFINITY 값을 부여하여 마스터 서버에서 리소스를 가져가게 설정이 됨.
lvsm을 standby 로 두었을 경우 lvsm 노드에 (-)INFINITY 값이 부여되는 것으로 테스트 확인

 

4) Order을 통한 순서 설정

- Order : 어떠한 리소스가 먼저 시작되고 늦게 시작될 것인지(순서) 점수 값을 부여.

[ex] pcs constraint order [action] <resource name> then <resource name>

# pcs constraint order start VirtaulIP then ldirectord

구동 순서에 맞게 순서를 부여하여 서비스 가능 [ex) VIP → ldirctord → mysql → apache ..]

 

5) constraint 설정 제거

- constraint ID 값을 아래의 명령어로 확인하여 설정 제거 진행.

 

# pcs constraint show --full

Location Constraints:

Resource: VirtualIP

Enabled on: lvsm (score:50) (id:location-VirtualIP-lvsm-50)

Resource: ldirectord

Enabled on: lvsm (score:50) (id:location-ldirectord-lvsm-50)

 

[ex] pcs constraint remove [constraint ID 값]
 # pcs constraint remove location-ldirectord-lvsm-50

 

(3) 접속 테스트

 ◇ Web Real Server : Input TCP 80 포트 오픈.

 # ipvsadm -Ln

 

 

 (4) failover 테스트

 - failover 테스트 전 환경 확인

마스터 서버에서 리소스에 대한 서비스 실행주임을 확인

 - lvsm standby로 이동하여 failover 발생 테스트 진행

 # pcs cluster standby lvsm

standby로 변경된 후 lvss 서버에서 서비스를 가져감

 * VIP, ldirctord 설정을 constraint colocation으로 묶어두어 동일하게 서비스가 넘어가는 것을 확인

 

(5) failover 장애복구 테스트

 - LVS 마스터 서버 장애 복구하여 서비스 테스트 확인

 # pcs cluster unstandby lvsm

장애가 복구되었지만 auto_failback off 정책에 따라 자동으로 마스터 노드로 복구가되지 않는것 확인

장애복구 후 수동으로 엔지니어가 마스터 노드로 넘겨야 함.

 

# Slave Server

# pcs cluster standby lvss

# pcs cluster unstandby lvss

-> VIP, ldirectord 서비스 정상적으로 마스터로 넘어간것 확인가능

+ Recent posts