23.11.08 - replication, 중요!

임연진·2023년 11월 8일

11월 8일

첫날배운거부터 다시복습
리눅스 : pwd, thuch, mv, mkdir, rm -rf, cd, ls, vi,
ps -ef, netstat -anlp, systemctl, yum
(netstat -anlp:프로그램이사용하는포트번호확인명령어)

절대경로 : 무조건 /부터 전부 다 입력, / = c드라이브
상대경로  : 현재 위치를 기준으로 입력(pwd로 현재위치 무조건확인!!)

    !!!중요!!!

<네트워크>

  • 랜 : 하나의 네트워크, 가까운 곳에 있는 컴퓨터들끼리 연결한것
  • 인터넷 : 랜 + 랜 + ...+ 랜, 전 세계의 랜들을 연결한 큰 네트워크
  • IP주소 : 컴퓨터가 사용하는 주소, 다른 컴퓨터를 찾아가기 위한 주소, IP주소는 같을 수 없다. ex.집주소
  • 서브넷 마스크 : IP주소에서 앞부분, 뒷부분을 나눠주는 것(워낙 IP를 많이 사용하다보니 모자라서 사용)
    앞부분 : 네트워크를의미, ex.같은아파트 같은동
    뒷부분 : 특정컴퓨터를(호스트) 의미, ex. 해당아파트 몇호인지 호수
    255.255.255.0
  • 공유기 : IP주소 하나를 공유, 내 네트워크랑 인터넷을 연결
    내 네트워에서 쓰는 IP주소 하나(사설IP)와, 인터넷에서 쓰는 IP주소(공인IP) 하나, 총 2개를 가지고있다.
    공인 IP : 공유해서 사용하는 단 1개의 IP
    사설 IP : 공유기에 연결된 컴퓨터들이 사용하는 IP주소(ex. 같은 동아파트 사람들이 모여서 대표한사람이 치킨을 시켰다고 가정했을때, 사람들은 대표집으로 치킨을 받으러가야하고 치킨배달부는 치킨시킨사람들이 누군지모름)
  • 게이트웨이 : 인터넷으로 가는 주소 (우리는 인터넷을 공유기에 연결해서 쓰고있어서 게이트웨이에 공유기주소를 넣어서 쓰고있음)
  • 포트 번호 : 프로그램을 찾아가는 주소
  • 포트포워딩 : 공유기 IP주소의 특정 포트로 오면 특정 포트로 가도록 설정(ex.치킨 받으러 나가지않은 사람이 대표집에 포스트잍으로 몇호로 오세요라고 적어놓고 오게하는것)

클라이언트 : 서버가 제공하는 서비스를 이용하는 프로그램
서버 : 서비스를 제공하는 프로그램
웹 서버 : 서버 컴퓨터에 저장된 파일을 다운로드할 수 있는 서비스를 제공
DB 서버 : 데이터를 안전하게 테이블(표) 형태로 CRUD할 수 있는 서비스를 제공
DB 클라이언트 프로그램 : workbench, mysql 등을 사용해서 SQL로 데이터를 CRUD하는 프로그램
SQL - DDL : CREATE, ALTER, DROP
DML : SELECT, INSERT, UPDATE, DELETE
DCL : GRANT, REVOKE


앞으로 배울 것들

GIT
자바
자료구조
알고리즘
스프링
MSA
html, css, js
vue.js
도커
K8S
Ansible
젠킨스


  1. 리눅스 2대 준비(리눅스1, 리눅스2)
    ip설정
    mysql-server 설치
    방화벽끄기
    1) 네트워크 방화벽 설정
    systemctl stop firewalld
    2) 로컬 방화벽
    setenforce 0

    mysql 초기설정

  2. 리눅스1(master) 리눅스2(slave) 설정

  3. 리눅스2(master) 리눅스1(slave) 설정

  4. 리눅스 1대 준비(리눅스3)
    ip설정
    방화벽끄기
    1) 네트워크 방화벽 설정
    systemctl stop firewalld
    2) 로컬 방화벽
    setenforce 0


DR
미러 A-A
핫 A-S

  1. haproxy 설정
    1) 설치
    yum install haproxy

    2) 설정
    vi /etc/haproxy/haproxy.cfg

#set nu 하면 번호나옴

63번 줄 다음 내용은 전부 삭제 후
마지막 줄에 추가
listen stats			# haproxy 모니터링 페이지 설정
    bind :9000			# 웹브라우저를 이용해서 9000포트로 접속하면 
    stats enable			# haproxy 모니터링 페이지로 접속 됨
    stats realm Haproxy\ Statistics	# http://[서버IP]:9000/haproxy_stats
    stats uri /haproxy_stats

