Keviny Blog
CentOS 7 VM 에서 HA Cluster 구성하기 (vSphere Hypervisor) 본문
CentOS 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 로 접속하면 아래와 같은 화면이 표시된다.
항목 | 입력값 |
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 |
3. 공유 볼륨(Shared Disk) 설정
공유 볼륨 설정을 위해 먼저 vcenter 페이지에서 node01과 node02에 SCSI 컨트롤러와 하드디스크를 추가해야한다. 아래 방법대로 진행해보자.
이제 추가된 하드디스크를 OS 상에서 잡아주기 위해 아래 내용을 수행한다.
이제 위에서 생성한 파티션으로 물리볼륨, 볼륨그룹, 논리볼륨을 생성해야한다.
// 참조 : 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가 유지될 수 있도록 설정한다.
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 은 필요하면 추가한다. (관련내용 아래 링크 참조)
추가) 중요한 내용을 한번 더 언급한다. 위처럼 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
끝.
'시스템 관리자' 카테고리의 다른 글
Systemd 를 이용한 Tomcat Multi Instances 환경 구성 (0) | 2019.12.04 |
---|---|
CentOS7 에서 Systemd로 서비스 등록하기 (+ systemctl vs. service) (0) | 2019.12.04 |