본문 바로가기
open source solution

DRBD+Pacemaker Ubuntu 18.04

by open_tracking 2020. 7. 10.

주의

첫번째 노드, 두번째 모두 둘 다는 명령어가 일반 검정색

한쪽에만 해줄 경우 명령어가 빨간색

 

ubuntu desktop 기준입니다.

server OS에는 HA내부 랜선끼리 방화벽 허용과 apparmor가 셋팅이 추가로 필요합니다.
(보안이 올라가는대신 전체적인 셋팅난이도가 올라갑니다.)

 

ubuntu18.04 Pacemaker + DRBD + mariaDB 10.2 + tomcat

 

pacemaker 등록방법을 예시로 들기위해서 tomcat하고 mariadb 예시가 있는 것이지

그대로따라하시면 2가지 패키지는 버전마다 다 다르고 환경에 따라 다 다릅니다.

 

파일 시스템 ext4 or xfs / 이중화할 데이터 공간은 파티션 만들지 말고 비워둘 것.

 

아이피 설정은 생략합니다.

1. hostname 설정

# hostnamectl set-hostname node1  << 노드 1번에 해주시고

# hostnamectl set-hostname node2  << 노드 2번에 해줍니다.

 

2. 호스트 파일 설정

# vi /etc/hosts

           192.168.130.110            node1

           192.168.130.120            node2

3. 필요한 패키지 설치

# apt install -y pacemaker pcs 

# apt install -y drbd8-utils

 

# mv apache-tomcat-8.5.34.tar.gz /root    (해당 파일 경로가 있는 곳에서 )

# cd /root

# tar xvfz apache-tomcat-8.5.34.tar.gz

 

톰캣 관련 환경 변수 설정

vi /etc/profile (최하단에 추가)

# tomcat

export CATALINA_HOME=/data/tomcat8.5

# java

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre

 

4. 방화벽 설정

# ufw allow 8443/tcp

# ufw allow 7789/tcp

#ufw allow 3306/tcp

 

5. DRBD모듈

# modprobe drbd

# lsmod | grep drbd  (확인작업)

drbd                  405309  0

libcrc32c              12644  2 xfs,drbd

 

6. DRBD 설정

# vi /etc/drbd.d/clusterdata.res

resource "clusterdata" {

     protocol C;

     startup {

     wfc-timeout       0;

    degr-wfc-timeout  120;   

     }

     disk {

        on-io-error detach;

        resync-rate 300M;

     }

    net {

        timeout             60;    

        connect-int         10;    

        ping-int            10;

max-buffers         20000;

        unplug-watermark    20000;

        max-epoch-size      20000;

    }

on node1 {

        device /dev/drbd0;

        disk /dev/sdb1;

        address 100.100.10.201:7789;

        meta-disk internal;

    }

on node2 {

        device /dev/drbd0;

        disk /dev/sdb1;

        address 100.100.10.202:7789;

        meta-disk internal;

    }

}

7. 파티션 설정

           7-1 MBR 파티션 일 경우.

아래 작업은 MBR파티션이고 시작 시 /data로 쓸 공간이 OS 설치시 비워 있을 때 입니다.

                      예를들어 500GB /data 영역으로 사용시 해당 용량 만큼 (넉넉히 501GB이상)남기고

OS설치시 할당하지 않고 남겨놔야 합니다.

# fdisk /dev/sdb (디스크에 따라 달라질 수 있음)

                      적절하게 sdb1으로 설정.

           7-2 GPT 파티션 일 경우.

아래 작업은 GPT파티션이고 시작 시 /data로 쓸 공간을 OS 설치시 비워 있을 때 입니다.

세부 설명은 위와 같으며 아래 예를 들어 설명 하겠습니다.

# parted

GNU Parted 3.1

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

# (parted) p

Model: Msft Virtual Disk (scsi)

Disk /dev/sda: 37.6GB

Sector size (logical/physical): 512B/4096B

Partition Table: gpt

Disk Flags:

 

Number  Start   End     Size    File system     Name                  Flags

 1      1049kB  525MB   524MB   fat16           EFI System Partition  boot

 2      525MB   1050MB  524MB   xfs

 3      1050MB  22.5GB  21.5GB  xfs

 4      22.5GB  24.7GB  2147MB  linux-swap(v1)

                      # (parted) unit GB                     // 최소용량 단위 설정

                      예를 들면 아래처럼 합니다. 저는 5GB만 하겠습니다. (pc용량이 부족해서..)

# (parted) mkpart

Partition name?  []?

File system type?  [ext2]? xfs

Start? 30.0GB

End? 35.0GB

# (parted) p

Model: Msft Virtual Disk (scsi)

Disk /dev/sda: 37.6GB

Sector size (logical/physical): 512B/4096B

Partition Table: gpt

Disk Flags:

 