3) 서비스 재시작
systemctl restart haproxy // 에러 발생, 리눅스는 기본적으로

  1. 테스트
    1) haproxy 모니터링 페이지에서 확인
    http://[프록시 서버IP]:9000/haproxy_stats 접속했을 때 웹 페이지가 나와야 함

----------# 여기까지는 리눅스 3에 설정---------

  1. mysql 서버 추가
    1) mysql서버에 계정 추가--(리눅스1,2 아무데나-이미 master,slave되어있으니까)
    haproxy라는 이름의 계정 추가
    CREATE USER 'haproxy'@'[리눅스3 컴퓨터의 IP]';

2) haproxy 설정--(다시 리눅스3에설정)
vi /etc/haproxy/haproxy.cfg

마지막 줄에 추가

listen mysqld-ha
        bind :3306
        mode tcp
        balance roundrobin
        option mysql-check user haproxy

        server mysqld1 10.10.10.210:3306 check
        server mysqld2 10.10.10.110:3306 check
  1. DB 서버 부하 분산 확인--(리눅스마스터나슬레이브 둘중하나에)
    1) DB 서버에 접속할 수 있는 사용자 생성
    CREATE USER 'test'@'%' IDENTIFIED BY 'qwer1234';
#그다음에 마스터나 슬레이브에 USE mysql

2) workbench에서 접속 테스트
hostname : [haperoxy가 설치된 컴퓨터의 IP주소]
username : [위에서 생성한 계정]

접속 후 

show variables LIKE '%server_id%'; 실행해서 server-id를 확인, 접속할 때마다 server-id가 바껴야 정상

#Keepalived란?

'로드밸런싱'과 '고가용성(HA)'를 제공하는 프레임워크.

  • 로드밸런싱은 L4 수준의 로드 밸런싱(HAProxy와 함께 사용하면, L7 로드밸런싱도 가능)

  • 고가용성(HA)은 VRRP 프로토콜을 사용한 VIP로 고가용성이 가능

#Keepalived를 이용한 HAProxy의 HA 구성

가상 IP주소(VIP)를 공유하는 Active HAProxy 서버와 Standby HAProxy서버가

heartbeat을 주고 받으면서 서로 정상적인 동작하는지 여부를 확인

Active 상태의 서버에 문제가 발생하면, Standby HAProxy가 active 상태로 변경되면서

기존의 active HAProxy의 가상 IP주소를 가져오면서 서비스가 무정지 상태를 유지

Active - Standby ---(마스터에하나, 슬레이브에 남은 하나)

  1. Active
    1) keepalived 설치 및 설정
    yum install -y keepalived

    	vi /etc/keepalived/keepalived.conf
    
    	14번 라인 주석처리
    	18번 라인 밑으로 전부 삭제

#밑에줄 한번에 지우려면 커서를 지우려는 줄 밑에 놓고 d+shift g, 잘못지워서 복구하려면 u

vrrp_script chk_mysql {
script "pidof mysqld"
interval 2 # every 2 seconds
weight 2
}

vrrp_instance VI_1 {
interface ens160
state MASTER
virtual_router_id 123 # Standby랑 맞춰줘야 하는 값
unicast_src_ip 192.168.100.20 # Active IP
unicast_peer {
192.168.100.30 # Standby IP
}

    priority 102			# Standby보다 Active가 높아야 하는 값

    track_script {
         chk_mysql
    }

    virtual_ipaddress {
            192.168.100.100/24 dev ens160
    }

}

systemctl restart keepalived
  1. Standy
    1) keepalived 설치 및 설정
    yum install -y keepalived

    	vi /etc/keepalived/keepalived.conf
    
    	14번 라인 주석처리
    	18번 라인 밑으로 전부 삭제

vrrp_script chk_mysql {
script "pidof mysqld"
interval 2 # every 2 seconds
weight 2
}

vrrp_instance VI_1 {
interface ens160
state BACKUP
virtual_router_id 123 # Standby랑 맞춰줘야 하는 값
unicast_src_ip 192.168.100.30 # Standby IP
unicast_peer {
192.168.100.20 # Active IP
}

    priority 101			# Standby보다 Active가 높아야 하는 값

    track_script {
         chk_mysql
    }

    virtual_ipaddress {
            192.168.100.100/24 dev ens160
    }

}

systemctl restart keepalived
  1. DB 서버 Failover 테스트
    1) workbench에서 접속 테스트
    hostname : [keepalived에서 VIP]
    username : [생성한 계정]

    	접속 후 
    
    	show variables LIKE '%server_id%'; 실행해서 server-id를 확인, Active 서버를 끄고 수 초 후 다시 접속

0개의 댓글