자주 사용하는 SotrMan 명령어 

1) 버전 확인

 # /usr/StorMan/arcconf getversion 1

 

2) RaidCard 및 디스크 정보 확인

# /usr/StorMan/arcconf getconfig [Controller 번호] [옵션]

 

 * 전체 정보 확인

 #  /usr/StorMan/arcconf getconfig 1 al

 

 * Logical Device 정보 확인

 # /usr/StorMan/arcconf getconfig 1 ld

 

  * Physical Device 정보 확인

 # /usr/StorMan/arcconf getconfig 1 pd

 

3) 로그 확인

# /usr/StorMan/arcconf getlogs [Controller 번호] [옵션]

 

 * device 로그 확인

 # /usr/StorMan/arcconf getlogs 1 device

 

 * event 로그 확인

 # /usr/StorMan/arcconf getlogs 1 event

 

 * dead 로그 확인

 # /usr/StorMan/arcconf getlogs 1 dead

 

 * log clear 방법

 # /usr/StorMan/arcconf getlogs 1 device clear

 # /usr/StorMan/arcconf getlogs 1 event clear

 # /usr/StorMan/arcconf getlogs 1 dead clear

 

 4) LED로 디스크 위치 확인

 #  /usr/StorMan/arcconf identify [Controller 번호] device [Channel 번호] [ID 번호]

ex) /usr/StorMan/arcconf identify 1 device 0 2

'ETC > RaidCard' 카테고리의 다른 글

[CentOS] StorMan 설치  (0) 2022.10.28
Adaptec 6405 Quick Init -> Build/verify 변경  (0) 2022.03.25
Adaptec 6405 RaidCard building option  (0) 2022.03.25

1. StorMan rpm 파일 다운로드

 # cd /usr/local/src

 # wget http://download.adaptec.com/raid/storage_manager/msm_linux_x64_v2_05_22932.tgz 

 # tar xvfz msm_linux_x64_v2_05_22932.tgz

 # cd ./manager

 

2. StorMan 설치

 # rpm -Uvh StorMan-2.05-22932.x86_64.rpm

  - 원하는 옵션 선택 

 * 불필요한 stor_tomcat stop

# /etc/init.d/stor_tomcat stop

 

# vi /usr/StorMan/config/server.properties

localip=127.0.0.1 수정 

 

* iptables 방화벽 확인 

'ETC > RaidCard' 카테고리의 다른 글

StorMan 명령어 정리  (0) 2022.10.28
Adaptec 6405 Quick Init -> Build/verify 변경  (0) 2022.03.25
Adaptec 6405 RaidCard building option  (0) 2022.03.25

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 서비스 정상적으로 마스터로 넘어간것 확인가능

1. partition table이 가능한지 확인 

 * mysql 5.1 이상 버전부터 사용가능

 mysql> show variables like '%partition%';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
1 row in set (0.00 sec)

 

2. 파티션 분할 방법

 mysql> alter table [테이블 명] PARTITION BY RANGE ([파티션을 나눌 기준이 되는 index 값])

 (

 PARTITION [파티션 이름_1] VALUES LESS THAN ([index의 특정 값]),

 PARTITION [파티션 이름_2] VALUES LESS THAN MAXVALUE

 );

 

 ex) 

 mysql> alter table chk_history PARTITION BY RANGE (uidx)

 (

 PARTITION p202008 VALUES LESS THAN (6867072),

 PARTITION pmax VAUES LESS THEN MAXVALUE

 );

 → uid 값이 6867072 보다 적은 값은 p202008 파티션으로 분할하고 그 외의 값은 pmax 파티션에 분할

 

3. 파티션 추가 분할 방법

 mysql> alter talbe [테이블 이름] REOREGANIZE PARTION ([파티션 이름_2]) INTO

 (

 PARTITION [파티션 이름_3] VALUES LESS THAN ([index의 특정 값]),

 PARTITION [파티션 이름_2] VALUES LESS THAN MAXVALUE

 )

 

 ex)

 mysql> after table chk_history REORGANIZE PARTITION pmax INTO

 (

 PARTITION p202206 VALUES LESS THAN (13633138),

 PARTITION pmax VALUES LESS THAN MAXVALUE

 )

 -> pmax 파티션에서 uid 값이 13633138 값보다 작은 값들은 p202206 파티션으로 분할하고 나머지는 pmax 파티션에 분할