Number  Start   End     Size    File system     Name                  Flags

                     1      0.00GB  0.53GB  0.52GB  fat16           EFI System Partition  boot

                     2      0.53GB  1.05GB  0.52GB  xfs

                     3      1.05GB  22.5GB  21.5GB  xfs

                     4      22.5GB  24.7GB  2.15GB  linux-swap(v1)

                     5      30.0GB  35.0GB  5.00GB

 

#(parted) q

 

8. DRBD 메타데이터 생성 및 동기화

 

# drbdadm create-md clusterdata

# systemctl start drbd

# drbdadm primary clusterdata                         <<마스터 로드에만

           # drbdadm primary clusterdata --force                          << 오류발생시 잠시 후 실행

                     0: State change failed: (-2) Need access to UpToDate data

                     위와 같은 오류가 뜰 때

                                # drbdadm up clusterdata

                                # drbdadm primary clusterdata --force

# watch cat /proc/drbd                           (100%까지 차는 거 보시고 진행하세요)

동기화 다 되면 아래에 사항들 진행할 것.

# mkfs.xfs /dev/drbd0                                                         <<마스터 로드에만

만약 운영체제가 ext4라면 xfs대신 ext4 사용할 것.

, ext4, xfs는 되는데 ext3는 안되더라구요;;; 나머지 파티션에 대해 확인 안됬습니다.

# mkdir /data

# mount /dev/drbd0 /data                                                   <<마스터 노드에서만

 

9. Mariadb설치

           # vi /etc/my.cnf

 

           [client]

default-character-set           = utf8

socket                          = /data/mysql/mysql.sock

 

[mysql]

default-character-set           = utf8

 

[mysqld]

character-set-server            = utf8

collation-server                = utf8_general_ci

datadir                         = /data/mysql

socket                          = /data/mysql/mysql.sock

 

[mysqldump]

default-character-set           = utf8

 

          

# cp -rfp /var/lib/mysql /data/mysql                 <<마스터 로드에만

# mv /var/lib/mysql /var/lib/mysql.back             <<마스터 로드에만

# ln -sf /data/mysql /var/lib/mysql                   <<마스터 로드에만

          

# mysql_install_db --datadir=/data/mysql                                            <<마스터 로드에만

# systemctl start mariadb                                                                          <<마스터 로드에만

(실패시 chown -R mysql.mysql /data/mysql/ 적용)          

# mysqladmin -u root password '설정하실패스워드'                                           <<마스터 로드에만

< mysql 접속하셔서 잘 접속되는지 확인하시는 것을 권장 드립니다.>

 

# systemctl stop mariadb                                              <<마스터 로드에만

# umount /data                                                           <<마스터 로드에만

# drbdadm secondary all                                               << 현 마스터 로드

 

슬레이브였던 노드에서 해야 할 작업

# drbd-overview                                          << 슬레이브였던 노드 (즉 node2)

0:clusterdata/0  Connected Secondary /Secondary UpToDate/UpToDate 되어 있다면

 

# drbdadm primary clusterdata                        << 슬레이브였던 노드 (즉 node2)

# mount /dev/drbd0 /data                              << 슬레이브였던 노드 (즉 node2)

# drbd-overview                                           << 슬레이브였던 노드 (즉 node2)

0:clusterdata/0  Connected Primary/Secondary UpToDate/UpToDate /data xfs 1017M 290M 727M 29%

위와 유사하게 나와야 합니다. %는 달라도 무관

 

# mv /var/lib/mysql /var/lib/mysql.back

# ln -sf /data/mysql /var/lib/mysql

 

# systemctl start mysql

           <접속 잘 되시는 지 확인>

 

#systemctl stop mysql

다시 슬레이브 마스터 위치를 변경 합니다.

# systemctl stop drbd                                    << node2

# systemctl start drbd                                    << node2

# drbdadm primary all                                   << node1

# mount /dev/drbd0 /data                              << node1

# drbd-overview                                           << node1

           노드 1번에서 primary되있고 data가 뜨는지 확인

 

 

10. 이중화에 앞서 몇가지 주의 사항 (두 노드 둘다 입니다.)

# systemctl disable mariadb

# systemctl stop mariadb

# systemctl disable mysql

( mysql이 등록되있는지 모르겠는데 자동으로 그것도 chkconfig에 등록이 되어있더라구요.
확인하고 등록이 안 되 있다면 생략 가능합니다.)

11. 추가사항 톰켓

# mv apache-tomcat-8.5.34 /data/tomcat8.5                     <<마스터 로드에서만

# vi /usr/lib/systemd/system/tomcat.service

[Unit]

Description=Apache Tomcat Web Application Container

After=syslog.target network.target

 

[Service]

Type=forking

 

Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre"

Environment="CATALINA_PID=/data/tomcat8.5/temp/tomcat.pid"

Environment="CATALINA_HOME=/data/tomcat8.5"

Environment="CATALINA_BASE=/data/tomcat8.5"

Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

 

ExecStart=/data/tomcat8.5/bin/startup.sh

ExecStop=/data/tomcat8.5/bin/shutdown.sh

 

User=root

Group=root

UMask=0007

