ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MariaDB] Replication 구성 (on Docker)
    Database 2023. 1. 11. 17:09

    * Architecture

    * 사전 셋업

    : 호스트 명 및 호스트 파일 설정

    # 호스트명 설정
    hostnamectl set-hostname maria-node1
    hostnamectl set-hostname maria-node2
    
    # 예시
    cat << EOF >> /etc/hosts
    172.30.1.80 maria-node1
    172.30.1.81 maria-node2
    EOF

    : 방화벽 포트 오픈

    # 현재 방화벽 상태 확인
    firewall-cmd --state
    
    # 서비스 기동 or 정지
    systemctl start firewalld.service
    systemctl stop firewalld.service
    
    # 자동 기동 상태 확인 및 자동 기동 셋팅
    systemctl is-enabled firewalld.service
    systemctl enable firewalld.service
    
    # 1번 노드
    firewall-cmd --permanent --zone=public --add-port=3306/tcp
    
    # 2번 노드
    firewall-cmd --permanent --zone=public --add-port=3307/tcp
    
    # apply rules
    firewall-cmd --reload

    : 호스트 계정 생성

    groupadd -g 1001 mysql
    useradd -u 1001 -r -g 1001 mysql

    * Docker 설치

    yum install -y docker
    
    systemctl enable --now docker
    systemctl start docker

    * 마리아 DB 셋업

    : Bridge Network 생성

    docker network create --driver bridge replbridge

    : MASTER Server 셋업

    # shared volume 생성
    mkdir -p /db/db001/conf /db/db001/data /db/db001/log
    
    # my.cnf 설정
    cd /db/db001/conf
    vi my.cnf
    
    [mysqld]
    server_id=1
    log_bin=mysql-bin
    expire_logs_days=7
    
    # 권한 설정
    chown -R mysql:mysql /db
    chmod -R 755 /db
    
    # 컨테이너 기동
    docker run -it --name db001 -h db001 -p 3306:3306 \
    -v /db/db001/conf:/etc/mysql/conf.d \
    -v /db/db001/data:/var/lib/mysql \
    -v /db/db001/log:/var/log/mysql \
    -e MARIADB_ROOT_PASSWORD=P@ssw0rd -d mariadb:10.4
    
    # 레플리케이션 용도의 계정 생성
    CREATE USER 'rep'@'%' IDENTIFIED BY 'P@ssw0rd';
    GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%'; // 특정 아이피만 허용 할때는 %에 IP기재
    FLUSH PRIVILEGES;
    
    # MASTER NODE 동작 확인
    show master status;

    : SLAVE NODE 셋업

    # shared volume 생성
    mkdir -p /db/db002/conf /db/db002/data /db/db002/log
    
    # my.cnf 설정
    cd /db/db002/conf
    vi my.cnf
    
    [mysqld]
    log_bin=mysql-bin
    server-id=2
    relay_log=mysql-relay-bin
    log_slave_updates=1
    read_only=1
    
    # 권한 설정
    chown -R mysql:mysql /db
    chmod -R 755 /db
    
    # 컨테이너 기동
    docker run -it --name db002 -h db002 -p 3307:3306 \
    -v /db/db002/conf:/etc/mysql/conf.d \
    -v /db/db002/data:/var/lib/mysql \
    -v /db/db002/log:/var/log/mysql \
    -e MARIADB_ROOT_PASSWORD=P@ssw0rd -d mariadb:10.4
    
    # 레플리케이션 셋팅
    CHANGE MASTER TO
    MASTER_HOST='master IP',
    MASTER_USER='rep',
    MASTER_PASSWORD='P@ssw0rd',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='mysql-bin.000002',   # master에서 확인한 file
    MASTER_LOG_POS=342,    # master에서 확인한 position
    MASTER_CONNECT_RETRY=10;
    
    # Slave Start
    start slave;
    
    # SLAVE 동작 확인 (SLAVE IO/SQL Running 항목 'yes' 확인)
    show slave status\G;

     

    * 참고자료

    my.cnf 파일 권한

    https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=iamfreeman&logNo=50005893928

Designed by Tistory.