주의
첫번째 노드, 두번째 모두 둘 다는 명령어가 일반 검정색
한쪽에만 해줄 경우 명령어가 빨간색
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
# 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 |
댓글