mysql 8.0 이상 버전은 패스워드 암호화 방식을 caching_sha2_password를 기본으로 사용

 

caching_sha2_password 암호화 방식은 보안연결을 사용하여 접속이 필요

 - SSL 보안연결을 사용

 - RSA 보안을 적용한 비암호 연결

 

php 7.4 이하 버전은 지원이 되지 않아 caching_sha2_password 방식 사용 불가

 

패스워드 인증 방식을 mysql5.6 이후 버전 방식인 mysql_native_password 방식으로 수정

 

1. 특정 계정 인증 방식 변경

mysql> ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';

 

2. mysql 설정 변경

 * 인증 방식 기본을 mysql_native_password 방식으로 사용하도록 설정

 # vi /etc/my.cnf

 --------------------------------------------------

 [mysqld]

 default_authentication_plugin=mysql_native_password

 --------------------------------------------------

 # /etc/init.d/mysql.server stop

 # /etc/init.d/mysql.server start

 

 - mysql_native_password를 기본 방식으로 수정한 경우 이미 생성된 계정은 암호 재설정 필요

 mysql> ALTER USER 'user'@'localhost' IDENTIFIED BY 'mypassword';

'MySQL,MariaDB > 설정' 카테고리의 다른 글

mysql partition table 설정  (0) 2022.08.19
MySQL Replication Master / Slave 변경  (0) 2022.08.19
MySQL Replication Error 오류 확인  (0) 2022.08.19
[CentOS] mysql replication (단방향)  (0) 2022.08.19

1. Master DB LOCK

 - Master 서버의 장애로 인해 변경하는 것이 아닌 경우 데이터 변경을 막기 위해 LOCK을 걸고 진행

 - 기존 Matser 서버에서 실행

 mysql>FLUSH TABLES WITH READ LOCK;

 

2. Slave → Master 설정

 1) replication 계정 생성

  - Slave 서버를 Master 로 변경하기 위해 Slave 서버에도 replication 계정 생성

  mysql>grant replication slave on *.* to repl_user@'121.000.000.000' identified by 'test!@#$';

 

 2) Slave 종료

 mysql> stop slave;

 mysql> show slave status\G → 정상 종료 확인

 3) master 설정 추가

 # vi /etc/my.cnf

----------------------------------------------------------------------------------------------
[mysqld]
server-id=2
log-bin=mysql-bin → binary log 파일 경로 설정 추가
binlog-do-db='repltestdb' → replicate-do-db 에서 binlog-do-db로 변경
binlog-ignore-db='testdb' → replicate-ignore-db 에서 binlog-ignore-db로 변경
#read_only → read_only 설정 주석 또는 제거
----------------------------------------------------------------------------------------------

 * 만약 log-bin=mysql-bin 설정이 이미 되어있는 경우에는 삭제 (재구동시 자동으로 생성)

 # rm -f mysql-bin.*

 

 # /etc/init.d/mysql.server restart → 재구동하여 적용

 

 4) Master 서버 정보 확인

 mysql> show master status;

 

3. Master -> Slave 설정

 1) slave 설정 추가

----------------------------------------------------------------------------------------------
[mysqld]
server-id=1
replicate-do-db='repltestdb' → binlog-do-db 에서 replicate-do-db 로 변경
replicate-ignore-db='testdb' → binlog-ignore-db 에서 replicate-ignore-db 로 변경
skip-slave-start
read_only → DB 데이터가 변경되는 것을 막기 위해 추가
----------------------------------------------------------------------------------------------

 # /etc/init.d/mysql.server restart → 재구동하여 적용

 

 2) master 연결 설정

