단계별 : Amazon EC2에서 SANless MySQL Linux 장애 조치 클러스터를 구성하는 방법
이 단계별 가이드에서는 Amazon의 Elastic Compute Cloud (Amazon EC2)에서 고 가용성 2 노드 MySQL 클러스터 (감시 서버 포함)를 구성하는 데 필요한 모든 단계를 안내합니다. 가이드에는 스크린 샷, 셸 명령 및 코드 조각이 모두 포함되어 있습니다. Amazon EC2에 어느 정도 익숙하고 이미 계정이 있다고 가정합니다. 그렇지 않은 경우 오늘 가입 할 수 있습니다. 또한 Linux 시스템 관리 및 가상 IP 등과 같은 장애 조치 클러스터링 개념에 대한 기본적인 지식이 있다고 가정하겠습니다.
장애 조치 클러스터링은 수년 동안 사용되어 왔습니다. 일반적인 구성에서는 두 개 이상의 노드가 공유 스토리지로 구성되어 기본 노드에서 장애 조치가 발생할 경우 보조 또는 대상 노드가 최신 데이터에 액세스 할 수 있습니다. 공유 스토리지를 사용하면 거의 0에 가까운 복구 지점 목표가 가능할뿐만 아니라 대부분의 클러스터링 소프트웨어에 대한 필수 요구 사항입니다. 그러나 공유 스토리지에는 몇 가지 문제가 있습니다. 첫째, 단일 장애 지점 위험입니다. 공유 스토리지 (일반적으로 SAN)가 실패하면 클러스터의 모든 노드가 실패합니다. 둘째, SAN은 비용이 많이 들고 구매, 설정 및 관리가 복잡 할 수 있습니다. 셋째, Amazon EC2를 포함한 퍼블릭 클라우드의 공유 스토리지는 고 가용성 (99.99 % 가동 시간), 거의 제로에 가까운 복구 시간 및 복구 지점 목표, 재해 복구 보호를 유지하려는 회사에게는 불가능하거나 실용적이지 않습니다.
다음은 엄격한 HA / DR SLA를 충족하면서 이러한 문제를 제거하기 위해 클라우드에서 SANless 클러스터를 생성하는 것이 얼마나 쉬운 지 보여줍니다. 아래 단계에서는 Amazon EC2와 함께 MySQL 데이터베이스를 사용하지만 SQL, SAP, Oracle 또는 기타 애플리케이션을 보호하기 위해 AWS에서 2 노드 클러스터를 생성하는 데 동일한 단계를 적용 할 수 있습니다.
참고 : 기능, 화면 및 버튼보기는 아래에 제시된 스크린 샷과 약간 다를 수 있습니다.
1. Virtual Private Cloud (VPC) 생성
2. 인터넷 게이트웨이 생성
삼. 서브넷 생성 (가용 영역)
4. 라우팅 테이블 구성
5. 보안 그룹 구성
6. 인스턴스 시작
7. 탄력적 IP 생성
8. 가상 IP에 대한 경로 항목 생성
9. ENI에 대한 소스 / 대상 확인 비활성화
10. 액세스 키 ID 및 보안 액세스 키 얻기
11. Linux OS 구성
12. EC2 API 도구 설치
13. MySQL 설치 및 구성
14. 클러스터 설치 및 구성
15. 클러스터 연결 테스트
개요
이 문서에서는 단일 Amazon EC2 리전 내에서 클러스터를 생성하는 방법을 설명합니다. 클러스터 노드 (node1, node2 및 감시 서버)는 최대 가용성을 위해 서로 다른 가용성 영역에 상주합니다. 이는 또한 노드가 다른 서브넷에 있음을 의미합니다.
다음 IP 주소가 사용됩니다.
- node1 : 10.0.0.4
- node2 : 10.0.1.4
- 증인 : 10.0.2.4
- 가상 / "부동"IP : 10.1.0.10
1 단계 : Virtual Private Cloud (VPC) 생성
먼저 Virtual Private Cloud (VPC라고도 함)를 만듭니다. VPC는 전용 Amazon 클라우드 내의 격리 된 네트워크입니다. IP 주소 블록 및 서브넷, 라우팅 테이블, 보안 그룹 (예 : 방화벽) 등을 완벽하게 제어 할 수 있습니다. 가상 네트워크에 Azure Iaas VM (가상 머신)을 시작합니다.
기본 AWS 대시 보드에서 "VPC"를 선택합니다.
"Your VPCs"아래에서 화면 오른쪽 상단에서 적절한 지역을 선택했는지 확인합니다. 이 가이드에서는 3 개의 가용 영역이있는 리전이므로 "미국 서부 (오레곤)"리전이 사용됩니다. 지역 및 가용 영역에 대한 자세한 내용을 보려면 여기를 클릭하세요.
VPC에 이름을 지정하고 사용할 IP 블록을 지정합니다. 이 가이드에서는 10.0.0.0/16이 사용됩니다.
이제“Your VPCs”화면에 새로 생성 된 VPC가 표시됩니다.
2 단계 : 인터넷 게이트웨이 생성
다음으로 인터넷 게이트웨이를 만듭니다. 인스턴스 (VM)가 인터넷과 통신 할 수 있도록하려는 경우 필요합니다.
왼쪽 메뉴에서 인터넷 게이트웨이를 선택하고 인터넷 게이트웨이 만들기 버튼을 클릭합니다. 이름을 지정하고 다음을 만듭니다.
다음으로 인터넷 게이트웨이를 VPC에 연결합니다.
VPC를 선택하고 연결을 클릭합니다.
3 단계 : 서브넷 생성 (가용 영역)
다음으로 서브넷 3 개를 만듭니다. 각 서브넷은 자체 가용 영역에 상주합니다. 3 개의 인스턴스 (VM : node1, node2, 감시)는 별도의 서브넷 (따라서 가용 영역)으로 시작되므로 가용 영역의 장애로 인해 클러스터의 여러 노드가 제거되지 않습니다.
미국 서부 (오레곤) 리전 인 us-west-2에는 3 개의 가용성 영역 (us-west-2a, us-west-2b, us-west-2c)이 있습니다. 3 개의 가용성 영역 각각에 하나씩 3 개의 서브넷을 만듭니다.
VPC 대시 보드에서 서브넷으로 이동 한 다음 서브넷 생성 :
첫 번째 서브넷에 이름 (“Subnet1)”을 지정하고 가용성 영역 us-west-2a를 선택한 다음 네트워크 블록 (10.0.0.0/24)을 정의합니다.
두 번째 서브넷 가용성 영역 us-west-2b를 생성하려면 반복합니다.
us-west-2c 가용성 영역에 세 번째 서브넷을 생성하려면 반복합니다.
완료되면 아래에 표시된대로 각각 다른 CIDR 블록과 별도의 가용 영역에 3 개의 서브넷이 생성되었는지 확인합니다.
4 단계 : 라우팅 테이블 구성
외부로의 트래픽이 이전 단계에서 만든 인터넷 게이트웨이로 전송되도록 VPC의 라우팅 테이블을 업데이트합니다. VPC 대시 보드에서 라우팅 테이블을 선택합니다. Routes 탭으로 이동하면 기본적으로 VPC 내에서만 트래픽을 허용하는 하나의 경로 만 존재합니다.
편집을 클릭하십시오.
다른 경로 추가 :
새 경로의 대상은 "0.0.0.0/0"(인터넷)이고 대상에 대해 인터넷 게이트웨이를 선택합니다. 그런 다음 저장을 클릭합니다.
다음으로 3 개의 서브넷을 라우팅 테이블과 연결합니다. "서브넷 연결"탭을 클릭하고 편집 :
3 개의 서브넷 모두 옆에있는 확인란을 선택하고 저장합니다.
3 개의 서브넷이 기본 라우팅 테이블과 연결되어 있는지 확인합니다.
나중에 돌아와서 라우팅 테이블을 다시 한 번 업데이트하여 트래픽이 클러스터의 가상 IP와 통신 할 수 있도록 라우트를 정의 할 것입니다.하지만 이는 Linux 인스턴스 (VM)가 생성 된 후에 수행되어야합니다.
5 단계 : 보안 그룹 구성
들어오는 SSH 및 VNC 트래픽을 허용하도록 보안 그룹 (가상 방화벽)을 수정합니다. 둘 다 나중에 Linux 인스턴스를 구성하고 클러스터 소프트웨어의 설치 / 구성을 구성하는 데 사용됩니다.
왼쪽 메뉴에서 "보안 그룹"을 선택한 다음 "인바운드 규칙"탭을 클릭합니다. 편집을 클릭하십시오.
SSH (포트 22) 및 VNC 모두에 대한 규칙을 추가합니다. VNC는 일반적으로 구성 방법에 따라 5900의 포트를 사용하므로이 가이드의 목적에 따라 5900-5910 포트 범위를 엽니 다. VNC 설정에 따라 구성하십시오.
6 단계 : 인스턴스 시작
이 가이드에서는 3 개의 인스턴스 (가상 머신)를 프로비저닝합니다. 처음 두 개의 VM ( "node1"및 "node2"라고 함)은 MySQL 데이터베이스 및 관련 리소스를 온라인 상태로 만드는 기능을 가진 클러스터 노드로 작동합니다. 세 번째 VM은 분할 브레인에 대한 추가 보호를 위해 클러스터의 증인 서버 역할을합니다.
최대한의 가용성을 보장하기 위해 VM 3 개 모두 단일 지역 내의 서로 다른 가용성 영역에 배포됩니다. 이는 각 인스턴스가 다른 서브넷에 있음을 의미합니다.
기본 AWS 대시 보드로 이동하여 EC2를 선택합니다.
"node1"만들기
첫 번째 인스턴스 ( "node1")를 만듭니다. 인스턴스 시작을 클릭합니다.
Linux 배포를 선택하십시오. 나중에 사용되는 클러스터 소프트웨어는 RHEL, SLES, CentOS, Oracle Linux를 지원합니다. 이 가이드에서는 RHEL 7.X를 사용합니다.
그에 따라 인스턴스 크기를 조정하십시오. 이 가이드의 목적과 비용을 최소화하기 위해 t2.micro 크기가 사용되었습니다. 무료 등급이 적용되기 때문입니다. 인스턴스 크기 및 가격에 대한 자세한 내용은 여기를 참조하세요.
다음으로 인스턴스 세부 정보를 구성합니다. 중요 :이 첫 번째 인스턴스 (VM)를 "Subnet1"로 시작하고 서브넷 (10.0.0.0/24)에 유효한 IP 주소를 정의해야합니다. 서브넷의 첫 번째 사용 가능한 IP이므로 10.0.0.4 미만이 선택되었습니다.
참고 : AWS의 특정 서브넷에있는 .1 / .2 / .3은 예약되어 사용할 수 없습니다.
다음으로 클러스터 노드에 추가 디스크를 추가합니다 ( "node1"및 "node2"모두에서 수행됨). 이 디스크는 MySQL 데이터베이스를 저장하고 나중에 노드간에 복제됩니다.
참고 : '증인'노드에 디스크를 추가 할 필요가 없습니다. "node1"및 "node2"만. 새 볼륨을 추가하고 원하는 크기를 입력합니다.
인스턴스 Node1에 대한 태그를 정의하십시오.
인스턴스를 기존 보안 그룹과 연결하여 이전에 생성 한 방화벽 규칙이 활성화되도록합니다.
시작을 클릭합니다.
중요 : AWS 환경의 첫 번째 인스턴스 인 경우 새 키 쌍을 만들어야합니다. 비공개 키 파일은 Linux 인스턴스에 SSH로 연결할 때 필요하므로 안전한 위치에 저장해야합니다.
"node2"만들기
위의 단계를 반복하여 두 번째 Linux 인스턴스 (node2)를 만듭니다. Node1과 똑같이 구성하십시오. 하지만 'Subnet2'(us-west-2b 가용성 영역)에 배포해야합니다. Subnet2의 IP 범위는 10.0.1.0/24이므로 여기에서는 IP 10.0.1.4가 사용됩니다.
두 번째 디스크도 Node2에 추가해야합니다. Node1에 추가 한 디스크와 정확히 같은 크기 여야합니다.
두 번째 인스턴스에 태그 지정…. “Node2”:
"증인"만들기
위의 단계를 반복하여 세 번째 Linux 인스턴스 (증인)를 만듭니다. 두 번째 디스크를 추가 할 필요가 없다는 점을 제외하면 Node1 & Node2와 똑같이 구성합니다.이 인스턴스는 클러스터에 대한 감시 역할 만하며 MySQL을 온라인 상태로 만들지 않기 때문입니다.
'Subnet3'(us-west-2c 가용성 영역)에 배포해야합니다. Subnet2의 IP 범위는 10.0.2.0/24이므로 여기에서는 IP 10.0.2.4가 사용됩니다.
참고 : 감시 노드에는 기본 디스크 구성이 좋습니다. 두 번째 디스크는 필요하지 않습니다.
감시 노드에 태그를 지정합니다.
3 개의 인스턴스를 프로비저닝하는 데 약간의 시간이 걸릴 수 있습니다. 완료되면 EC2 콘솔에서 실행중인 것으로 표시됩니다.
7 단계 : 탄력적 IP 생성
그런 다음 외부에서 인스턴스에 연결하는 데 사용할 공개 IP 주소 인 탄력적 IP를 만듭니다. 왼쪽 메뉴에서 탄력적 IP를 선택한 다음 "새 주소 할당"을 클릭합니다.
새로 생성 된 탄력적 IP를 선택하고 마우스 오른쪽 버튼을 클릭 한 다음 "Associate Address"를 선택합니다.
이 탄력적 IP를 Node1과 연결합니다.
인터넷 액세스를 원하거나 직접 SSH / VNC 할 수 있도록하려면 다른 두 인스턴스에 대해이 작업을 반복합니다.
8 단계 : 가상 IP에 대한 경로 항목 생성
이 시점에서 3 개의 인스턴스가 모두 생성되었으며 클러스터의 가상 IP가 작동하려면 라우팅 테이블을 한 번 더 업데이트해야합니다. 이 다중 서브넷 클러스터 구성에서 가상 IP는 VPC에 할당 된 CIDR 범위 밖에 있어야합니다.
트래픽을 클러스터의 가상 IP (10.1.0.10), 기본 클러스터 노드 (Node1)로 보내는 새 경로를 정의합니다.
VPC 대시 보드에서 라우팅 테이블을 선택하고 편집을 클릭합니다. 대상이 Node1 인 "10.1.0.10/32"에 대한 경로를 추가합니다.
9 단계 : ENI에 대한 소스 / 대상 확인 비활성화
다음으로 클러스터 노드의 ENI (Elastic Network Interface)에 대한 소스 / 대상 확인을 사용 중지합니다. 이는 인스턴스가 클러스터의 가상 IP 주소에 대한 네트워크 패킷을 수락하기 위해 필요합니다.
모든 ENI에 대해이 작업을 수행하십시오.
“Network Interfaces”를 선택하고 ENI를 마우스 오른쪽 버튼으로 클릭 한 다음“Change Source / Dest Check”를 선택합니다.
"Disabled"선택 :
10 단계 : 액세스 키 ID 및 보안 액세스 키 얻기
가이드의 뒷부분에서 클러스터 소프트웨어는 AWS 명령 줄 인터페이스 (CLI)를 사용하여 클러스터의 가상 IP에 대한 라우팅 테이블 항목을 조작하여 트래픽을 활성 클러스터 노드로 리디렉션합니다. 이 기능이 작동하려면 AWS CLI가 올바르게 인증 할 수 있도록 액세스 키 ID와 보안 액세스 키를 얻어야합니다.
EC2 대시 보드의 오른쪽 상단에서 이름을 클릭하고 아래 드롭 다운에서 "보안 자격 증명"을 선택합니다.
표의 "액세스 키 (액세스 키 ID 및 보안 액세스 키)"섹션을 확장하고 "새 액세스 키 만들기"를 클릭합니다. 키 파일을 다운로드하여 안전한 위치에 저장하십시오.
11 단계 : Linux OS 구성
Linux 인스턴스에 연결합니다.
새로 생성 된 Linux 인스턴스 (SSH를 통해)에 연결하려면 인스턴스를 마우스 오른쪽 버튼으로 클릭하고 "연결"을 선택합니다. 그러면 인스턴스에 연결하기위한 지침이 표시됩니다. 이전 단계에서 생성 / 다운로드 한 개인 키 파일이 필요합니다.
예:
여기에서 잠시 동안 EC2 대시 보드를 떠나 명령 줄에서 손을 더럽힐 것입니다. Linux 관리자로서 지금까지는 익숙해야합니다.
AWS의 Linux VM (또는 기본 "ec2-user"계정)에 대한 루트 암호가 제공되지 않으므로 연결 한 후 "sudo"명령을 사용하여 루트 권한을 얻습니다.
$ sudo su –
DNS 서버를 이미 설정하지 않은 경우 3 개의 서버 모두에 호스트 파일 항목을 생성하여 nameEdit / etc / hosts로 서로를 올바르게 해결할 수 있도록합니다.
/ etc / hosts 파일 끝에 다음 행을 추가하십시오.
10.0.0.4 노드 1
10.0.1.4 노드 2
10.0.2.4 증인
10.1.0.10 mysql-vip
SELinux 비활성화
/ etc / sysconfig / linux를 편집하고“SELINUX = disabled”를 설정합니다.
# vi / etc / sysconfig / selinux
#이 파일은 시스템에서 SELinux의 상태를 제어합니다. # SELINUX =는 다음 세 가지 값 중 하나를 취할 수 있습니다.
# 시행 – SELinux 보안 정책이 시행됩니다.
# permissive – SELinux는 강제하는 대신 경고를 출력합니다.
# disabled – SELinux 정책이로드되지 않았습니다.
SELINUX = 비활성화
# SELINUXTYPE =은 다음 두 값 중 하나를 사용할 수 있습니다.
# 타겟팅 – 타겟팅 된 프로세스가 보호됨, # mls – 다단계 보안 보호.
SELINUXTYPE = 타겟팅
호스트 이름 설정
기본적으로 이러한 Linux 인스턴스에는 "ip-10-0-0-4.us-west-2.compute.internal"과 같이 서버의 IP 주소를 기반으로하는 호스트 이름이 있습니다.
호스트 이름을 "정상적인"방법 (예 : / etc / sysconfig / network 편집 등)으로 수정하려고하면 재부팅 할 때마다 원래 이름으로 되돌아갑니다 !! 재부팅 후 호스트 이름을 실제로 정적으로 유지하는 방법을 설명하는 AWS 토론 포럼에서 훌륭한 스레드를 찾았습니다.
세부 정보 : https://forums.aws.amazon.com/message.jspa?messageID=560446
“/etc/cloud/cloud.cfg”파일에서 호스트 이름을 설정하는 모듈을 주석 처리합니다. 다음 모듈은 #을 사용하여 주석 처리 할 수 있습니다.
# – set_hostname
# – update_hostname
다음으로 / etc / hostname에서 호스트 이름도 변경하십시오.
클러스터 노드 재부팅
SELinux가 비활성화되고 호스트 이름 변경 사항이 적용되도록 3 개의 인스턴스를 모두 재부팅합니다.
VNC (및 관련 패키지) 설치 및 구성
Linux 서버의 GUI에 액세스하고 나중에 클러스터를 설치 및 구성하려면 VNC 서버와 몇 가지 다른 필수 패키지를 설치하십시오 (클러스터 소프트웨어에는 redhat-lsb 및 패치 rpms 필요).
# yum groupinstall“X Window System”
# yum groupinstall 'GUI 포함 서버'
# yum install tigervnc-server xterm wget unzip patch redhat-lsb
# vncpasswd
다음 URL은 RHEL 7 / CentOS 7 : For RHEL 7.x / CentOS7.x에서 VNC 서버를 실행하는 데 유용한 가이드입니다.
참고 :이 예시 구성은 디스플레이 2 (: 2, 일명 포트 5902) 및 루트 (안전하지 않음)에서 VNC를 실행합니다. 그에 따라 조정하십시오!
# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.serv
# vi /etc/systemd/system/vncserver@:2.service
[Service]
유형 = 포킹
# /tmp/.X11-unix 환경에서 기존 파일 정리 ExecStartPre = / bin / sh -c‘/ usr / bin / vncserver -kill % i> / dev / null 2> & 1 || :’
ExecStart = / sbin / runuser -l root –c“/ usr / bin / vncserver % i –geometry 1024 × 768”PIDFile = / root / .vnc / % H % i.pid
ExecStop = / bin / sh -c‘/ usr / bin / vncserver -kill % i> / dev / null 2> & 1 || :’
# systemctl 데몬 새로 고침
# systemctl 사용 vncserver @ : 2.service
# vncserver : 2 -geometry 1024 × 768
RHEL / CentOS 6.x 시스템의 경우 :
# vi / etc / sysconfig / vncservers
VNCSERVERS =”2 : root”VNCSERVERARGS [2]=”-geometry 1024 × 768 ″
# 서비스 vncserver 시작
# chkconfig vncserver on
VNC 클라이언트를 열고 <ElasticIP : 2>에 연결합니다. 얻을 수 없다면 Linux 방화벽이 방해가 될 수 있습니다. 여기에서 사용중인 VNC 포트 (포트 5902)를 열거 나 지금은 방화벽을 비활성화합니다 (생산 환경에 권장되지 않음).
# systemctl 방화벽 중지
# systemctl 방화벽 사용 중지
"데이터"디스크 분할 및 포맷
Linux 인스턴스가 시작되고 보호 할 애플리케이션 데이터를 저장하기 위해 각 클러스터 노드에 추가 디스크가 추가되었을 때. 이 경우 MySQL 데이터베이스입니다.
두 번째 디스크는 / dev / xvdb로 나타나야합니다. "fdisk -l"명령을 실행하여 확인할 수 있습니다. 당신은 그것을 볼 수 있습니다
/ dev / xvda (OS)가 이미 사용되고 있습니다.
# fdisk -l
# 시작 끝 크기 유형 이름 디스크 / dev / xvda : 10.7GB, 10737418240 바이트, 20971520 섹터 단위 = 1 * 512 = 512 바이트 섹터
섹터 크기 (논리 / 물리) : 512 바이트 / 512 바이트 I / O 크기 (최소 / 최적) : 512 바이트 / 512 바이트 디스크 레이블 유형 : gpt
1 2048 4095 1M BIOS 부팅 부분
2 4096 20971486 10G Microsoft 기본
디스크 / dev / xvdb : 2147MB, 2147483648 바이트, 4194304 섹터 단위 = 1 * 512 = 512 바이트의 섹터
섹터 크기 (논리 / 물리) : 512 바이트 / 512 바이트 I / O 크기 (최소 / 최적) : 512 바이트 / 512 바이트
여기서는 파티션 (/ dev / xvdb1)을 만들고 포맷 한 다음 MySQL의 기본 위치에 마운트합니다.
/ var / lib / mysql. "node1"및 "node2"모두에서 다음 단계를 수행하십시오.
# fdisk / dev / xvdb
fdisk (util-linux 2.23.2)에 오신 것을 환영합니다.
변경 사항은 작성하기로 결정할 때까지 메모리에만 남아 있습니다. 쓰기 명령을 사용하기 전에주의하십시오.
장치에 인식 된 파티션 테이블이 없습니다.
디스크 식별자 0x8c16903a로 새 DOS 디스크 레이블을 작성합니다.
명령어 (m for help) : n
파티션 유형 :
p 기본 (기본 0 개, 확장 0 개, 무료 4 개) e 확장
선택 (기본값 p) : p
파티션 번호 (1-4, 기본값 1) : 1
첫 번째 섹터 (2048-4194303, 기본값 2048) : <enter>
기본값 2048 사용
마지막 섹터, + sectors 또는 + size {K, M, G} (2048-4194303, 기본값 4194303) : <enter>
기본값 4194303 사용
Linux 유형 및 크기 2GiB의 파티션 1이 설정 됨
Command (m for help) : w
파티션 테이블이 변경되었습니다!
ioctl ()을 호출하여 파티션 테이블을 다시 읽습니다. 디스크 동기화.
# mkfs.ext4 / dev / xvdb1
# mkdir / var / lib / mysql
node1에서 파일 시스템을 마운트합니다.
# 마운트 / dev / xvdb1 / var / lib / mysql
EC2 API 도구 (EC2 CLI)는 각 클러스터 노드에 설치해야 클러스터 소프트웨어가 나중에 라우팅 테이블을 조작하여 가상 IP에 연결할 수 있습니다.
12 단계 : EC2 API 도구 설치
다음 URL은이를 설정하는 훌륭한 가이드입니다.
http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/set-up-ec2-cli-linux.html
주요 단계는 다음과 같습니다.
CLI 도구를 다운로드하고 압축을 풀고 표준 위치 (/ opt / aws)로 이동합니다.
# wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
# ec2-api-tools.zip 압축을 풉니 다.
# mv ec2-api-tools-1.7.5.1 / / opt / aws /
# export EC2_HOME =”/ opt / aws”
Java가 아직 설치되어 있지 않은 경우 (확인하려면 "which java"실행) 설치합니다.
# yum install java-1.8.0-openjdk
# export JAVA_HOME =”/ usr / lib / jvm / java-1.8.0-openjdk-1.8.0.71-
예 (RHEL 7.2 시스템의 기본 구성 기준. 그에 따라 조정)
AWS 액세스 키와 AWS 보안 키가 필요합니다. 이러한 값은 나중에 클러스터 설정 중에도 필요하므로 편리하게 유지하십시오! 자세한 내용은 다음 URL을 참조하십시오.
https://console.aws.amazon.com/iam/home?#security_credential
# export AWS_ACCESS_KEY = your-aws-access-key-id
# export AWS_SECRET_KEY = your-aws-secret-key
CLI 유틸리티 기능 테스트 :
# / opt / aws / bin / ec2-describe-regions
지역 eu-west-1 ec2.eu-west-1.amazonaws.com
지역 ap-southeast-1 ec2.ap-southeast-1.amazonaws.com
지역 ap-southeast-2 ec2.ap-southeast-2.amazonaws.com
지역 eu-central-1 ec2.eu-central-1.amazonaws.com
지역 ap-northeast-2 ec2.ap-northeast-2.amazonaws.com
지역 ap-northeast-1 ec2.ap-northeast-1.amazonaws.com
지역 us-east-1 ec2.us-east-1.amazonaws.com
지역 sa-east-1 ec2.sa-east-1.amazonaws.com
지역 us-west-1 ec2.us-west-1.amazonaws.com
지역 us-west-2 ec2.us-west-2.amazonaws.com
13 단계 : MySQL 설치 및 구성
다음으로 MySQL 패키지를 설치하고 샘플 데이터베이스를 초기화 한 다음 MySQL의 "루트"비밀번호를 설정합니다. RHEL7.X에서 MySQL 패키지는 MariaDB 패키지로 대체되었습니다.
"node1"에서 :
# yum mariadb mariadb-server 설치
# 마운트 / dev / xvdb1 / var / lib / mysql
# / usr / bin / mysql_install_db –datadir =”/ var / lib / mysql /”–user = mysql
# mysqld_safe –user = root –socket = / var / lib / mysql / mysql.sock –port = 3306 –datadi
#
# # 참고 :이 다음 명령은 모든 호스트에서 원격 연결을 허용합니다. 좋은 # echo "update user set Host =’%’여기서 Host =’node1 ′; 플러시 권한 | mysql mys #
# #MySQL의 루트 비밀번호를‘SIOS’로 설정
# echo“update user set Password = PASSWORD (‘SIOS’) where User =’root’; 플러시
MySQL 구성 파일을 생성합니다. 데이터 디스크 (나중에 복제됩니다.
/var/lib/mysql/my.cnf). 예:
# vi /var/lib/mysql/my.cnf
[mysqld] datadir = / var / lib / mysql
소켓 = / var / lib / mysql / mysql.sock
pid-file = / var / run / mariadb / mariadb.pid user = root
port = 3306
# 다양한 보안 위험을 방지하기 위해 심볼릭 링크를 비활성화하는 것이 좋습니다. 심볼릭 링크 = 0
[mysqld_safe]
log-error = / var / log / mariadb / mariadb.log pid-file = / var / run / mariadb / mariadb.pid
[client] 사용자 = 루트 암호 = SIOS
원래 MySQL 구성 파일이있는 경우 옆으로 이동합니다.
# mv /etc/my.cnf /etc/my.cnf.orig
“node2”에서는 MariaDB / MySQL 패키지 만 설치하면됩니다. 다른 단계는 필요하지 않습니다. "node2"에서 :
[root@node2 ~]# yum mariadb mariadb-server 설치
14 단계 : 클러스터 설치 및 구성
이제 클러스터를 설치하고 구성 할 준비가되었습니다. Linux 용 SIOS Protection Suite (일명 SPS-Linux)는이 가이드에서 클러스터링 기술로 사용됩니다. 단일 통합 솔루션에서 고 가용성 장애 조치 클러스터링 기능 (LifeKeeper)과 실시간 블록 수준 데이터 복제 (DataKeeper)를 모두 제공합니다. SPS-Linux를 사용하면 "SANLess"클러스터 (일명 "비공유"클러스터)를 배포 할 수 있습니다. 즉, EC2 인스턴스의 경우처럼 클러스터 노드에는 공유 스토리지가 없습니다.
Linux 용 SIOS Protection Suite 설치
VM 3 개 (node1, node2, 감시) 모두에서 다음 단계를 수행합니다.
SPS-Linux 설치 이미지 파일 (sps.img)을 다운로드하고 평가판 라이센스를 얻거나 영구 라이센스를 구입하십시오. 자세한 내용은 SIOS에 문의하십시오.
루프백 마운트하고 루트 (또는 루트 쉘을 얻으려면 먼저 "sudo su-")로 내부에서 "setup"스크립트를 실행합니다. 예 :
# mkdir / tmp / install
# mount -o loop sps.img / tmp / install
# cd / tmp / install
# ./설정
설치 스크립트가 진행되는 동안 여러 질문에 답하라는 메시지가 표시됩니다. 거의 모든 화면에서 Enter 키를 눌러 기본값을 적용합니다. 다음 예외에 유의하십시오.
- "고 가용성 NFS"라는 화면에서 고 가용성 NFS 서버를 만들지 않을 것이므로 "n"을 선택할 수 있습니다.
- 설치 스크립트가 끝날 무렵 지금 또는 나중에 평가판 라이센스 키를 설치하도록 선택할 수 있습니다. 나중에 라이센스 키를 설치하므로이 시점에서 "n"을 안전하게 선택할 수 있습니다.
- "설정"의 마지막 화면에서 화면에 표시된 목록에서 설치할 ARK (응용 프로그램 복구 키트, 즉 "클러스터 에이전트")를 선택합니다.
- ARK는 "node1"및 "node2"에서만 필요합니다. "witness"에 설치할 필요는 없습니다. 위쪽 / 아래쪽 화살표로 목록을 탐색하고 스페이스 바를 눌러 다음을 선택하십시오.
-
- lkDR – Linux 용 DataKeeper
- lkSQL – LifeKeeper MySQL RDBMS 복구 키트
- 그러면“node1”및“node2”에 다음과 같은 추가 RPM이 설치됩니다.
- steeleye-lkDR-9.0.2-6513.noarch.rpm steeleye-lkSQL-9.0.2-6513.noarch.rpm
-
- ARK는 "node1"및 "node2"에서만 필요합니다. "witness"에 설치할 필요는 없습니다. 위쪽 / 아래쪽 화살표로 목록을 탐색하고 스페이스 바를 눌러 다음을 선택하십시오.
Witness / Quorum 패키지 설치
LifeKeeper 코어의 기존 장애 조치 프로세스와 결합 된 LifeKeeper 용 Quorum / Witness Server 지원 패키지 (steeleye-lkQWK)를 사용하면 전체 네트워크 장애가 일반적 일 수있는 상황에서보다 확실하게 시스템 장애 조치를 수행 할 수 있습니다. 즉, "분할 브레인"상황의 위험을 크게 줄이면서 장애 조치를 수행 할 수 있습니다.
3 개 노드 (node1, node2, witness) 모두에 Witness / Quorum rpm을 설치합니다.
# cd / tmp / install / quorum
# rpm -Uvh steeleye-lkQWK-9.0.2-6513.noarch.rpm
3 개 노드 (node1, node2, Witness) 모두에서 / etc / default / LifeKeeper를 수정하고 NOBCASTPING = 1로 설정합니다.
Witness 서버 ( 'witness')에서만 / etc / default / LifeKeeper를 수정하고 WITNESS_MODE = off / none을 설정합니다.
EC2 복구 키트 패키지 설치
SPS-Linux는 리소스가 서로 다른 가용성 영역 및 지역의 노드간에 장애 조치를 취할 수 있도록하는 특정 기능을 제공합니다. 여기서 EC2 복구 키트 (즉, 클러스터 에이전트)는 가상 IP에 대한 연결이 활성 클러스터 노드로 라우팅되도록 라우팅 테이블을 조작하는 데 사용됩니다.
EC2 rpm (node1, node2)을 설치합니다.
# cd / tmp / install / amazon
# rpm -Uvh steeleye-lkECC-9.0.2-6513.noarch.rpm
라이센스 키 설치
3 개 노드 모두에서 "lkkeyins"명령을 사용하여 SIOS에서 얻은 라이센스 파일을 설치합니다.
# / opt / LifeKeeper / bin / lkkeyins <파일 경로> / <파일 이름> .lic
LifeKeeper 시작
3 개 노드 모두에서 "lkstart"명령을 사용하여 클러스터 소프트웨어를 시작합니다.
# / opt / LifeKeeper / bin / lkstart
LifeKeeper GUI에 대한 사용자 권한 설정
3 개의 노드 모두에서 새 Linux 사용자 계정 (예 :이 예에서는 "tony")을 만듭니다. / etc / group을 편집하고 "tony"사용자를 "lkadmin"그룹에 추가하여 LifeKeeper GUI에 대한 액세스 권한을 부여합니다. 기본적으로 "root"만 그룹의 구성원이며 여기에는 루트 암호가 없습니다.
# useradd tony
# 암호 토니
# vi / etc / group
lkadmin : x : 1001 : 루트, 토니
LifeKeeper GUI 열기
node1의 탄력적 IP (공용 IP) 주소에 VNC 연결을 설정합니다. 위의 VNC 구성에 따라 앞에서 지정한 VNC 암호를 사용하여 <Public_IP> : 2에 연결합니다. 로그인 한 후 터미널 창을 열고 다음 명령을 사용하여 LifeKeeper GUI를 실행하십시오.
# / opt / LifeKeeper / bin / lkGUIapp &
첫 번째 클러스터 노드 ( "node1")에 연결하라는 메시지가 표시됩니다. VM 생성 중에 지정된 Linux 사용자 ID 및 비밀번호를 입력하십시오.
다음으로, 다음 스크린 샷에 강조 표시된 "서버에 연결"버튼을 클릭하여 "node2"와 "witness"모두에 연결합니다.
이제 GUI에 3 개의 서버가 모두 온라인 상태이고 정상임을 나타내는 녹색 확인 표시 아이콘이 표시됩니다.
통신 경로 생성
"node1"을 마우스 오른쪽 버튼으로 클릭하고 통신 경로 생성을 선택합니다.
"node2"와 "witness"를 모두 선택한 다음 마법사를 따릅니다. 그러면 다음 사이에 통신 경로가 생성됩니다.
node1 및 node2 node1 및 감시
node2와 감시 사이에 통신 경로를 생성해야합니다. "node2"를 마우스 오른쪽 단추로 클릭하고 통신 경로 작성을 선택하십시오. 마법사를 따라 원격 서버로 "witness"를 선택합니다.
이 시점에서 다음과 같은 통신 경로가 생성되었습니다.
node1 <—> node2 node1 <—> 감시 node2 <—> 감시
서버 앞의 아이콘이 녹색 "확인 표시"에서 노란색 "위험 표시"로 변경되었습니다. 이는 노드간에 통신 경로가 하나뿐이기 때문입니다.
VM에 여러 NIC가있는 경우 (여러 NIC로 Azure VM을 만드는 방법에 대한 정보는 여기에서 찾을 수 있지만이 문서에서는 다루지 않음) 각 서버간에 중복 통신 경로를 만듭니다.
경고 아이콘을 제거하려면보기 메뉴로 이동하여 "통신 경로 중복 경고"를 선택 취소하십시오.
결과:
통신 경로 확인
클러스터 자원의 상태를 보려면 "lcdstatus"명령을 사용하십시오. 다음 명령을 실행하여 관련된 다른 두 서버에 대한 각 노드에서 통신 경로를 올바르게 작성했는지 확인하십시오.
# / opt / LifeKeeper / bin / lcdstatus -q -d node1
머신 네트워크 주소 / 장치 상태 PRIO node2 TCP 10.0.0.4/10.0.1.4
ALIVE 1 감시 TCP 10.0.0.4/10.0.2.4 ALIVE 1
# / opt / LifeKeeper / bin / lcdstatus -q -d node2
머신 네트워크 주소 / 장치 상태 PRIO node1 TCP 10.0.1.4/10.0.0.4
ALIVE 1 감시 TCP 10.0.1.4/10.0.2.4 ALIVE 1
# / opt / LifeKeeper / bin / lcdstatus -q -d 감시
머신 네트워크 주소 / 장치 상태 PRIO node1 TCP 10.0.2.4/10.0.0.4
ALIVE 1 node2 TCP 10.0.2.4/10.0.1.4 ALIVE 1
데이터 복제 클러스터 리소스 (예 : 거울)
다음으로 데이터 복제 리소스를 생성하여 / var / lib / mysql 파티션을 node1 (소스)에서 node2 (대상)로 복제합니다. "녹색 더하기"아이콘을 클릭하여 새 리소스를 만듭니다.
다음 선택 사항으로 마법사를 따릅니다.
복구 키트를 선택하십시오 : 데이터 복제 스위치 백 유형 : 지능형
서버 : node1
계층 유형 : 기존 파일 시스템 복제
기존 마운트 포인트 : / var / lib / mysql
데이터 복제 리소스 태그 : datarep-mysql
파일 시스템 리소스 탭 : / var / lib / mysql
비트 맵 파일 : (기본값)
비동기 복제 활성화 : 아니요
리소스가 생성되면 "확장"(즉, 백업 서버 정의) 마법사가 나타납니다.
다음 선택을 사용하십시오.
대상 서버 : node2 스위치 백 유형 : 지능형 템플릿 우선 순위 : 1
대상 우선 순위 : 10 대상 디스크 : / dev / xvdb1
데이터 복제 리소스 태그 : datarep-mysql 비트 맵 파일 : (기본값)
복제 경로 : 10.0.0.4/10.0.1.4 마운트 지점 : / var / lib / mysql
루트 태그 : / var / lib / mysql
클러스터는 다음과 같습니다.
가상 IP 생성
다음으로 가상 IP 클러스터 리소스를 만듭니다. "녹색 더하기"아이콘을 클릭하여 새 리소스를 만듭니다.
마법사를 따라 다음 선택 사항으로 IP 리소스를 만듭니다.
복구 키트 선택 : IP 스위치 백 유형 : 지능형 IP 리소스 : 10.1.0.10
넷 마스크 : 255.255.255.0
네트워크 인터페이스 : eth0
IP 리소스 태그 : ip-10.1.0.10
다음 선택 사항으로 IP 자원을 확장하십시오.
스위치 백 유형 : 지능형 템플릿 우선 순위 : 1
타겟 우선 순위 : 10
IP 리소스 : 10.1.0.10
넷 마스크 : 255.255.255.0
네트워크 인터페이스 : eth0
IP 리소스 태그 : ip-10.1.0.10
클러스터는 이제 미러 및 IP 리소스가 모두 생성 된 다음과 같이 표시됩니다.
IP 리소스에 대한 Ping 목록 구성
기본적으로 SPS-Linux는 브로드 캐스트 핑을 수행하여 IP 리소스의 상태를 모니터링합니다. 많은 가상 및 클라우드 환경에서 브로드 캐스트 핑이 작동하지 않습니다. 이전 단계에서 "NOBCASTPING = 1"을
/ etc / default / LifeKeeper는 브로드 캐스트 핑 검사를 해제합니다. 대신 핑 목록을 정의합니다.
이 IP 리소스에 대한 IP 상태 확인 중에 핑할 IP 주소 목록입니다.
이 가이드에서는 감시 서버 (10.0.2.4)를 핑 목록에 추가합니다.
IP 리소스 (ip-10.1.0.10)를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
처음에는 10.1.0.0 서브넷에 대해 핑 목록이 구성되어 있지 않음을 알 수 있습니다. "Ping 목록 수정"을 클릭합니다.
"10.0.2.4"(감시 서버의 IP 주소)를 입력하고 "주소 추가"를 클릭 한 다음 마지막으로 "목록 저장"을 클릭합니다.
IP 속성 패널로 돌아가서 10.0.2.4가 핑 목록에 추가되었는지 확인할 수 있습니다. 확인을 클릭하여 창을 닫습니다.
MySQL 리소스 계층 만들기
다음으로 MySQL 클러스터 리소스를 생성합니다. MySQL 리소스는 MySQL 데이터베이스의 중지 / 시작 / 모니터링을 담당합니다.
MySQL 리소스를 만들기 전에 데이터베이스가 실행 중인지 확인하십시오. “ps -ef | grep sql”을 확인하십시오.
실행 중이라면 할 일이 없습니다. 그렇지 않은 경우 데이터베이스 백업을 시작하십시오.
# mysqld_safe –user = root –socket = / var / lib / mysql / mysql.sock –port = 3306 –datadi
마법사를 따라 다음 선택 항목으로 IP 리소스를 생성합니다. 생성하려면 "녹색 더하기"아이콘을 클릭하여 새 리소스를 생성합니다.
복구 키트 선택 : MySQL 데이터베이스 전환 유형 : 지능형 서버 : node1
my.cnf의 위치 : / var / lib / mysql
MySQL 실행 파일의 위치 : / usr / bin
데이터베이스 태그 : mysql
다음 선택 사항으로 IP 자원을 확장하십시오.
대상 서버 : node2 스위치 백 유형 : 지능형 템플릿 우선 순위 : 1
타겟 우선 순위 : 10
결과적으로 클러스터는 다음과 같이 보입니다. 데이터 복제 리소스는 항상 데이터베이스보다 먼저 온라인 상태가되도록 데이터베이스 아래로 자동으로 이동되었습니다 (종속성이 자동으로 생성됨).
장애 조치시 라우팅 테이블을 관리하기위한 EC2 리소스 생성
SPS-Linux는 리소스가 서로 다른 가용성 영역 및 지역의 노드간에 장애 조치를 취할 수 있도록하는 특정 기능을 제공합니다. 여기서 EC2 복구 키트 (즉, 클러스터 에이전트)는 가상 IP에 대한 연결이 활성 클러스터 노드로 라우팅되도록 라우팅 테이블을 조작하는 데 사용됩니다.
만들려면 "녹색 더하기"아이콘을 클릭하여 새 리소스를 만듭니다.
마법사를 따라 다음 선택 사항으로 EC2 리소스를 생성합니다.
복구 키트 선택 : Amazon EC2 스위치 백 유형 : 지능형 서버 : node1
EC2 홈 : / opt / aws
EC2 URL : ec2.us-west-2.amazonaws.com
AWS 액세스 키 : (이전에 얻은 액세스 키 입력) AWS 보안 키 : (이전에 얻은 보안 키 입력) EC2 리소스 유형 : RouteTable (백엔드 클러스터)
IP 리소스 : ip-10.1.0.10
EC2 리소스 태그 : ec2-10.1.0.10
다음 선택 사항으로 IP 자원을 확장하십시오.
대상 서버 : node2 스위치 백 유형 : 지능형 템플릿 우선 순위 : 1
타겟 우선 순위 : 10
EC2 리소스 태그 : ec2-10.1.0.10
클러스터는 다음과 같습니다. EC2 리소스가 IP 리소스 아래에 어떻게 있는지 확인하십시오.
IP 리소스와 MySQL 데이터베이스 리소스 사이에 종속성 만들기
IP 리소스와 MySQL 데이터베이스 리소스 사이에 종속성을 만들어 그룹으로 함께 장애 조치합니다. "mysql"리소스를 마우스 오른쪽 버튼으로 클릭하고 "종속성 생성"을 선택합니다.
다음 화면에서 "ip-10.1.0.10"리소스를 종속성으로 선택합니다. 다음을 클릭하고 마법사를 계속합니다.
이 시점에서 SPS-Linux 클러스터 구성이 완료되었습니다. 리소스 계층 구조는 다음과 같습니다.
15 단계 : 클러스터 연결 테스트
이제 모든 Amazon EC2 및 클러스터 구성이 완료되었습니다! 클러스터 리소스는 현재 node1에서 활성화되어 있습니다.
미러링 모니터 서버 (또는 다른 Linux 인스턴스가있는 경우)에서 클러스터에 대한 연결을 테스트하여 미러링 모니터 서버 "sudo su-"로 연결하여 루트 액세스 권한을 얻습니다. 필요한 경우 mysql 클라이언트를 설치합니다.
[root@witness ~]# yum -y mysql 설치
클러스터에 대한 MySQL 연결을 테스트합니다.
[root@witness ~]# mysql –host = 10.1.0.10 mysql -u root -p
다음 MySQL 쿼리를 실행하여 활성 클러스터 노드의 호스트 이름을 표시합니다.
MariaD[mysql]B> @@ hostname 선택;
++
| @@ hostname |
++
| node1 |
++
세트의 행 1 개 (0.00 초) MariaDB[mysql]>
LifeKeeper GUI를 사용하여 Node1에서 장애 조치-> Node2 ″. node2 아래의 mysql 리소스를 마우스 오른쪽 버튼으로 클릭하고 "In Service…"를 선택합니다.
장애 조치가 완료된 후 MySQL 쿼리를 다시 실행합니다. MySQL 클라이언트가 세션이 손실되었음을 감지하고 (장애 조치 중에) 자동으로 다시 연결됩니다.
다음 MySQL 쿼리를 실행하여 활성 클러스터 노드의 호스트 이름을 표시하고 이제 "node2"가 활성 상태인지 확인합니다.
MariaD[mysql]B> @@ hostname 선택;
오류 2006 (HY000) : MySQL 서버가 사라졌습니다. 연결이 없습니다. 다시 연결하는 중…
연결 ID : 12
현재 데이터베이스 : mysql
++
| @@ hostname |
++
| node2 |
++
세트의 행 1 개 (0.53 초) MariaDB[mysql]>
SIOS의 허가를 받아 복제