IT/AWS

[3T] AWS 3 tier Architecture 구성하기 - MySQL 설치 & Replication (4)

Terriermon 2021. 3. 17. 12:53

 

관련글

2021.03.11 - [IT/AWS] - [3T] AWS 3 tier Architecture 구성하기 - Windows Terraform Infra(1)

2021.03.12 - [IT/AWS] - [3T] AWS 3 tier Architecture 구성하기 - Windows Terraform 서버 (2)

2021.03.15 - [IT/AWS] - [3T] AWS 3 tier Architecture 구성하기 - Linux Apache & Tomcat 설치 (3-1)

2021.03.16 - [IT/AWS] - [3T] AWS 3 tier Architecture 구성하기 - Linux Nginx 설치 & Tomcat 연동 (3-2)

2021.03.17 - [IT/AWS] - [3T] AWS 3 tier Architecture 구성하기 - Linux Tomcat & MySQL 연동 (5)


환경은 기존과 동일한 Amazon Linux(CentOS)이다. 서버는 db1, db2에서 진행한다.

이후 db1은 Master, db2는 Slave로 칭한다.

 

MySQL 설치

시작 전 sudo -i로 root권한과 yum -y update는 반드시 진행한다.

MySQL 설치는 Master, Slave 둘 다 같다.

 

MySQL 설치

yum install mysql
mysql -V

yum을 통해서 mysql을 설치한다. mysql -V로 버전을 확인할 수 있다.

 

MySQL Server 설치

yum list mysql*

yum list에 server가 존재하지 않는다.

rpm 파일을 다운 후, yum install을 진행한다.

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
yum localinstall mysql57-community-release-el7-8.noarch.rpm
yum install mysql-community-server

 

상태 확인

systemctl start mysqld
systemctl status mysqld

 

 

MySQL 접속

root 접속

cat /var/log/mysqld.log | grep 'temporary password'

MySQL에 접속하기 전에 log를 통해 root 비밀번호를 알아내자

root@localhost: 뒤에 있는 것이 비밀번호다.

 

mysql -u root -p

mysql에 root로 접속한다. password는 위의 비밀번호를 입력한다.

저 비밀번호는 불편하니까 외우기 쉬운 걸로 비밀번호를 바꿔준다.

 

mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'Qwert1234!';

mysql에 접속한 상태 그대로 root의 password를 바꿔준다. 비밀번호는 Qwert1234!로 변경하였다.

* 바꿔주지 않으면 mysql을 사용할 수 없다.

 

 

test 데이터 생성

mysql> create database test;
mysql> use test;

test 데이터베이스를 생성하고 사용 선언을 해준다. show 명령어로 확인할 수 있다.

create table test1(number CHAR(10) not null);

test 데이터베이스 안에 test1이라는 table을 생성한다. select 명령어로 확인할 수 있다.

 

** Master와 Slave에 있는 데이터는 이중화 전 모두 같아야 한다. test 데이터는 Master, Slave에 모두 만들어준다. 아니면 dump를 통해 Master -> Slave 데이터를 옮긴다. **

 

 

MySQL Replication 이중화

Master 서버

Master 설정

vi /ect/my.cnf
[mysqld]

log-bin=mysql-bin
server-id=1

해당 파일에서 [mysqld] 밑에 log-bin과 server-id를 넣어준다. Master 서버이므로 server-id는 1이된다.

파일을 저장한 후, systemctl restart mysqld 명령어를 통해 재시작을 해준다.

 

Replication 계정 생성

다시 mysql의 root로 접속한다. 해당 Replication 계정을 통해 Master-Slave를 연동한다.

mysql> grant replication slave on *.* to 'rptest'@'%'identified by 'Qwert1234!';
mysql> flush privileges;

grant replication slave on *.* to 'ID'@'%'identified by 'PW'; 형태이다. ID와 PW는 원하는 것으로 설정하면 된다.

'%': 모든 IP 허용을 의미한다.

 

 

Master 정보

show master status;

File과 Position의 정보를 확인해야 한다. 이후 두 개의 변수는 Slave에 저장할 때 사용한다.

 

 

Slave 서버

Slave 설정

vi /etc/my.cnf
[mysqld]

log-bin=mysql-bin
server-id=2

마찬가지로 systemctl restart mysqld 명령으로 재시작을 진행한다. server-id를 2로 지정해서 Slave임을 명시한다.

 

Slave에 Master 정보 입력

mysql> change master to
 	   -> master_host='10.0.12.59',					# Master IP
   	   -> master_port=3306,						# MySQL 기본 포트
 	   -> master_user='rptest',					# Replication 계정
 	   -> master_password='Qwert1234!',				# Replication 비밀번호
 	   -> master_log_file='mysql-bin.000001',			# Master의 파일명
 	   -> master_log_pos=591;					# Master의 Position

change master to 명령어를 통해 설정을 바꿔준다.

mysql> start slave;

slave를 시작한다.

 

 

연결 확인

[Master 서버] mysql> show processlist\G;

Host IP가 Slave IP인 것이 보인다면, Slave와 연결이 된 것이다.

 

[Slave 서버] mysql> show slave status\G;

 

다양한 정보들을 확인할 수 있다.

1. 설정해 둔 Master 정보 확인

2. Error 확인

네모 박스 친 부분에서 Error가 존재하지 않다면 연결이 완료된 것이다.

 

Error 발생

error connecting to master 'rptest@10.0.12.59:3306' - retry-time: 60 retries: 16

이러한 에러가 발생했을 때는 대부분 Master와 Slave가 통신이 안된 경우이다.

Master에서 Telnet SlaveIP 3306을 보내보자. 만약 제대로 연결이 되지 않으면 3306 port가 막혀있을 수 있다.

내 상황에서 위 에러가 떴던 경우에는 Security Group의 설정 문제였다. EC2의 Security Group에서 3306을 was만 받아주다보니 두 서버간의 통신이 불가능했다.

Any Open으로 해결했다.

 

 

데이터 삽입

[Master 서버] mysql> insert into test1 (number) values ('TEST');

Master 서버에 데이터를 삽입하면 Slave 서버에서도 저 데이터가 보인다.

select * from test1; 명령어로 test1 테이블의 모든 내용을 보자.

Master 서버에서 입력한 값을 Slave 서버에서도 볼 수 있다.

 

 

 

3 tier Architecture 구성이 생각보다 복잡하다. 이후 Tomcat과 MySQL연결은 (5)에서 이어진다.