Date: 12월 20, 2018
태그: AWS, Linux 장애 조치 클러스터, MySQL
단계별 : 공유 저장 장치없이 Amazon EC2에서 Linux 장애 조치 (failover) 클러스터를 구성하는 방법 #amazon #aws #sanless #cluster
이 단계별 가이드에서는 아마존의 Elastic Compute Cloud (Amazon EC2)에 고 가용성, 2 노드 MySQL 클러스터 (미러링 모니터 서버)를 구성하는 데 필요한 모든 단계를 안내합니다. 가이드에는 적절한 스크린 샷, 셸 명령 및 코드 스 니펫이 모두 포함되어 있습니다. 아마 당신은 아마존 EC2에 익숙하고 이미 계정이 있다고 가정합니다. 그렇지 않다면 오늘 가입 할 수 있습니다. 기본적인 리눅스 시스템 관리 기술은 물론 가상 IP와 같은 기본적인 장애 조치 클러스터링 개념을 이해하고 있다고 가정합니다.
면책 조항 : 구름이 빠르게 움직이는 표적입니다. 따라서 기능 / 화면 / 버튼은 시간이 지남에 따라 바뀌므로 아래에서 보는 것과 약간 다를 수 있습니다. 이 가이드에서는 MySQL 데이터베이스의 가용성을 높이는 방법을 설명하지만 SAP, Oracle, PostgreSQL, NFS 파일 서버 등과 같은 다른 응용 프로그램이나 데이터베이스를 보호하기 위해이 정보와 프로세스를 확실히 적용 할 수 있습니다. 다음은 Amazon EC2에서 고 가용성 MySQL 데이터베이스를 만드는 고급 단계입니다.
- VPC (가상 사설망) 만들기
- 인터넷 게이트웨이 만들기
- 서브넷 생성 (가용성 영역)
- 경로 테이블 구성
- 보안 그룹 구성
- 인스턴스 실행
- 탄성 IP 생성
- 가상 IP에 대한 경로 항목 작성
- ENI의 소스 / 목적지 확인 사용 안함
- 액세스 키 ID 및 비밀 액세스 키 얻기
- Linux OS 구성
- EC2 API 도구 설치
- MySQL 설치 및 구성
- 클러스터 설치 및 구성
- 클러스터 연결 테스트
개요
이 기사에서는 단일 Amazon EC2 영역 내에 클러스터를 작성하는 방법에 대해 설명합니다. 클러스터 노드 (node1, node2 및 미러링 모니터 서버)는 최대한의 가용성을 위해 서로 다른 가용 영역을 유지합니다. 이는 또한 노드가 다른 서브넷에 상주 함을 의미합니다. 구성은 다음과 같습니다. 다음 IP 주소가 사용됩니다.
- node1 : 10.0.0.4
- node2 : 10.0.1.4
- 목격자 : 10.0.2.4
- 가상 / "유동"IP : 10.1.0.10
가상 사설망 (VPC) 생성
먼저 가상 사설 클라우드 (VPC라고도 함)를 만듭니다. VPC는 아마존 클라우드 내의 고립 된 네트워크로, 여러분에게만 제공됩니다. IP 주소 블록 및 서브넷, 경로 테이블, 보안 그룹 (예 : 방화벽) 등을 완벽하게 제어 할 수 있습니다. Azure Iaas 가상 머신 (VM)을 가상 네트워크로 시작합니다. 메인 AWS 대시 보드에서 "VPC"를 선택하십시오. "Your VPCs"에서 화면의 오른쪽 상단에 적절한 영역을 선택했는지 확인하십시오. 이 안내서에서는 3 개의 가용 영역이있는 지역이기 때문에 "미국 서부 (오레곤)"지역이 사용됩니다. 지역 및 가용 영역에 대한 자세한 내용을 보려면 여기를 클릭하십시오. VPC에 이름을 지정하고 사용하려는 IP 블록을 지정하십시오. 이 가이드에서는 10.0.0.0/16이 사용됩니다. 이제 "VPC"화면에서 새로 생성 된 VPC를 볼 수 있습니다.
인터넷 게이트웨이 만들기
그런 다음 인터넷 게이트웨이를 만듭니다. 인스턴스 (VM)가 인터넷과 통신 할 수있게하려면이 작업이 필요합니다. 왼쪽 메뉴에서 인터넷 게이트웨이를 선택하고 인터넷 게이트웨이 만들기 버튼을 클릭하십시오. 이름을 지정하고 만들기 : 다음으로 인터넷 게이트웨이를 VPC에 연결합니다. VPC를 선택하고 첨부를 클릭합니다.
서브넷 생성 (가용성 영역)
그런 다음 3 개의 서브넷을 만듭니다. 각 서브넷은 자체 가용 영역에 상주합니다. 3 개의 인스턴스 (VM : node1, node2, witness)는 별도의 서브넷 (따라서 가용 영역)으로 실행되어 가용성 영역의 실패가 클러스터의 여러 노드를 제거하지 않도록합니다. 미국 서부 (오레곤) 지역, uska-west-2에는 3 개의 가용 영역 (us-west-2a, us-west-2b, us-west-2c)이 있습니다. 3 개의 가용 영역 각각에 하나씩 3 개의 서브넷을 생성합니다. VPC Dashboard에서 Subnets로 이동 한 다음 Create Subnet : 첫 번째 서브넷에 이름 ( "Subnet1")을 지정하고 가용성 영역 us-west-2a를 선택하고 네트워크 블록 (10.0.0.0/24)을 정의합니다. us-west-2b : 가용성 영역에서 세 번째 서브넷을 작성하기 위해 반복합니다. us-west–2c : 완료되면 3 개의 서브넷이 생성되었고, 각각 다른 CIDR 블록이 생성되었는지 확인하고 가용성이 서로 다른지 확인합니다. 영역 (아래 참조) :
경로 테이블 구성
VPC의 라우팅 테이블을 업데이트하여 이전 단계에서 만든 인터넷 게이트웨이로 외부로 보내는 트래픽을 보냅니다. VPC 대시 보드에서 Route Tables를 선택합니다. 경로 탭으로 이동하면 기본적으로 하나의 경로 만 존재하므로 VPC 내에서만 트래픽이 허용됩니다. 편집 : 다른 경로 추가 : 새 경로의 대상은 "0.0.0.0/0"(인터넷)이고 대상은 인터넷 게이트웨이를 선택하십시오. 그런 다음 저장을 클릭합니다. 다음으로 세 개의 서브넷을 경로 테이블과 연결합니다. "서브넷 연결"탭을 클릭하고 편집 : 모든 3 개의 서브넷 옆에있는 상자를 선택하고 저장 : 3 개의 서브넷이 주 경로 테이블과 연결되어 있는지 확인합니다. 나중에 다시 돌아와 경로 테이블을 업데이트합니다. 트래픽이 클러스터의 가상 IP와 통신 할 수있는 경로를 정의하지만, 이는 Linux 인스턴스 (VM)가 생성 된 후에 수행해야합니다.
보안 그룹 구성
들어오는 SSH 및 VNC 트래픽을 허용하도록 보안 그룹 (가상 방화벽)을 편집하십시오. 둘 다 나중에 클러스터 소프트웨어의 설치 / 구성은 물론 Linux 인스턴스를 구성하는 데 사용됩니다. 왼쪽 메뉴에서 "보안 그룹"을 선택한 다음 "인바운드 규칙"탭을 클릭하십시오. 편집 : SSH (포트 22) 및 VNC 모두에 대한 규칙 추가를 클릭하십시오. VNC는 일반적으로 사용자가 구성하는 방법에 따라 5900의 포트를 사용하기 때문에이 가이드에서는 5900-5910 포트 범위를 엽니 다. VNC 설정에 따라 구성하십시오.
인스턴스 실행
이 가이드에서는 3 개의 인스턴스 (가상 컴퓨터)를 프로비저닝 할 예정입니다. 처음 두 VM ( "node1"및 "node2")은 MySQL 데이터베이스 및 관련 리소스를 온라인 상태로 가져 오는 클러스터 노드로 작동합니다. 세 번째 VM은 스플릿 브레인에 대한 추가 보호를 위해 클러스터의 감시 서버 역할을합니다. 최대한의 가용성을 보장하기 위해 모든 3 개의 VM이 단일 영역 내의 서로 다른 가용 영역으로 배포됩니다. 이는 각 인스턴스가 다른 서브넷에 상주 함을 의미합니다. 기본 AWS 대시 보드로 이동하여 EC2 :
"노드 1"생성
첫 번째 인스턴스 ( "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 데이터베이스를 저장하고 나중에 노드간에 복제됩니다. 참고 : 추가 디스크를 "감시 (witness)"노드에 추가 할 필요가 없습니다. "node1"및 "node2". 새 볼륨 추가를 클릭하고 원하는 크기로 입력하십시오. 인스턴스의 태그 정의 Node1 : 인스턴스를 기존 보안 그룹과 연결하십시오. 그러면 이전에 작성된 방화벽 규칙이 활성화됩니다. 시작을 클릭하십시오. 중요 : 이것이 첫 번째 인스턴스 인 경우 AWS 환경에서 새 키 쌍을 만들어야합니다. 개인 키 파일은 리눅스 인스턴스로 SSH 할 때 필요하므로 안전한 위치에 저장해야합니다
"노드 2"생성
위의 단계를 반복하여 두 번째 Linux 인스턴스 (node2)를 만듭니다. Node1과 정확하게 구성하십시오. 그러나 "Subnet2"(us-west-2b 가용성 영역)에 배포해야합니다. Subnet2의 IP 범위는 10.0.1.0/24이므로 여기서 10.0.1.4의 IP가 사용됩니다. 노드 2에도 두 번째 디스크를 추가해야합니다. Node1에 추가 한 디스크와 동일한 크기 여야합니다. 두 번째 인스턴스에 태그를 지정하십시오. "노드 2":
"증인"을 창조하십시오
위의 단계를 반복하여 세 번째 Linux 인스턴스 (미러링 모니터)를 만듭니다. 두 번째 디스크를 추가 할 필요가없는 경우를 제외하고는 Node1과 Node2와 똑같이 구성하십시오.이 인스턴스는 클러스터의 미러링 모니터 역할을 수행하며 MySQL을 온라인 상태로 만들지 않습니다. "Subnet3"(us-west-2c 가용성 영역)에 배포해야합니다. Subnet2의 IP 범위는 10.0.2.0/24이므로 여기서 10.0.2.4의 IP가 사용됩니다. 참고 : 기본 디스크 구성은 감시 노드에 적합합니다. 두 번째 디스크는 필요하지 않습니다. 감시 노드에 태그 지정 :
3 가지 인스턴스를 제공하는 데 약간의 시간이 걸릴 수 있습니다. 완료되면 EC2 콘솔에서 실행중인 것으로 표시됩니다.
탄성 IP 생성
그런 다음 외부 세계의 인스턴스에 연결하는 데 사용되는 공용 IP 주소 인 Elastic IP를 작성하십시오. 왼쪽 메뉴에서 Elastic IPs를 선택한 다음 "Allocate New Address"를 클릭하십시오 : 새로 생성 된 Elastic IP를 선택하고 마우스 오른쪽 버튼으로 클릭 한 다음 "Associate Address"를 선택하십시오 :이 탄성 IP를 Node1에 연결하십시오 : 당신은 그들에게 인터넷 접속이 가능하거나 직접 SSH / VNC를 할 수 있기를 원합니다.
가상 IP에 대한 경로 항목 작성
이 시점에서 3 개의 인스턴스가 모두 생성되었으며 클러스터의 가상 IP가 작동하려면 경로 테이블을 한 번 더 업데이트해야합니다. 이 다중 서브넷 클러스터 구성에서 가상 IP는 VPC에 할당 된 CIDR 범위 밖에 있어야합니다. 클러스터의 가상 IP (10.1.0.10)로 기본 클러스터 노드 (노드 1)로 트래픽을 보낼 새 경로를 정의하십시오. VPC Dashboard에서 Route Tables를 선택하고 Edit를 클릭하십시오. 목적지가 Node1 인 "10.1.0.10/32"에 대한 경로를 추가하십시오.
ENI의 소스 / 목적지 확인 사용 안함
그런 다음 클러스터 노드의 ENI (Elastic Network Interfaces)에 대한 소스 / 대상 확인을 비활성화합니다. 이는 인스턴스가 클러스터의 가상 IP 주소에 대한 네트워크 패킷을 허용하기 위해 필요합니다. 모든 ENI에 대해이 작업을 수행하십시오. "네트워크 인터페이스"를 선택하고 ENI를 마우스 오른쪽 버튼으로 클릭 한 다음 "소스 / 목적지 변경 변경"을 선택하십시오. "Disabled"를 선택하십시오 :
액세스 키 ID 및 비밀 액세스 키 얻기
이 안내서의 뒷 부분에서 클러스터 소프트웨어는 AWS CLI (Command Line Interface)를 사용하여 클러스터의 가상 IP에 대한 경로 테이블 항목을 조작하여 활성 클러스터 노드로 트래픽을 리디렉션합니다. 이 기능을 사용하려면 AWS CLI가 올바르게 인증 될 수 있도록 액세스 키 ID와 비밀 키를 얻어야합니다. EC2 대시 보드의 오른쪽 상단에서 이름을 클릭하고 드롭 다운에서 "보안 자격증 명"을 선택하십시오. 표의 "액세스 키 (액세스 키 ID 및 비밀 키)"섹션을 펼친 다음 확인을 클릭하십시오. "새 액세스 키 만들기". 키 파일을 다운로드하고 안전한 위치에 파일을 저장하십시오.
Linux OS 구성
리눅스 인스턴스에 연결 :
SSH를 통해 새로 생성 된 Linux 인스턴스에 연결하려면 인스턴스를 마우스 오른쪽 단추로 클릭하고 "연결"을 선택하십시오. 인스턴스에 연결하기위한 지시 사항이 표시됩니다. 이전 단계에서 생성 / 다운로드 한 비공개 키 파일이 필요합니다 : 예 : 여기에 EC2 대시 보드를 잠시 동안두고 손을 명령 줄에서 더럽힐 것입니다. Linux 관리자는이를 사용해야합니다. 지금까지. AWS (또는 기본 "ec2-user"계정 중 하나)의 Linux VM에 루트 암호가 제공되지 않으므로 일단 연결하면 "sudo"명령을 사용하여 루트 권한을 얻습니다.
$ sudo su -
/ etc / hosts 편집
DNS 서버를 이미 설치하지 않은 경우 세 서버 모두에서 호스트 파일 항목을 만들어 이름별로 서로 올바르게 해결할 수 있습니다. / etc / hosts 파일의 끝에 다음 행을 추가하십시오.
10.0.0.4 node1 10.0.1.4 node2 10.0.2.4 목격자 10.1.0.10 mysql-vip
SELinux 사용 안 함
/ etc / sysconfig / linux를 편집하고 "SELINUX = disabled"로 설정하십시오 :
# vi / etc / sysconfig / selinux #이 파일은 시스템상의 SELinux 상태를 제어합니다. # SELINUX =은 다음 세 가지 값 중 하나를 취할 수 있습니다. # enforcing - SELinux 보안 정책이 시행됩니다. # permissive - SELinux는 강제가 아닌 경고를 출력합니다. # disabled - SELinux 정책이로드되지 않습니다. SELINUX = 비활성화 됨 # SELINUXTYPE = 다음 두 값 중 하나를 취할 수 있습니다. # targeted - 타겟 프로세스가 보호되고, # 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에서도 호스트 이름을 변경하십시오.
클러스터 노드 재부트
3 개의 인스턴스를 모두 재부팅하여 SELinux를 비활성화하고 호스트 이름 변경 사항을 적용합니다.
VNC (및 관련 패키지) 설치 및 구성
Linux 서버의 GUI에 액세스하고 나중에 클러스터를 설치 및 구성하려면 VNC 서버와 기타 필요한 패키지 (클러스터 소프트웨어에는 redhat-lsb 및 patch rpms가 필요함)를 설치하십시오.
# yum groupinstall "X 윈도우 시스템" # yum groupinstall "GUI가있는 서버" # yum install tigervnc-server xterm wget unzip 패치 redhat-lsb
# vncpasswd
RHEL 7.x / CentOS7.x : 다음 URL은 RHEL 7 / CentOS 7에서 VNC 서버를 실행하는 데 유용한 지침입니다. https://www.digitalocean.com/community/tutorials/how-to-install-and -configure-vnc -gnome-desktop-on-centos-7에 대한 원격 액세스 주 :이 예제 구성은 디스플레이 2 (: 2, 일명 포트 5902) 및 루트 (안전하지 않음)에서 VNC를 실행합니다. 적절하게 조정하십시오!
# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service # vi /etc/systemd/system/vncserver@:2.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 1024x768" PIDFile = / root / .vnc / % H % i.pid ExecStop = / bin / sh -c '/ usr / bin / vncserver -kill % i> / dev / null 2> & 1 || : ' # systemctl daemon-reload # systemctl enable vncserver @ : 2.service # vncserver : 2 기하학 1024x768
RHEL / CentOS 6.x 시스템의 경우 :
# vi / etc / sysconfig / vncservers VNCSERVERS = "2 : root" VNCSERVERARGS [2] = "- 형상 1024x768" # service vncserver start # chkconfig vncserver on
VNC 클라이언트를 열고 <ElasticIP : 2>에 연결하십시오. 당신이 그것을 얻을 수 없다면, 아마도 당신의 리눅스 방화벽이 방해가 될 것입니다. 여기에서 사용중인 VNC 포트 (포트 5902)를 열거 나 현재는 방화벽을 비활성화하십시오 (생산 환경에는 권장하지 않음).
# systemctl stop firewalld # systemctl disable firewalld
"데이터"디스크 파티션 및 포맷
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 부팅 parti 2 4096 20971486 10G Microsoft 기본 디스크 / dev / xvdb : 2147MB, 2147483648 바이트, 4194304 섹터 Units = 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 도움말) : n 파티션 유형 : p 기본 (0 기본, 0 확장, 4 무료) 확장 된 선택 (기본 p) : p 파티션 번호 (1-4, 기본값 1) : 1 첫 번째 섹터 (2048-4194303, 기본값 2048) : <enter> 기본값 2048 사용 마지막 섹터, 섹터 또는 크기 {K, M, G} (2048-4194303, 기본값 4194303) : <enter> 기본값 사용 4194303 Linux 유형의 Partition 1 및 크기 2 GiB가 설정 됨 명령 (m 도움말) : w 파티션 테이블이 변경되었습니다! 파티션 테이블을 다시 읽으려면 ioctl ()을 호출하십시오. 디스크 동기화 중.
# mkfs.ext4 / dev / xvdb1 # mkdir / var / lib / mysql node1에서 파일 시스템을 마운트하십시오.
# mount / dev / xvdb1 / var / lib / mysql
EC2 API 도구 설치
클러스터 소프트웨어가 나중에 라우트 테이블을 조작하여 가상 IP에 대한 연결을 가능하게 할 수 있도록 EC2 API 도구 (EC2 CLI)가 각 클러스터 노드에 설치되어야합니다. 다음 URL은 이것을 설정하는 훌륭한 지침서입니다. http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/set-up-ec2-cli-linux.html 다음은 주요 단계입니다 : 다운로드, unzip 및 CLI 도구를 표준 위치 (/ opt / aws)로 이동합니다.
# wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip # unzip 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
예 (RHEL 7.2 시스템의 기본 구성 기준). 적절하게 조정)
# export JAVA_HOME = "/ usr / lib / jvm / java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64 / jre /"
AWS Access Key와 AWS Secret Key가 필요합니다. 이 값은 나중에 클러스터 설정 중에 필요할 것이므로이 값을 편리하게 유지하십시오! 자세한 내용은 다음 URL을 참조하십시오. https://console.aws.amazon.com/iam/home?#security_credential
# export AWS_ACCESS_KEY = your-aws-access-key-id # export AWS_SECRET_KEY = 당신의 aws-secret-key
Test 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
MySQL 설치 및 구성
다음으로, MySQL 패키지를 설치하고, 샘플 데이터베이스를 초기화하고, MySQL의 "root"비밀번호를 설정하십시오. RHEL7.X에서는 MySQL 패키지가 MariaDB 패키지로 대체되었습니다.
"node1"에서 :
# yum install mariadb mariadb-server # mount / 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 --datadir = / var / lib / mysql --log & # # # 참고 :이 다음 명령은 모든 호스트의 원격 연결을 허용합니다. 생산을위한 좋은 생각이 아닙니다! # echo "사용자 집합 업데이트 Host = '%'여기서 Host = 'node1'; 플러시 권한 | mysql mysql # # # MySQL의 루트 암호를 'SIOS'로 설정 # echo "update user set Password = PASSWORD ( 'SIOS') 여기서 User = 'root'; mysql mysql
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 사용자 = 루트 포트 = 3306 # 보안 위험을 방지하려면 심볼릭 링크를 비활성화하는 것이 좋습니다. 기호 링크 = 0 [mysqld_safe] log-error = / var / log / mariadb / mariadb.log pid-file = / var / run / mariadb / mariadb.pid [고객] 사용자 = 루트 암호 = SIOS
원본 MySQL 구성 파일이있을 경우 옆으로 이동하십시오.
# mv /etc/my.cnf /etc/my.cnf.orig
"노드 2"에서 :
"node2"에서는 MariaDB / MySQL 패키지 만 설치하면됩니다. 다른 단계는 필요하지 않습니다.
[root @ node2 ~] # yum install mariadb mariadb-server
클러스터 설치 및 구성
이제 클러스터를 설치하고 구성 할 준비가되었습니다. 이 안내서에서는 Linux 용 SIOS Protection Suite (일명 SPS-Linux)가 클러스터링 기술로 사용됩니다. 고 가용성 페일 오버 클러스터링 기능 (LifeKeeper)과 블록 레벨 데이터 복제 (DataKeeper)를 단일 통합 솔루션으로 제공합니다. SPS-Linux를 사용하면 EC2 인스턴스의 경우처럼 클러스터 노드에 공유 저장소가 없음을 의미하는 "공유되지 않음"클러스터라는 "SANLess"클러스터를 배포 할 수 있습니다.
Linux 용 SIOS Protection Suite 설치
모든 3 개의 VM (node1, node2, witness)에서 다음 단계를 수행하십시오. SPS-Linux 설치 이미지 파일 (sps.img)을 다운로드하고 평가판 라이센스를 얻거나 영구 라이센스를 구입하십시오. 자세한 내용은 SIOS에 문의하십시오. 당신은 그것을 루프백 (loopback) 마운트 할 것이고 루트 ( "root su"를 얻기 위해 "sudo su -"라고 쓰는 것) 안에 "setup"스크립트를 실행시킬 것이다. 예를 들면 :
# mkdir / tmp / install # mount -o loop sps.img / tmp / install # cd / tmp / install # ./설정
설치 스크립트 중에 여러 가지 질문에 대답하라는 메시지가 표시됩니다. 거의 모든 화면에서 Enter 키를 눌러 기본값을 적용합니다. 다음 예외에 유의하십시오.
- "High Availability NFS"라는 화면에서 고 가용성 NFS 서버를 만들지 않으므로 "n"을 선택할 수 있습니다
- 설치 스크립트가 끝날 때까지 평가판 라이센스 키를 지금 설치하거나 나중에 설치하도록 선택할 수 있습니다. 나중에 라이센스 키를 설치하므로이 시점에서 "n"을 안전하게 선택할 수 있습니다
- "설정"의 마지막 화면에서 화면에 표시된 목록에서 설치하려는 ARK (응용 프로그램 복구 키트, 즉 "클러스터 에이전트")를 선택하십시오.
- ARK는 "node1"과 "node2"에서만 필요합니다. "증인"에 설치할 필요가 없습니다.
- 위쪽 / 아래쪽 화살표를 사용하여 목록을 탐색하고 스페이스 바를 눌러 다음을 선택하십시오.
- 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
Witness / Quorum 패키지 설치
LifeKeeper (steeleye-lkQWK)를위한 Quorum / Witness Server 지원 패키지는 LifeKeeper 코어의 기존 장애 조치 프로세스와 결합하여 전체 네트워크 장애가 공통적으로 발생할 수있는 상황에서보다 높은 수준의 신뢰성으로 시스템 장애 조치를 수행 할 수 있습니다. 이는 효과적으로 "스플릿 브레인"상황의 위험을 크게 줄이면서 장애 극복을 수행 할 수 있음을 의미합니다. 모든 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 # passwd tony # vi / etc / group lkadmin : x : 1001 : root, tony
LifeKeeper GUI 열기
node1의 Elastic IP (공용 IP) 주소에 VNC 연결을 설정하십시오. 위에 나온 VNC 구성에 따라 앞에서 지정한 VNC 암호를 사용하여 <Public_IP> : 2에 연결합니다. 로그인 한 후 터미널 창을 열고 다음 명령을 사용하여 LifeKeeper GUI를 실행하십시오.
# / opt / LifeKeeper / bin / lkGUIapp &
첫 번째 클러스터 노드 ( "node1")에 연결하라는 메시지가 나타납니다. VM 생성 중에 지정된 Linux 사용자 ID와 암호를 입력하십시오 : 다음, 다음 스크린 샷에서 강조 표시된 "서버에 연결"단추를 클릭하여 "node2"와 "witness"모두에 연결하십시오. 이제 GUI에서 3 개의 모든 서버를 볼 수 있습니다. 온라인 상태이고 건강하다는 것을 나타내는 녹색 체크 표시 아이콘 :
통신 경로 생성
"node1"을 마우스 오른쪽 버튼으로 클릭하고 Comm Path 생성을 선택하십시오. "node2"와 "witness"를 선택하고 마법사를 따르십시오. 그러면 다음 사이에 통신 경로가 만들어집니다.
- 노드 1 및 노드 2
- 노드 1 및 증인
노드 2와 감시 사이에 통신 경로를 생성해야합니다. "node2"를 마우스 오른쪽 단추로 클릭하고 통신 경로 작성을 선택하십시오. 마법사를 따라 원격 서버로 "witness"를 선택하십시오. 다음과 같은 통신 경로가 생성되었습니다 :
- node1 <-> node2
- 노드 1 <-> 목격자
- 노드 2 <-> 목격자
서버 앞의 아이콘이 녹색 "확인 표시"에서 노란색 "위험 신호"로 바뀌 었습니다. 이는 노드간에 단일 통신 경로 만 있기 때문입니다. VM에 여러 개의 NIC가있는 경우 (여러 NIC가있는 Azure VM을 만드는 방법에 대한 정보는 여기에서 찾을 수 있지만이 기사에서 다루지는 않음) 각 서버간에 중복 통신 경로를 만듭니다. 경고 아이콘을 제거하려면보기 메뉴로 이동하여 "Comm Path Redundancy Warning"을 선택 해제합니다. 결과 :
통신 경로 확인
"lcdstatus"명령을 사용하여 클러스터 자원의 상태를보십시오. # / opt / LifeKeeper / bin / lcdstatus -q -d node1 MACHINE NETWORK ADDRESSES / DEVICE STATE 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 MACHINE NETWORK ADDRESSES / DEVICE STATE 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 감시 기계 네트워크 주소 / 장치 상태 프리 노드 node1 TCP 10.0.2.4/10.0.0.4 ALIVE 1 node2 TCP 10.0.2.4/10.0.1.4 살아있는 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 리소스의 상태를 모니터링합니다. 많은 가상 및 클라우드 환경에서 브로드 캐스트 핑은 작동하지 않습니다. 이전 단계에서 / etc / default / LifeKeeper에 "NOBCASTPING = 1"을 설정하여 브로드 캐스트 핑 검사를 해제했습니다. 대신 핑 목록을 정의 할 것입니다. 이것은이 IP 자원에 대한 IP 상태 점검 중에 ping 될 IP 주소의 목록입니다. 이 가이드에서는 미러링 모니터 서버 (10.0.2.4)를 핑 목록에 추가합니다. IP 자원 (ip-10.1.0.10)을 마우스 오른쪽 단추로 클릭하고 등록 정보를 선택하십시오. 처음에는 우리의 10.1.0.0 서브넷에 대해 핑 목록이 구성되어 있지 않습니다. "Ping List 수정"을 클릭하십시오 : "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 --datadir = / var / lib / mysql --log &
생성하려면 "녹색 더하기"아이콘을 클릭하여 새 리소스를 만듭니다. 마법사를 따라 다음을 선택하여 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"자원을 마우스 오른쪽 버튼으로 클릭하고 "Create Dependency"를 선택하십시오 : 다음 화면에서 "ip-10.1.0.10"자원을 종속성으로 선택하십시오. 다음을 클릭하고 마법사를 계속 진행합니다.이 시점에서 SPS-Linux 클러스터 구성이 완료되었습니다. 리소스 계층 구조는 다음과 같습니다.
클러스터 연결 테스트
이제 Amazon EC2 및 클러스터 구성이 모두 완료되었습니다! 클러스터 리소스는 현재 노드 1에서 활성화되어 있습니다. 미러링 모니터 서버 (또는 다른 Linux 인스턴스가있을 경우 다른 Linux 인스턴스)에서 미러링 모니터 서버 ( "sudo su -")로 클러스터에 대한 연결을 테스트하여 루트 액세스를 얻습니다. 필요한 경우 mysql 클라이언트를 설치하십시오.
[root @ witness ~] # yum -y mysql을 설치합니다.
클러스터에 MySQL 연결을 테스트하십시오.
[root @ witness ~] # mysql --host = 10.1.0.10 mysql -u root -p
다음 MySQL 쿼리를 실행하여 활성 클러스터 노드의 호스트 이름을 표시합니다.
MariaDB [mysql]> @@ hostname을 선택하십시오; ------------ | @@ 호스트 이름 | ------------ | node1 | ------------ 1 행 세트 (0.00 초) MariaDB [mysql]>
LifeKeeper GUI 사용, 노드 1 -> 노드 2에서의 장애 복구 "를 참조하십시오. node2 아래의 mysql 리소스를 마우스 오른쪽 단추로 클릭하고 "서비스 중 …"을 선택하십시오. 장애 조치가 완료된 후 MySQL 쿼리를 다시 실행하십시오. 다음과 같은 MySQL 쿼리를 실행하여 활성 클러스터 노드의 호스트 이름을 표시하고 "node2"가 활성 상태인지 확인합니다.
MariaDB [mysql]> @@ hostname을 선택하십시오; 오류 2006 (HY000) : MySQL 서버가 사라졌습니다. 연결되지 않았습니다. 다시 연결하려고합니다 ... 연결 ID : 12 현재 데이터베이스 : mysql ------------ | @@ 호스트 이름 | ------------ | 노드 2 | ------------ 1 행 세트 (0.53 초) MariaDB [mysql]>
Linux 장애 조치 (Failover) 클러스터 구성에 대한 단계별 가이드가 있습니다. 공유 저장 장치가없는 Amazon EC2에서 자세한 내용을 보려면 Linuxclustering의 허가를 받아 복제하십시오.