mysql> change master to
master_host='121.000.000.000',
master_user='repl_user',
master_password='test!@#$',
master_log_file='mysql-bin.000001',
master_log_pos=154;

 

 3) Slave 시작

 mysql> start slave;

 mysql> show processlist\G → 연결 확인

 

 4. replication 구성 확인

 1) Master 서버에서 프로세스 연결 확인

  mysql>show processlist\G

 * State 에서 binlog를 slave로 전송하였으며 업데이트 대기중인 상태 확인

 

 2) Slave 서버에서 확인

  mysql>show processlist\G

  * State 에서 log를 읽었으며 업데이트 대기중인 상태 확인

 mysql> show slave status\G

 3) replication 확인

  1) Master 서버 DB 데이터 입력

   mysql>insert into user(no,name,det,tel) values(9,'Css','Lang'.'070-1234-1234');

 

  2) Slave 서버에서 DB 조회하여 확인

  mysql>select * from user;

1) 오류 종류

1. 통신오류

- mysql 프로세스 오류, 네트워크 단절을 포함한 master ↔ slave 간 통신 문제가 발생할 경우 발생
Slave_IO_Running 상태가 No 또는 Connecting 상태로 변경된다.

mysql> show slave status\G

2. SQL오류

- SQL 오류는 master 서버에서 실행된 쿼리가 slave 서버에서 실행이 불가능한 경우 발생
Slave_SQL_Running 상태가 No 상태로 변경된다.

 

mysql> show slave status\G

 

2) 테스트 환경

1. 통신 오류

방화벽이 차단된 상황

2. SQL 오류

SQL 권한 문제로 오류 발생한 상황

 

3) 오류 정보 확인

1. 통신 오류

slave status 정보 확인 사항

오류 발생시 확인해야할 정보
Last_Error 최근 발생 에러정보
Last_IO_Error 최근 발생 I/O 에러 정보
Last_IO_Errno 최근 발생 I/O 에러 코드번호

2. SQL 오류

- slave status 정보 확인 사항

오류 발생시 확인해야할 정보
Last_Error 최근 발생 에러정보
Last_SQL_Error 최근 발생 SQL 에러 정보
Last_SQL_Errno 최근 발생 SQL 에러 코드번호

 

 

4) 오류 발생시 체크 사항

- replication 오류는 다양한 이유로 발생하기 때문에 Error정보와 Error코드를 통해 원인 확인이 필요
(mysql 기술문서에서 에러 코드 확인 가능 https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.html )

1. 통신오류

통신오류는 연결이 비정상적인 상태이기에 Error정보와 Error코드가 에러원인과 다른 경우가 많이 있다.
오류가 발생할 수 있는 경우의 수를 하나씩 체크


- mysql 상태 확인

 * Master / Slave 서버 모두 mysql이 정상 실행중인지 확인

 

 # ps -ef | grep mysql  → 프로세스 동작 확인

 # netstat -tnlp | grep 3306(포트번호) → 실행 포트 확인

 # mysql -u root -p → 접속가능 여부 확인

 # tail -f /usr/local/mysql/data/error.log → mysql 에러로그 확인


네트워크 상태 확인

 * Master / Slave 서버 모두 네트워크 통신에 이상이 없는지 방화벽 허용이 되어있는지 확인

 # iptables -nL  → 방화벽 허용 확인

 # ifconfig, ethtool, ping → 네트워크 상태 확인


- replication 계정 확인

 * Slave 서버에서 Master 서버 replication 계정에 접속가능 하도록 허용되어 있는지 확인

  mysql > show grants for repl_user;

- max_allowed_packet 문제 확인

 * Master 서버의 허용패킷이 작아서 Slave 서버로 데이터가 정상 전달되지 못하여 에러발생

 mysql> show variables like 'max_allowed_packet'; -> 현재 설정값 확인(byte 단위)

 

2. SQL 오류

- SQL 오류는 master 서버에서 실행된 쿼리가 slave 서버에서 실행이 불가능한 경우 발생
- Error정보와 Error코드 확인이 중요

