DB 이중화 (Active - Active)

TaeYoon Kim·2023년 11월 8일
0

실습

목록 보기
2/5

mysql Replication를 배워서
master -slave 관계를 알았다.

master 쪽에는 insert, update, delete를 이용
slave 쪽에는 select를 이용하도록 부하를 분산하는 것이 기초이다.

여기에 양 쪽 서버에 서로가 동기화되도록 설정한다면 양쪽에 모든 쿼리문을 쓸 수 있게 되는 것이다.

실습을 하다가
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

이런 에러와 싸웠는데

내가 설정한 log파일을 slave쪽에서 찾을 수 없다는 것이다.

show master status;

위의 쿼리로 master_log_file 과 master_log_pos를 확인하는데

slave 측에 입력할 쿼리문를 내가 잘못입력했다.

change master to master_host='192.168.72.30', master_user='kty_s', master_password='qwer1234', master_log_file='mysql-bin.mysql-bin.000003', master_log_pos=156;

master_log_file='mysql-bin.mysql-bin.000003'

이 부분이 문제였다.
mysql-bin.mysql-bin.000003를 mysql-bin.000003로 바꿨더니 해결되었다.

복사 붙혀넣기를 통해 진행했는데

쿼리문 작성 시 늘 주의하고 다시 읽어보자.

아래는 내가 썼던 명령어들을 정리해두었다.

DB_SERVER1 에다가
네트워크 설정
1. 네트워크 설정 파일 열고 수정
vi /etc/sysconfig/network-scripts/ifcfg-ens160

BOOTPROTO = static
ONBOOT=no 를 ONBOOT=yes 로 변경 (no는 설정파일 무시, yes는 설정파일 적용)
다음 내용을 마지막 줄에 추가
IPADDR=192.168.72.30
NETMASK=255.255.255.0
GATEWAY=192.168.72.2
DNS1=8.8.8.8

  1. 네트워크 설정 적용
    systemctl restart NetworkManager

  2. 네트워크 연결 확인
    ping 8.8.8.8

  1. putty로 접속 후 바탕 색을 흰색으로 변경.
  1. DB_server2 네트워크 설정

    1. 네트워크 설정 파일 열고 수정
      vi /etc/sysconfig/network-scripts/ifcfg-ens160
BOOTPROTO = static
ONBOOT=no 를 ONBOOT=yes 로 변경 (no는 설정파일 무시, yes는 설정파일 적용)
다음 내용을 마지막 줄에 추가
IPADDR=192.168.72.40
NETMASK=255.255.255.0
GATEWAY=192.168.72.2
DNS1=8.8.8.8 

2. 네트워크 설정 적용
systemctl restart NetworkManager

3. 네트워크 연결 확인
ping 8.8.8.8
  1. COM1 네트워크 설정

    1. 네트워크 설정 파일 열고 수정
      vi /etc/sysconfig/network-scripts/ifcfg-ens160
BOOTPROTO = static
ONBOOT=no 를 ONBOOT=yes 로 변경 (no는 설정파일 무시, yes는 설정파일 적용)
다음 내용을 마지막 줄에 추가
IPADDR=192.168.72.50
NETMASK=255.255.255.0
GATEWAY=192.168.72.2
DNS1=8.8.8.8 

2. 네트워크 설정 적용
systemctl restart NetworkManager

3. 네트워크 연결 확인
ping 8.8.8.8
  1. DB_server1 에 mysql-server설치
    yum install -y mysql-server

    서버 프로그램 시작
    systemctl start mysqld

    초기설정
    mysql_secure_installation

  1. DB_server2 에 mysql-server설치
    yum install -y mysql-server

    서버 프로그램 시작
    systemctl start mysqld

    초기설정
    mysql_secure_installation

  2. DB_server1 에 master 설정 (흰색 바탕)

    1. 방화벽 끄기

    setenforce 0
    systemctl stop firewalld

    2. 설정 파일 변경

    vi /etc/my.cnf.d/mysql-server.cnf

[mysqld] 밑에 다음 내용을 추가한다.
server-id = 1
log-bin = mysql-bin

3. 설정 적용

systemctl restart mysqld

4. Master 상태 확인

mysql -u root -p 로그인 후
show master status; mysql-bin.000001 156

5. Replication할 때 사용할 계정 생성 및 권한 부여

CREATE USER 'kty_s'@'192.168.72.40' IDENTIFIED BY 'qwer1234';

GRANT REPLICATION SLAVE ON . TO 'kty_s'@'192.168.72.40';

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

  1. DB_server2 에 master 설정 (검은 바탕)

    1. 방화벽 끄기

    setenforce 0
    systemctl stop firewalld

    2. 설정 파일 변경

    vi /etc/my.cnf.d/mysql-server.cnf

[mysqld] 밑에 다음 내용을 추가한다.
server-id = 2
log-bin = mysql-bin
★ 오류 날 수도 있음. DB_server1과 파일 이름이 같음.

3. 설정 적용

systemctl restart mysqld

4. Master 상태 확인

mysql -u root -p 로그인 후
show master status; ★ 'mysql-bin.[마스터의 로그 번호]' [마스터의 포지션 번호] 확인
mysql-bin.000001 156
5. Replication할 때 사용할 계정 생성 및 권한 부여
CREATE USER 'kty'@'192.168.72.30' IDENTIFIED BY 'qwer1234';

GRANT REPLICATION SLAVE ON . TO 'kty'@'192.168.72.30';

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

  1. DB_server2(검은 바탕) Master 지정

change master to
master_host='192.168.72.30',
master_user='kty_s',
master_password='qwer12234',
master_log_file='mysql-bin.000001', ★ DB_Server1에서 확인 필요 show master status;
master_log_pos=156; ★확인 필요

change master to master_host='192.168.72.30', master_user='kty_s', master_password='qwer1234', master_log_file='mysql-bin.000003', master_log_pos=156;

start slave;

show slave status\G;

Slave_IO_Running: Yes Slave_SQL_Running: Yes
Slave_SQL_Running_State 등 확인

  1. DB_server1(흰 바탕) Master 지정

change master to
master_host='192.168.72.40',
master_user='kty',
master_password='qwer1234',
master_log_file='mysql-bin.000001', ★ DB_Server2에서 확인 필요 show master status;
master_log_pos=1057; ★확인 필요

change master to master_host='192.168.72.40', master_user='kty', master_password='qwer1234', master_log_file='mysql-bin.000004', master_log_pos=156;

start slave;

show slave status\G;

Slave_IO_Running: Yes Slave_SQL_Running: Yes
Slave_SQL_Running_State 등 확인

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

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

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

0개의 댓글