목표 : AWS의 RDS기능을 사용하여 RDS DB와 내 컴퓨터의 DB간의 Master -Slave 관계를 맺어서 이중화를 하려고 한다.
RDS 란 ? 아마존 관계형 데이터베이스 서비스 또는 아마존 RDS는 아마존 웹 서비스가 서비스하는 분산 관계형 데이터베이스이다. 애플리케이션 내에서 관계형 데이터베이스의 설정, 운영, 스케일링을 단순케 하도록 설계된 클라우드 내에서 동작하는 웹 서비스이다.
EC2 인스턴스 하나를 생성해서, 온프레미스 환경의 Database라 가정하고, RDS와 (master-slave 관계) 이중화를 실습 해보려고 한다.
구성 : EC2 인스턴스(Centos7)mysql 5.7.33 version , AWS_RDS(mysql 8 version), Workbench(mysql client 프로그램)
주의 : Slave 서버의 mysql 버전은 마스터 서버의 DB 버전과 같거나, 더 높아야 한다.
마스터 설정
1) /etc/my.cnf 에서 설정파일 수정. [mysqld] 아래에 설정 추가.
2) 테스트 할 DB 생성. CREATE DATABASE khg;
3) 해당 DB에 테이블 생성. CREATE TABLE FRIENDS(name VARCHAR(10), age INT);
4) Slave에서 접속할 수 있도록 계정생성
GRANT REPLICATION SLAVE ON *.* TO '[아이디]'@'[RDS의 endpoint]' IDENTIFIED BY '[패스워드]';
select * from mysql.user where user='[아이디]'\G Repl_slave_priv 명령어로 역할 잘 주어졌나 확인.
* 내 db에 접근할 수 있거나 내가 생성한 유저들 목록 보는 법.
use mysql;
select user, host from user;
5) show master status로 현재 마스터의 file, position 확인. (재접속 할 때마다 파일명, 포지션 번호가 변경될 수 있으니 유의)
6) mysqldump로 RDS DB 인스턴스로 dump 파일 전송
mysqldump -u [local db user] \
--databases [db name]\
--single-transaction \
--compress \
--order-by-primary \
-p[local_password] | mysql -u [RDS_user] \
--port=[3306] \
--host=[RDS endpoint] \
-p[RDS password]
슬레이브 생성 및 설정
1)RDS 생성
RDS를 생성할 때
마스터 사용자 이름이 곧, DB에 접속할 ID 이며 암호는 그 패스워드이다.
퍼블릭 액세스 가능을 허용해주고 호스트 컴퓨터에서 워크벤치(Mysql client 프로그램)을 통해 접속해서 설정 할 것이다.
2) RDS 원격접속(client 프로그램 사용) gui 환경에 사용하기 편하다고 느낀 mysql workbench를 사용하였다.
3) Slave 설정.
RDS가 아닌 자신이 직접 다운받아서 하는 경우 /etc/my.cnf 설정파일을 수정하면 되지만 RDS는 그렇게 설정 할 수가 없다. RDS에 파라미터 그룹을 들어가서.
RDS는 Super 권한을 제한해한다 그로인해서 할 수 없는 것들이.
# SUPER권한이 없어서 불가능한 항목들
* Replication 명령 : CHANGE MASTER TO, CHANGE REPLICATION FILTER, STOP SLAVE, START SLAVE ...
* BINLOG관련 명령 : PURGE BINARY LOGS, BINLOG 명령등 불가
* KILL 명령 : 오동작중인 thread를 죽여야 하기 때문에 필요
* GRANT 명령 : USER 추가
* 추가 접속 : max connection 까지 모두 차더라도 super 권한을 가진 1개의 USER는 접속이 가능했었다.
* Variable 변경 : 설정 변경은 parameter group 변경을 통해 가능합니다.
-> sql_log_bin=OFF 같은 명령이 안되기 때문에 슬레이브 먼저 컬럼 추가하고 마스터 적용하는 식의 ALTER가 안된다.
* init_connect : 접속시 캐릭터셋을 변경하거나, login trigger 같은 동작을 수행시킬 수 있다. 이것도 parameter group에서 가능하다.
* DEFINER 지정 : stored procedure 에서 definer 지정은 super권한이 필요하다.
* Stored procedure 생성 : super권한이 필요했었다.
출처 :https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sory1008&logNo=220952534094
이러한 명령들을 RDS 에서는 모두 프로시저 형태로 제공한다.
mysql.rds_set_external_master (RDS 외부에 있는 마스터에 대해) Replication을 위한 명령이다.
기존 명령어로는 CHANGE MASTER 명령을 대체한다고 보면 된다.
mysql.rds_start_replication
Replication Slave를 시작하거나 stop 하는 기능을 제공.
4) database, 테이블 생성
create database khg;
use khg;
CREATE TABLE FRIENDS(name VARCHAR(10), age INT);
5) 마스터 설정. (프로시저 호출)
CALL mysql.rds_set_external_master (
'[마스터 ip]'
, 3306
, '[마스터에 접속할 ID]'
, '[password]'
, '[master log file]'
, [position]
, 0);
입력 후 실행 했으나
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.031 sec
에러 발생.
워크벤치에서 실행 할 시 한번에 많은 값을 업데이트하거나 할 경우 안전모드 때문에 그렇다 하니 안전모드를 꺼줌.
SET SQL_SAFE_UPDATES = 0;
설정이 끝났으니 마스터에서 데이터를 insert 했을 때 slave 에서도 조회가 되나 확인해보려고 한다.
마스터 db에서 데이터 insert 후 조회
'AWS' 카테고리의 다른 글
AWS - 서버리스 아키텍처(Lambda 활용) (0) | 2021.06.11 |
---|---|
AWS - S3 (EC2 마운트) (0) | 2021.06.11 |
AWS - EBS 활용하기 (수정, 마운트) (0) | 2021.06.11 |
AMI (이미지 만들기) - web,tomcat + database (0) | 2021.06.10 |
AWS 기본 개념 (리전, 가용영역, VPC) (0) | 2021.06.09 |