- 에러코드로 확인시 없는 테이블에 쿼리를 날린경우 발생하는 오류로 확인

 Error number 1146; Symbol: ER_NO_SUCH_TABLE; SQLSATATE:42s02

 Message: Table '$s.$s' doesn't exist

 

5) 오류 복구

1. mysql 프로세스 문제네트워크 문제

Replicaiton 자체 오류가 아닌 외부 요인으로 인한 오류로 문제 원인 해결시 대부분 자동으로 복구가 된다.
정상화 되었음에도 복구가 되지 않을 경우 slave 를 재시작하여 다시 적용
mysql> stop slave;
mysql> show slave status\G → 정상 종료 확인
mysql> start slave;
mysql> show slave status\G → 정상 연결 확인

Slave_IO_Running 상태가 Yes 로 복구되면 정상 연결된 상태

2.max_allowed_packet 문제

허용 값이 작아 에러가 발생한 경우 max_allowed_packet 크기를 올려준다.
mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 16;
mysql> SET SESSION max_allowed_packet = 1024 * 1024 * 16;
mysql> show variables like 'max_allowed_packet'; → 설정값 다시 확인

일시적으로 허용 값을 올린 상태로 지속적인 적용을 위해 my.cnf 에 설정 변경
# vi /etc/my.cnf

 

3. 일시적으로 발생한 SQL 오류

일시적으로 발생한 오류로 데이터에 영향을 주지않는 경우 skip 하여 오류 복구

mysql> stop slave;
mysql> show slave status\G → 정상 종료 확인
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; → 1개의 쿼리를 건너뛰고 replication 진행
mysql> start slave;
mysql> show slave status\G → 상태 확인


※ 동일한 에러가 자주 발생하거나 여러번 발생하여 skip 이 어려운 경우
Errorno 를 기준으로 스킵하도록 설정
# vi /etc/my.cnf
---------------------------------------------------------------------------------------------
[mysqld]
slave-skip-errors=1146 → Errorno 를 입력 (여래개의 경우 , 로 구분. 전체는 all 입력)
----------------------------------------------------------------------------------------------
# /etc/init.d/mysql.server restart
mysql> start slave;
mysql> show slave status\G → 상태 확인

 

4. 지속적이거나 장기간 발생한 오류

(1) 오랜시간 에러 지속으로 DB 차이가 다량 발생한 경우
(2) replication 지연이 발생하여 Seconds_Behind_Maseter 가 많이 증가한 경우
(3) 일시적인 에러지만 데이터 정합성에 영향에 주는 경우
(4) binlog 파일이 깨진 경우

- 위 경우들은 skip 할 수 없거나 skip 하여도 재발생 가능성이 높은 경우로 master 서버에 데이터로 replication 재설정이 필요하다

※ replication 재설정

- replication 설정할 DB를 master 서버에서 dump 생성

 mysql> FLUSH TABLES WITH READ LOCK;  → replication 구성간 데이터 변화를 막기 위해 Lock 상태로 전환

 mysql> show master status;   → slave 서버에 설정한 binary log 파일과 Position 확인

 # mysqldump -u root -p repltestdb > repltestdb.sql

 

 mysql>  show master status\G  → binary log 와 position 확인

 

- slave 종료 후 dump import
 mysql> stop slave;

 mysql> show slave status\G;  → slave 종료확인

 

 * Slave 서버에서 DB import

 # mysql -u root -p repltestdb < repltestdb.sql


- binary log 와 position 정보 수정
  mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=4179;

- slave 시작

 mysql> start slave;

상태 확인
 mysql> show slave status\G  → 상태확인


- master 서버 LOCK 해제

 mysql > UNLOCK TABLES;

Master 서버 구성

1. Replication 계정 생성

mysql ((none))>use mysql
mysql (mysql)> grant replication slave on *.* to [Replication ID]@localhost identified by ‘[Replication PW]’;
mysql (mysql)> grant replication slave on *.* to [Replication ID]@[Slave 서버 IP] identified by ‘[Replication PW]’;

2. my.cnf 수정 후 MySQL 재시작

