출처: https://keviny.tistory.com/3
CentOS 7 VM 에서 HA Cluster 구성하기 (vSphere Hypervisor)
Keviny 2020. 1. 9. 14:04CentOS 7 VM 에서 HA Cluster 구성하기 (vSphere Hypervisor)
참고자료 :
1. RedHat 공식 고가용성 자료 (https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/7/html/high_availability_add-on_administration/index)
2. VMware 환경에서의 구성 관련 자료 (https://www.lisenet.com/2015/active-passive-cluster-with-pacemaker-corosync-and-drbd-on-centos-7-part-1/)
- Part 1~4 중 Part 3은 DRBD(데이터 실시간 복제?) 관련 기능 -> 이 포스팅에선 필요하지 않은 부분이므로 스킵.
구성 환경 :
1. vSphere Hypervisor 내 CentOS 7 VM 2대(node01, node02) - vSphere Client 버전 6.5.0.20000
2. node01 : 192.168.0.101
3. node02 : 192.168.0.102
4. node 2대는 같은 대역의 Network IP 를 할당 받아야 함.
5. vCenter 주소 : 192.168.0.50
6. 각 노드에서 vCenter IP의 80, 443 포트로 연결 가능해야 함.
필요 환경 :
1. Active/Standby Cluster - 고가용성(이중화)
2. 차단장치 설정(Fencing Device)
3. 공유 볼륨(Shared Disk) 설정
4. pcs 리소스 추가 : LVM, FileSystem, VIP(Virtual IP), apache Web Server
5. mysql 설치
6. pcs 리소스 추가 : mysql
위 과정을 단계별로 하나씩 진행해보자
0. 사전 설치 작업 (인터넷 연결 필요)
// Cluster 솔루션 설치
[ALL]# yum install -y pcs
// Fencing Device 설정을 위한 agent 설치
[ALL]# yum install -y fence-agents-vmware-soap
// Apache Webserver 구성을 위해 설치
[ALL]# yum install -y httpd wget
1. Active/Standby Cluster - 고가용성(이중화)
// 참조 : Redhat 고가용성 관련 공식 Documentation
// https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/7/html/high_availability_add-on_administration/index)
// 클러스터의 각 노드에서 Red Hat 고가용성 추가 기능 소프트웨어 패키지와 함께 고가용성 채널에서 사용 가능한 모든 차단 에이전트를 설치합니다.
// [ALL]# yum install pcs // 미리 설치한 패키지
// 사용자가 firewalld 데몬을 실행중이라면 다음의 명령을 실행해서 Red Hat 고가용성 추가 기능에 의해 요구되는 포트를 활성화합니다.
[ALL]# firewall-cmd --permanent --add-service=high-availability
[ALL]# firewall-cmd --add-service=high-availability
// pcs를 사용해서 클러스터를 설정하고 노드 간에 통신하려면 pcs 관리 계정인 사용자 ID hacluster의 암호를 각 노드에 설정해야 합니다. hacluster 사용자의 암호를 각 노드에서 동일하게 하는 것을 권장합니다.
[ALL]# passwd hacluster
Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
// 클러스터의 각 노드에서 다음의 명령을 실행해서 시스템 시작 시 pcsd 서비스를 시작하고 pcsd를 활성화하도록 합니다.
[ALL]# systemctl start pcsd.service
[ALL]# systemctl enable pcsd.service
// hosts파일(/etc/hosts) 에 클러스터의 두 노드 node01과 node02, 그리고 vcenter를 추가합니다.
[ALL]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.101 node01
192.168.0.102 node02
192.168.0.50 vcenter.test.co.kr
// 다음의 명령을 사용해서 클러스터의 두 노드 node01과 node02 모두를 위해 node01에서 hacluster 사용자를 인증합니다.
[root@node01 ~]# pcs cluster auth node01 node02
Username: hacluster
Password:
node01: Authorized
node02: Authorized
// node01에서 다음의 명령을 실행해서 node01과 node02 노드로 구성된 클러스터인 my_cluster를 생성합니다. 이를 통해 클러스터의 두 노드 모두에 클러스터 설정 파일을 전달합니다. 이 명령은 클러스터의 두 노드 모두에서 클러스터 서비스를 시작하게 해주는 --start 옵션을 포함합니다.
[root@node01 ~]# pcs cluster setup --start --name my_cluster node01 node02
node01: Succeeded
node01: Starting Cluster...
node02: Succeeded
node02: Starting Cluster...
// 노드가 부팅되었을 때 클러스터의 각 노드에서 클러스터 서비스가 실행되도록 활성화합니다.
[ALL]# pcs cluster enable --all
// pcs cluster status 명령을 사용해서 클러스터의 현재 상태를 표시할 수 있습니다.
[root@node01 ~]# pcs cluster status
Cluster Status:
Last updated: Thu Jul 25 13:01:26 2013
Last change: Thu Jul 25 13:04:45 2013 via crmd on node02
Stack: corosync
Current DC: node02 (2) - partition with quorum
Version: 1.1.10-5.el7-9abe687
2 Nodes configured
0 Resources configured
2. 차단장치 설정(Fencing Device)
// 참조 : Active/Passive Cluster With Pacemaker, Corosync and DRBD on CentOS 7: Part 4 – Configure Fencing (STONITH)
// https://www.lisenet.com/2015/active-passive-cluster-with-pacemaker-corosync-and-drbd-on-centos-7-part-4/
// Be sure to install the package on all cluster nodes:
// [ALL]# yum install -y fence-agents-vmware-soap // 미리 설치한 패키지
// For the configuration of this VMware fencing device we need credentials to vCenter with minimal permissions. Once we have credentials, we can get a list of servers which are available on VMware.
[root@node01 ~]# fence_vmware_soap --ip [vCenter도메인] --ssl --ssl-insecure --action list --username=[Admin계정] --password=[Admin비밀번호] | grep -E "node01|node02"
node01,4224b9eb-579c-c0eb-0e85-794a3eee7d26 // 콤마(,) 뒤 숫자는 다를 수 있음
node02,42240e2f-31a2-3fc1-c4e7-8f22073587ae // 콤마(,) 뒤 숫자는 다를 수 있음
위에 node01, 02가 표시된다면 Fencing Device 설정하기 위한 준비가 끝난 상태다.
PCS Web UI 상에서 Fencing Device 설정을 위해 https://[노드 IP]:2224 로 접속하면 아래와 같은 화면이 표시된다.
PCS의 기본 Web UI 화면아까 생성한 my_cluster를 등록하기 위해 localhost 를 입력해준다.
my_cluster 가 등록된 모습. my_cluster 를 클릭하면 노드정보를 볼 수 있다.
node01 과 node02 가 등록된 것을 볼 수 있다.
차단장치 설정을 위해 "FENCE DEVICES" 탭을 누른 상태. 아무것도 없다. ADD를 누른 뒤...
필요한 정보(아래표 참조)를 채워 넣는다.
항목 | 입력값 |
ipaddr | vcenter.test.co.kr |
login | [vcenter 관리자 계정] |
inet4_only | 1 |
ipport | 443 |
passwd | [vcenter 관리자 비밀번호] |
ssl_insecure | 1 |
pcmk_host_map | vcenter.test.co.kr:node01;vcenter.test.co.kr;node02 |
pcmk_host_list | node01,node02 |
pcmk_host_check | static_list |
pcs resource 에 fence_test 가 정상적으로 등록된 모습
3. 공유 볼륨(Shared Disk) 설정
공유 볼륨 설정을 위해 먼저 vcenter 페이지에서 node01과 node02에 SCSI 컨트롤러와 하드디스크를 추가해야한다. 아래 방법대로 진행해보자.
node01 - 설정편집 - 새 디바이스 추가 - SCSI 컨트롤러 선택 후 위 옵션으로 추가node01 - 설정편집 - 새 디바이스 추가 - 하드 디스크 선택 후 위 옵션으로 추가 (가상 디바이스 노드는 새로 생성한 SCSI 컨트롤러 선택해야함)
node02 - 설정편집 - 새 디바이스 추가 - SCSI 컨트롤러 선택 후 위 옵션으로 추가
node02 - 설정편집 - 새 디바이스 추가 - 기존 하드 디스크 선택
위에서 추가한 node01의 하드디스크 선택(수정일자 또는 크기로 확인)
위 옵션으로 설정 (가상 디바이스 노드는 새로 생성한 SCSI 컨트롤러를 설정해야하고, node01 과 포트번호(ex. 1:0)가 일치해야한다.
이제 추가된 하드디스크를 OS 상에서 잡아주기 위해 아래 내용을 수행한다.
fdisk -l 을 해보면 /dev/sdb가 생겼고 파티션이 잡혀있지 않은 상태fdisk /dev/sdb 로 해당 디스크를 잡고
m 을 누르면 명령어 목록이 나오는데 p 로 파티션 목록을 보면 역시 아무것도 없다.
n 으로 새로운 파티션을 생성하고 전부 엔터입력으로 기본값으로 생성한다. 그 후 p를 입력해보면 파티션이 잡힌 상태.
t 를 눌러 system id 변경 메뉴로 접근하여 L 을 눌러보면 8e 에 Linux LVM 이 보인다.
p 를 눌러보면 system id 값이 Linux LVM 으로 바뀐걸 확인할 수 있다. 이제 w 를 입력하여 저장하고 나간다.
이제 위에서 생성한 파티션으로 물리볼륨, 볼륨그룹, 논리볼륨을 생성해야한다.
// 참조 : RED HAT 고가용성 클러스터에 있는 활성/수동 APACHE 웹 서버
// https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/7/html/high_availability_add-on_administration/ch-service-haaa
// /dev/sdb1 파티션은 공유된 스토리지이므로, 이 절차는 단 하나의 노드에만 수행합니다.
// /dev/sdb1 파티션에 LVM 물리 볼륨을 생성합니다.
[root@node01 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
// 물리 볼륨 /dev/sdb1으로 구성된 볼륨 그룹 my_vg를 생성합니다.
[root@node01 ~]# vgcreate my_vg /dev/sdb1
Volume group "my_vg" successfully created
// 볼륨 그룹 my_vg를 사용해서 논리 볼륨을 생성합니다.
[root@node01 ~]# lvcreate -l 100%FREE -n my_lv my_vg
Logical volume "my_lv" created
// 논리 볼륨 my_lv에 xfs 파일 시스템을 생성합니다.
[root@node01 ~]# mkfs.xfs /dev/my_vg/my_lv
// Apache HTTPD 서버가 클러스터의 각 노드에 설치되어 있는 것을 확인합니다. 또한 Apache 웹 서버의 상태를 확인할 수 있기 위해서는 wget 도구가 클러스터에 설치되어 있어야 합니다.
// 각 노드에서 다음의 명령을 실행합니다.
// [ALL]# yum install -y httpd wget // 미리 설치한 패키지
// Apache 리소스 에이전트가 Apache 웹 서버의 상태를 받기 위해서는 다음의 텍스트가 클러스터의 각 노드에 있는 /etc/httpd/conf/httpd.conf 파일에 존재하며 주석으로 처리되지 않도록 해야 합니다. 해당 텍스트가 존재하지 않는다면 파일 마지막에 이 텍스트를 추가합니다.
[ALL]# cat /etc/httpd/conf/httpd.conf
...
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
// Apache가 제공할 웹 페이지를 생성합니다. 클러스터에 있는 하나의 노드에서 사용자가 위에서 생성한 파일 시스템을 마운트하고 그 파일 시스템에 index.html 파일을 생성한 후 파일 시스템 마운트를 해제합니다.
[root@node01 ~]# mount /dev/my_vg/my_lv /var/www/
[root@node01 ~]# mkdir /var/www/html
[root@node01 ~]# mkdir /var/www/cgi-bin
[root@node01 ~]# mkdir /var/www/error
[root@node01 ~]# restorecon -R /var/www
[root@node01 ~]# cat <<-END >/var/www/html/index.html
<html>
<body>Hello</body>
</html>
END
[root@node01 ~]# umount /var/www
// 다음의 절차에 따라 볼륨 그룹을 설정하면 오직 클러스터만이 볼륨 그룹을 활성화시킬 수 있고 시작 시 볼륨 그룹이 클러스터 밖에서 활성화되지 않도록 설정됩니다.
// locking_type이 1로 설정되어 있고 /etc/lvm/lvm.conf 파일에서 use_lvmetad가 0으로 설정되어 있도록 확실히 하기 위해 다음의 명령을 실행합니다. 이 명령은 모든 lvmetad 프로세스를 즉시 비활성화 및 중지합니다.
[ALL]# lvmconf --enable-halvm --services --startstopservices
// 다음의 명령을 사용해서 어느 볼륨 그룹이 현재 사용자의 로컬 스토리지에 설정되어 있는지 확인합니다. 이 명령을 통해 현재 설정되어 있는 볼륨 그룹 목록이 표시됩니다. 이 노드에 루트와 홈 디렉토리를 위해 각각의 볼륨 그룹에 공간을 할당해 놓았다면 다음의 예시에서와 같이 표시된 목록에서 그 볼륨을 볼 수 있습니다.
[ALL]# vgs --noheadings -o vg_name
my_vg
centos
// my_vg (사용자가 방금 클러스터를 위해 정의한 볼륨 그룹) 이외의 볼륨 그룹을 /etc/lvm/lvm.conf 설정 파일에 항목으로 추가합니다. 예를 들어, 각각의 볼륨 그룹에 루트와 홈 디렉토리를 위한 공간을 할당해 놓았다면 lvm.conf 파일의 volume_list 행을 주석 해제 처리하고 그 볼륨 그룹을 다음과 같이 volume_list에 항목으로 추가합니다.
[ALL]# cat /etc/lvm/lvm.conf
...
volume_list = [ "centos" ]
...
// 부트 이미지가 클러스터에 의해 제어되는 볼륨 그룹을 활성화하려고 시도하지 않도록 확실히 하기 위해 initramfs 부트 이미지를 재구축합니다.
[ALL]# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
// 노드를 재부팅합니다.
[ALL]# reboot
// 노드가 재부팅된 후 그 노드에 클러스터 서비스가 다시 시작되었는지 확인합니다.
[ALL]# pcs cluster status
4. pcs 리소스 추가 : LVM, FileSystem, VIP(Virtual IP), apache Web Server
// 참조 : PCS 명령을 사용한 리소스 및 리소스 그룹 생성
// https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/7/html/high_availability_add-on_administration/s1-resourcegroupcreate-haaa
// 다음의 명령을 사용해서 my_lvm이라는 LVM 리소스를 생성합니다. 오직 클러스터만이 LVM 논리 볼륨을 활성화할 수 있도록 하기 위해 이 명령은 exclusive=true 매개 변수를 지정합니다. 아직 my_group 리소스 그룹이 존재하지 않으므로 이 명령은 리소스 그룹을 생성합니다.
[root@node01 ~]# pcs resource create my_lvm LVM volgrpname=my_vg exclusive=true --group my_group
// 사용자가 리소스를 생성했을 때 그 리소스는 자동적으로 시작됩니다. 리소스가 생성 및 시작되었다는 것을 확인하기 위해 다음의 명령을 사용할 수 있습니다.
// 사용자는 pcs resource disable 및 pcs resource enable 명령을 사용해서 개별 리소스를 수동으로 중지하고 시작할 수 있습니다.
[root@node01 ~]# pcs resource show
Resource Group: apachegroup
my_lvm (ocf::heartbeat:LVM): Started
// 다음의 명령을 사용해서 설정을 위해 남은 리소스를 생성하고 이 리소스를 기존의 my_group 리소스 그룹에 추가합니다.
[root@node01 ~]# pcs resource create my_fs Filesystem device="/dev/my_vg/my_lv" directory="/var/www" fstype="xfs" --group my_group
[root@node01 ~]# pcs resource create VirtualIP IPaddr2 ip=192.168.0.100 cidr_netmask=24 --group my_group
[root@node01 ~]# pcs resource create Website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group my_group
// 리소스와 그 리소스를 포함하는 리소스 그룹을 생성한 후 사용자는 클러스터의 상태를 확인할 수 있습니다. 4개의 리소스가 모두 동일한 노드에서 실행중인 것을 확인합니다.
[root@node01 ~]# pcs status
Cluster name: my_cluster
Last updated: Wed Jul 31 16:38:51 2013
Last change: Wed Jul 31 16:42:14 2013 via crm_attribute on z1.example.com
Stack: corosync
Current DC: node02 (2) - partition with quorum
Version: 1.1.10-5.el7-9abe687
2 Nodes configured
6 Resources configured
Online: [ node01 node02 ]
Full list of resources:
myapc (stonith:fence_apc_snmp): Started node01
Resource Group: apachegroup
my_lvm (ocf::heartbeat:LVM): Started node01
my_fs (ocf::heartbeat:Filesystem): Started node01
VirtualIP (ocf::heartbeat:IPaddr2): Started node01
Website (ocf::heartbeat:apache): Started node01
// 클러스터가 시작 및 실행중이면 사용자가 IPaddr2 리소스로 정의한 IP 주소를 브라우저에 입력해서 디스플레이 예시를 볼 수 있으며, 이 디스플레이는 "Hello"라는 간단한 단어로 구성되어 있습니다.
// Apache httpd 의 경우, 설치하고나면 부팅 시 자동실행 옵션이 켜져있을 수 있으므로, 아래 명령을 통해 부팅 시 자동실행되지 않도록 한다.
[ALL]# systemctl disable httpd.service
아래 명령어를 이용해서 각 노드를 standby 상태로 만들고, 다시 online 상태로 만들 수 있다.
# pcs node standby
# pcs node unstandby
기본 설정으로, online 상태(unstandby)로 전환될 때 다른 노드의 resource 를 가져오기 때문에 아래 옵션을 추가하여 현재 active인 node에서 resource가 유지될 수 있도록 설정한다.
my_group 을 클릭한 뒤 Resource Meta Attributes 에 위와 같이 resource-stickiness 를 100으로 설정해준다.
5. mysql 설치
// 참조1 : CentOS7 Mysql 설치
// https://galid1.tistory.com/296
// 참조2 : Securing the Initial MySQL Account
// https://dev.mysql.com/doc/refman/8.0/en/default-privileges.html
// CentOS 7 은 기본적으로 mariaDB 가 탑재되어 있어 mysql 을 설치하려면 아래와 같이 명령어를 입력해줘야 한다.
[ALL]# yum -y install http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
[ALL]# yum -y install mysql-community-server
// mysql을 시작하려면 아래 명령어를 입력해준다.
// systemctl enable은 하지 않는다. pcs 에 의해서 실행되고 종료되기 때문. 양 쪽에서 구동하는 이유는 root 비밀번호를 바꾸기 위함임.
[ALL]# systemctl start mysqld.service
// mysql 설치 시 root 의 기본 비밀번호는 아래 위치에 기록되어 있다. (맨 오른쪽이 비밀번호)
[ALL]# cat /var/log/mysqld.log | grep password
2020-01-10T08:12:44.029624Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: v*lx.uODI4F<
// 위 비밀번호를 이용하여 mysql 에 접속한다
[ALL]# mysql -u root -p
Enter password: [비밀번호 입력]
// 아래 sql 문을 입력하여 root의 비밀번호를 변경해준다
[ALL]mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[바꿀 root 비밀번호]';
// 접속을 끊은 뒤 다시 접속해본다.
[ALL]mysql> quit
[ALL]# mysql -u root -p
Enter password: [바꾼 비밀번호 입력]
// mysql 을 종료한다.
[ALL]# systemctl stop mysqld.service
// mysql 의 자동실행 옵션을 제거한다
[ALL]# systemctl disable mysqld.service
6. pcs 리소스 추가 : mysql
항목 | 입력값 |
Resource Group | my_group |
Resource ID | [mysql 리소스 이름] |
binary | /usr/sbin/mysqld |
client_binary | /usr/bin/mysql |
datadir | [공유볼룸안의 mysql data 폴더] |
additional_parameters | --bind-address=192.168.0.100 --skip-external-locking |
skip-external-locking 은 필요하면 추가한다. (관련내용 아래 링크 참조)
mysql 이 생성되면 Group 에서 순서를 조정한다. website 가 db 정보를 참고하게 된다면 website 앞에 mysql 을 둬야한다.
추가) 중요한 내용을 한번 더 언급한다. 위처럼 PCS Resource 로 관리되는 항목은 systemctl 로 중복 실행되면 안된다. (Volume Group 을 PCS 클러스터만이 활성화할 수 있게 설정한 거랑 동일하다고 생각하면 된다. 이렇게 하지 않으면 systemctl 로도 Resource 가 실행되고 PCS클러스터가 또 실행하려고 하면서 오류가 발생할 수 있다.)
위 Resource들 중에서 mysql 과 httpd 의 경우 enable 되어있으면 PC 부팅 시 자동으로 실행되기 때문에 해당 옵션을 제거한다.
// httpd 서비스에 대한 자동 실행 방지
[ALL]# systemctl disable httpd.service
[ALL]# systemctl is-enabled httpd.service
disabled
// mysqld 서비스에 대한 자동 실행 방지
[ALL]# systemctl disable mysqld.service
[ALL]# systemctl is-enabled mysqld.service
disabled
끝.
'프로그램 활용 > 웹서버' 카테고리의 다른 글
세션(Session) 불일치 문제 및 해결 방법 (0) | 2023.10.24 |
---|---|
Session Clustering 방식 (0) | 2023.10.24 |
[CentOS 7] Tomcat 서버 (1) | 2023.10.24 |
[TOMCAT] 톰캣 세션 클러스터링 테스트 (1) | 2023.10.24 |
아파치 톰캣 세션 클러스터링 (1) | 2023.10.24 |