MYSQL DB 이중화

물리 설계

  • 서버를 한 대만 사용할 것인가.

  • 여러 대를 사용할 것인가

    • Replication
      • 서버를 최소 2대 놓겠다.
        • Master (main)
        • Slave (복제)
        • 양방향, 단방향 등의 구성 가능.
    • Cluster


    실습

  • 리눅스 pc 2대

    • IP 설정
    • MYSQL-SERVER 설정
      • centOS_server2 (110.110.xxx.xx2) - master
      • centOS_server3 (110.110.xxx.xx3) - slave

 1. DB 이중화
  (1) 네트워크 설정
	
  (2) 방화벽 설정
	setenforce 0
	systemctl stop firewalld


  (3) MySQL 설치
	yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
	yum install mysql-community-server

	systemctl restart mysqld

  (4) MySQL root 패스워드 설정
		mysql_secure_installation
		No
		패스워드 입력
		패스워드 입력
		y
		y
		y
		y

  (5) Master 설정  (MySQL1)
    1) /etc/my.cnf.d/mysql-server.cnf 파일 수정
			[mysqld] 밑에 다음 내용을 추가한다.
			server-id = 1           // 서버를 여러 대 설치해야하기 때문에 번호 부여해서 구분
			log-bin = mysql-bin     // mysql이 동작하는 부분 log (binary로 저장)
		
			systemctl restart mysqld   // 항상 설정파일 변경 후 systemctl로 재시작해줘야 함.

    2) Master 상태 확인
				mysql -u root -p 로그인 후
				show master status;
			
				// insert, update, delete는 master에.
				// select는 slave에.
				// -> 분산되어 있기 때문에 부담 낮아짐.
				// => select가 많아진다면?
				// => slave를 추가하면 된다. 

    3) Replication할 때 사용할 계정 생성
			CREATE USER '[이니셜]'@'[MYSQL2의 IP주소]' IDENTIFIED BY '[패스워드]';
			GRANT REPLICATION SLAVE ON *.*  TO '[이니셜]'@'[MySQL2의 IP주소]' IDENTIFIED BY 'Dkagh1.';
			
		

			select * from mysql.user where user='[이니셜]'\G
				Repl_slave_priv 속성이 Y로 되어있는지 확인	


  (6) Slave 설정  (MySQL2)
    1)  /etc/my.cnf.d/mysql-server.cnf 파일 수정
			[mysqld] 아래 다음 내용 추가
			server-id = 2          // slave는 server-id만 설정
		
			systemctl restart mysqld
		

    2) 데이터 복구 - 일단 생략
			mkdir  /[이니셜]
			mount  [MySQL1의 IP]:/[이니셜]  /[이니셜]
			cd /[이니셜]
			mysql -u root -p < dump.db
		
    3) Master 지정
				mysql -u root -p
					change master to
					master_host='[마스터 컴퓨터의 IP 주소]',
					master_user='[마스터에서 만든 slave용 계정 이름]',
					master_password='[마스터에서 만든 slave용 계정의 PW]',
					master_log_file='mysql-bin.[마스터의 로그 번호]',
					master_log_pos=[마스터의 포지션 번호];
		
    4) 동기화 시작
			start slave;

    5) Slave 상태 확인
			show slave status;
			또는
			show slave status\G
			
			Slave_IO_Running: Yes		
			Slave_SQL_Running: Yes
			Slave_SQL_Running_State 등 확인
		



2. 동기화 안될 때
  (2) 슬레이브
			stop slave;
		
  (1) 마스터
			mysqldump로 백업

  (2) 슬레이브
			마스터에서 백업한 파일 가져오고 복구
		
  (1) 마스터
			마스터 상태 확인

  (2) 슬레이브
			change master to 명령어로 설정

			start slave;


3. 동작 확인
  (1) 마스터, 슬레이브에서 DB 확인
	show databases;

  (2) 마스터에서 DB 생성
	CREATE DATABASE [DB이름];

  (3) 마스터, 슬레이브 에서 DB 확인
	show databases;    

	이 때 양쪽에 DB가 생성되어 있어야 한다.



	change master to
	    -> master_host='110.110.xxx.xx2',
	    -> master_user='ltw2',
	    -> master_password='1234',
	    -> master_log_file='mysql-bin.000004',
	    -> master_log_pos=1864;

동기화 완료



1. 쓰기 전용, 읽기 전용 역할 분담
	          master                       slave
              insert                       select
              update
              delete 
	=> 일종의 미러 형태

2. 부하 분산
	          master                       slave
              slave                        master
              insert                       select
              update                       insert
              delete                       update
              select                       delete
	=> 일종의 미러 형태

3. DR (재난 복구, Disaster Recovery)
	- A-A, A-S
  
	- 미러
			- 원본과 사본이 100% 똑같이 만들어져 있어야 함.
			- 데이터도 완전 동일하고 PC 대수도 똑같아야 함.
			- Active-Active
			- 서비스 기업의 경우 거의 대부분 미러 형태로 되어 있음.
	- 핫
			- 원본과 사본이 100% 똑같이 만들어져 있음.
			- Active - Stanby
			- 켜기만 하면 바로 Active한 상태
			- 하나가 뻗으면 자동으로 켜져서 구성되도록 설정하는 형태
	- 웜
			- 사본이 원본만큼 구성되지는 않아도 데이터는 다 갖고 있는 상태
	- 콜드
			- 데이터만 갖고 있는 상태

	- 서비스 수준
      - 365/24
        - 99.9% 이상
        - 99% 이상 
        - 95% 이상
profile
Web Developer

2개의 댓글

comment-user-thumbnail
2023년 11월 14일

안녕하세요~한화과정어떤가요
비전공자 나이많은취준생입니다.

1개의 답글