# vi /etc/my.cnf
===================================================
[mysqld]
~
log-bin=[바이너리로그 파일 이름]

server-id=[1 ~ 2^32-1]
===================================================

# /etc/init.d/mysql.server restart
 

3. Master 정보 확인 (Slave 서버 설정에 필요)

mysql ((none))>show master status\G;

File: [바이너리로그 파일 이름].xxxxxx

Position: [로그 파일내 읽을 위치]

 

Slave 서버 구성

1-1. my.cnf 수정 후 재시작 (my.cnf 설정파일에서 설정하는 방법)

# vi /etc/my.cnf
===================================================
[mysqld]
~
replicate-do-db=’[복제하고자 하는 DB]’
server-id=[Master server-id 제외한 1 ~ 2^32-1 내의 숫자]
relay-log=[릴레이 로그 이름 및 위치]
expire_logs_days=[로그 파일 보관 일수]
slave-skip-errors=all
read_only

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

* slave-skip-errors=all 

Last_Error: Error 'Can't create database 'repl_db'; database exists' on query. Default database: 'repl_db'. Query: 'create database repl_db default character set utf8'

에러 발생하며 Slave 서버가 정상작동하지 않는경우가 발생

에러 발생시점부터 Master 서버로 부터 갱신된 쿼리를 실행하지 않게되므로 이에러를 skip 할수 있도록 옵션추가


# /etc/init.d/mysql.server restart

1-2. Replication Slave 설정 (mysql 들어가 설정하는 방법)

mysql ((none))> change master to  
  MASTER_HOST='[Master 서버 IP]',
  MASTER_USER='[Replication ID]',
  MASTER_PASSWORD='[Replication PW]',
  MASTER_PORT=[MySQL Port],
  MASTER_LOG_FILE='[Master File]',
  MASTER_LOG_POS=[Master Position];

 

2. Slave 정보 확인

mysql ((none))>show slave status\G;
Slave_IO_State: Waiting for master to send event Master_Host: [Master IP] Master_User: [Replication ID] Master_Port: [MySQL Port] Connect_Retry: 60 Master_Log_File: [Master File] Read_Master_Log_Pos: [Master Postion] Relay_Log_File: [Relay File] Relay_Log_Pos: [Master Position] Relay_Master_Log_File: [Master File] Slave_IO_Running: Yes Slave_SQL_Running: Yes
~
Slave_SQL_Running_State: Reading event from the relay log

위와 같이 Slave state 가 나와야 정상

logrotate 설정파일 생성

# cd /etc/logrotate.d

# vi apache

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

/usr/local/httpd2/logs/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
    /usr/local/httpd2/bin/apachectl graceful 2> /dev/null || true
    endscript
    dateext
}

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

 * missingok : 로그파일이 없어도 에러처리하지 않는다.

 * notifempty : 로그파일 용량이 0일 경우 rotate 하지 않는다.

 * sharedscripts : postrotate / endscript 스크립트 한번 실행

 * postrotate / endscript : 순환작업 후 실행할 작업 설정

 * dateext : 로그파일에 YYYYMMDD 형식의 확장자 추가

 

테스트

# /usr/sbin/logrotate -d /etc/logrotate.conf

 

실행

# /usr/sbin/logrotate /etc/logrotate.conf

 

logrotate 정상실행 되지 않을 경우 (로그디렉토리가 /usr 일 경우)

logrotate 테스트시 정상적으로 실행되었다고 나오나, 실질적으로 logrotate가 되지 않는경우가 있습니다.

 * /var/log/syslog 에러로그 

Aug  7 00:00:02 www systemd[1]: logrotate.service: Main process exited, code=exited, status=1/FAILURE
Aug  7 00:00:02 www systemd[1]: logrotate.service: Failed with result 'exit-code'.
Aug  7 00:00:02 www systemd[1]: Failed to start Rotate log files.

 

# vi /lib/systemd/system/logrotate.service

 * 최하단에 로그경로 추가

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

ReadWritePaths=/usr/local/httpd2/logs

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

 

+ Recent posts