Day_08-1 (HAProxy)

HD.Y·2023년 11월 8일
0

한화시스템 BEYOND SW

목록 보기
8/58
post-thumbnail

Active-Active 와 Active-Standby 이해하기

  • 7일 차 수업에서는 MySQL의 Replication을 사용하여 DB 서버를 Master 서버와 Slave 서버로 구성하는 DB 이중화에 대해 알아보고 실습을 해봤다.
  • 오늘은 더 나아가서 DB 서버 이중화를 "Active - Active" 와 "Active - Standby" 2가지로 나누어 구성을 해보고 작동하는 원리에 대해 학습하였다.

  • "Active - Active" 란❓
     2개의 자원이 동시에 서비스 되는 것을 말하며, 여기서 만약 서버로 과도한 요청이
     들어오면 서버에 부하가 찰 수 있다.
     그렇기 때문에 우리는 서버로 들어오는 요청을 균등하게 나누어서, 여러 서버로
     분산시켜주는 것이 필요한데, 이때 사용하는 것이 로드 밸런서인 HAProxy 이다.

  • "Active - Standby" 란❓
     말 그대로 하나의 서버만 동작하는 상태고, 다른 하나의 서버는 서비스 되지 않고
     대기 상태에 있는 것을 말한다.
     만약 동작중이던 서버에 문제가 발생해서 정지되면, 이때 대기중인 서버로
     전환되어 동작하게되는 원리이며, 이러한 상태를 구성하는데 사용하는 것이
     Keepalived 이다.

HAProxy 설정해보기

  • 실습에 앞서, 사전에 준비할 사항은 다음과 같다.

    1. 리눅스 서버 2대 (1, 2번) 준비 ( IP 설정, MySQL 서버 설치, 방화벽 끄기 )

    2. 리눅스 서버 2대를 "Active - Active" 로 구성하기
      구성하는 방법은 이전 글에서 DB Replication을 사용하여 Master - Slave 서버를 설정해줬는데, 그것을 바꿔서 다시 한번 설정해주면된다.
      기존 Master 서버 -> Slave 설정을 해주고, 기존 Slave 서버 -> Master 서버 설정

    3. 정상적으로 구성이 완료됬다면, 아래와 같이 2개의 서버에서 각각 새로운 DB를
      생성했을때( CREATE DATABASE [DB명]; ) 서로 동기화되어 각 서버에서 DB가
      생성된 것을 확인할 수 있다.

  • 다음으로, 리눅스 서버 1대를 추가( 3번 )로 준비한다. ( 총 리눅스 서버 : 3대 )
    1. IP 설정
    2. 방화벽 종료 : ❗반드시❗아래 2개 모두 실시해줘야 한다.
      ( 나는1번을 미실시해서 오류 찾는데 엄청난 시간을 쏟았다...😵‍💫)
      (1) setenforce 0
      (2) systemctl stop firewalld
  • 준비가 끝났다면, 3번 리눅스 서버에 HAProxy 를 설치해준다.
    설치 명령어 : yum install -y haproxy

  • 설치 완료 후, haproxy 설정 파일을 아래와 같이 수정해준다.
    명령어 : vi /etc/haproxy/haproxy.cfg
    (1) 줄 번호 표시 : :set nu
    (2) 63번 줄 밑으로는 전부 삭제 : 63번줄에서 dG 사용
    (3) 마지막 줄에 아래와 같이 내용 추가 ( 띄워쓰기 중요❗ 틀릴 시 오류 발생 )
       listen stats
        bind :9000   
        stats enable
        stats realm Haproxy\ Statistics
        stats uri /haproxy_stats
    (4) 설정 파일을 수정했으므로 서비스 재시작 : systemctl restart haproxy
    (5) 인터넷 창에서 [3번 리눅스 IP 주소]:9000/haproxy_stats 접속하면
         아래와 같이 뜬다.
  • 다음으로, 리눅스 1, 2번 컴퓨터 중 한 곳에서 mysql 서버에 계정을 추가해준다.
    CREATE USER '계정명'@'[3번 리눅스 IP 주소]';

  • 다시 haproxy 설정 파일을 아래와 같이 수정해준다.
    listen mysqld-ha     #mysqld-ha : haproxy 화면에서 보이게 하는 제목
      bind :3306
      mode tcp
      balance roundrobin
      option mysql-check user [바로 위에서 생성해 준 계정명]

      server mysqld1 [1번 리눅스 IP 주소]:3306 check
      server mysqld2 [2번 리눅스 IP 주소]:3306 check
  • 설정 파일을 수정했으므로 서비스 재시작 : systemctl restart haproxy
  • 인터넷 창에서 [3번 리눅스 IP 주소]:9000/haproxy_stats 다시 접속하면
    아래와 같이 뜬다.
  • 위의 그림처럼 "mysqld1" 과 "mysqld2" 의 상태가 보이는것을 확인할 수 있다. 만약, "mysqld1"의 서버를 정지하면 아래처럼 상태가 변하는것을 확인할 수 있을 것이다.

  • 마지막으로, MySQL Workbench 에 접속하여 DB 서버에 부하가 분산되는지 확인한다.
    (1) DB 서버에 접속할 수 있는 사용자 생성
      CREATE USER '[사용자명]'@'%' IDENTIFIED BY 'qwer1234';

    (2) MySQL Workbench에 연결하여 테스트 실시
       - hostname : [3번 리눅스 컴퓨터 IP]
       - username : 바로 위에서 생성해준 사용자명

    (3) show variables LIKE '%server_id%'; 를 실행해서 server-id를 확인
        ➡ 접속할 때마다 server-id가 바뀌는 것을 확인하면 정상


다음 글에서 이어서 계속 👉

profile
Backend Developer

0개의 댓글