RestartSec=10

Restart=always

 

find[Install]

WantedBy=multi-user.target

 

12. PCS 클러스터 핵심 셋팅 ( 빨간 색은 마스터 로드만 해주세요 )

# echo "설정하실패스워드" | passwd --stdin hacluster

# systemctl enable drbd

# systemctl start drbd

# systemctl start pcsd

# systemctl enable pcsd

# pcs cluster auth node1 node2 -u hacluster                        <<마스터 로드에만

# pcs cluster setup --name FileCluster node1 node2                    <<마스터 로드에만

# pcs cluster start –-all                                                          <<마스터 로드에만

                     오류가 뜬다면 각각 로드에 pcs cluster start 해주기

 

# pcs cluster enable –-all                                                       <<마스터 로드에만

           마찬가지 오류가 뜬다면 각각 노드에 pcs cluster enable

 

# pcs status                                                                      <<마스터 로드에만

# pcs property set stonith-enabled=false                                    <<마스터 로드에만

# pcs property set no-quorum-policy=ignore                               <<마스터 로드에만

# pcs property set default-resource-stickiness="INFINITY"                <<마스터 로드에만

 

# pcs cluster cib drbd_cfg

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

 

# pcs -f drbd_cfg resource master DataSync Data master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

 

# pcs -f drbd_cfg resource create storage Filesystem device="/dev/drbd0" directory="/data" fstype="xfs" 

<< 8번 에서 xfs확장자 아니시고 다른거 하셨다면 바꾸셔야 해요

 

# pcs -f drbd_cfg resource create vip ocf:heartbeat:IPaddr2 ip="192.168.137.100" cidr_netmask="32" op monitor timeout="30s" interval="20s" role="Slave" op monitor timeout="30s" interval="10s" role="Master"

 

# pcs -f drbd_cfg resource create DBmaria ocf:heartbeat:mysql binary="/usr/bin/mysqld_safe" socket="/var/lib/mysql/mysql.sock" config="/etc/my.cnf" datadir="/data/mysql" op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s

          

# pcs -f drbd_cfg resource create tomcat8 systemd:tomcat java_home="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/" catalina_home="/data/tomcat8.5" tomcat_user="root" op monitor timeout="30s" interval="20s" role="Slave" op monitor timeout="30s" interval="10s" role="Master"

 

( ocf:heartbeat일 경우

pcs -f drbd_cfg resource create tomcat7 ocf:heartbeat:tomcat java_home="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/" catalina_home="/usr/share/tomcat" tomcat_user="tomcat" op monitor timeout="60s" interval="20s"

톰켓을 ocf:heeartbeat로 한다면 wget 패키지 설치 필요

)

 

# pcs -f drbd_cfg resource group add p-group vip storage DBmaria tomcat8

# pcs -f drbd_cfg constraint colocation add p-group DataSync INFINITY with-rsc-role=Master

# pcs -f drbd_cfg constraint order promote DataSync then start storage

# pcs cluster cib-push drbd_cfg

 

CIB updated

 pcs

# pcs property set stonith-enabled=false                                  (필 수 작 업)

# crontab -e

* * * * * /usr/sbin/crm_resource -R

 

13. fail-over test

# pcs cluster stop node1                                                      <<1번 노드에서

node1: Stopping Cluster (pacemaker)...

node1: Stopping Cluster (corosync)...

 

상태 체크

# pcs status                                                                      <<2번 노드에서

 

13-1. 마스터 노드 service 하나만 죽여보는 작업                  

 

# kill -9 [죽일 프로세스]

# watch netstat -antp

1분안에 해당 service 포트가 올라오면 성공

( 톰캣하고 mariadb failover가 안되는 문제를 crontab으로 리소스 체크로 명령어 1분마다

실행 하는 것으로 해결 하였습니다.)

 

 

 

 

 

 

예상되는 오류 조치사항

 

혹시 # drbd-overview에서 StandAlon 상태이면

drbd-overview 에서 primary /data가 마운트 된 곳이 마스터 입니다.

슬레이브 노드에서 (페기 절차)

# drbdadm secondary all

# drbdadm disconnect all

# drbdadm -- --discard-my-data connect all

 

마스터 노드에서 (동기화할 마스터 노드)

# drbdadm primary all

# drbdadm disconnect all

# drbdadm connect all

 

이렇게 하면 마스터에 동기화가 됩니다.

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

PCS설정 잘못 했을때

 

pcs cluster stop --all         << 마스터 노드에서

pcs cluster destroy --all    << 마스터 노드에서

 

다시 PCS부분 셋팅(12번 부터 하심되요)

 

'open source solution' 카테고리의 다른 글

packetfence 서버 IP변경  (0) 2021.03.31
Packetfence 백업(1) -node정보  (0) 2021.03.30
오픈스택 살펴보기  (0) 2020.04.08
OpenVPN 클라이언트 사용법  (0) 2020.04.07
OpenVPN+googleOTP  (0) 2020.04.07

댓글