웹사이트 검색

Debian 11에서 MariaDB 마스터-마스터 복제를 설정하는 방법


이 페이지에서

  1. 전제 조건
  2. fqdn 및 /etc/hosts 파일 설정
  3. Chrony를 사용한 시간 동기화\n
  4. MariaDB 서버 설치
  5. UFW 방화벽 설정\n
  6. master1 MariaDB 서버 설정
  7. master2 MariaDB 서버 설정
  8. master1 MariaDB 서버에서 마스터-마스터 복제 시작
  9. 데이터베이스 복제 테스트
  10. 결론

이 튜토리얼에서는 Debian 11 서버에서 MariaDB 마스터-마스터 복제를 설정하는 방법을 설명합니다. 또한 MariaDB 서버 간에 Chrony를 사용하여 시간을 동기화하는 방법을 살펴보겠습니다.

전제 조건

이 자습서를 완료하려면 다음 요구 사항이 필요합니다.

  • 두 개 이상의 Debian 11 서버. 이 데모에서는 두 개의 데비안 서버를 사용했습니다.\n
  • 루트/관리자 권한이 있는 루트가 아닌 사용자.\n

fqdn 및 /etc/hosts 파일 설정

여러 서버 간에 MariaDB 마스터-마스터를 설정하려면 각 시스템 호스트 이름이 올바른 IP 주소로 확인되어야 합니다. 이를 구성하려면 각 서버에서 fqdn 및 /etc/hosts 파일을 설정해야 합니다.

이 데모에서는 아래 두 개의 Debian 서버를 사용합니다.

IP Address      Hostname    FQDN
---------------------------------------------------
192.168.5.10    master1     master1.localdomain.io
192.168.5.11    master2     master2.localdomain.io

올바른 fqdn(정규화된 도메인 이름)을 설정하려면 아래의 hostnamectl 명령을 실행하십시오.

"master1" 서버에 대해 fqdn을 설정합니다.

sudo hostnamectl set-hostname master1.localdomain.io

"master2" 서버에 대해 fqdn을 설정합니다.

sudo hostnamectl set-hostname master2.localdomain.io

그런 다음 다음 명령을 사용하여 각 서버에서 /etc/hosts 파일을 편집합니다.

sudo nano /etc/hosts

파일에 다음 구성을 추가합니다.

192.168.5.10    master1.localdomain.io  master1
192.168.5.11    master2.localdomain.io  master2

완료되면 파일을 저장하고 닫습니다.

마지막으로 아래의 "ping" 명령을 실행하여 fqdn 및 /etc/hosts 파일을 확인하고 확인합니다.

이제 호스트 이름 "master1"이 IP 주소가 "192.168.5.10"인 fqdn "master1.localdomain.io"를 가리키는 것을 볼 수 있습니다. 그리고 호스트 이름 "master2"는 IP 주소가 "192.168.5.11"인 fqdn "master2.localdomain.io"를 가리킵니다.

ping master1
ping master2

Chrony를 사용한 시간 동기화

MariaDB 마스터-마스터 복제 배포를 위한 시간 동기화는 매우 중요합니다. 그리고 서버 간 시간을 동기화하려면 각 MariaDB 서버에서 Chrony를 NTP 클라이언트로 설정해야 합니다.

Chrony 패키지를 설치하려면 다음 "apt install" 명령을 실행하십시오. Y를 입력하여 설치를 확인하고 ENTER를 누르면 설치가 시작됩니다.

sudo apt install chrony

설치가 완료되면 아래의 "systemctl" 명령을 실행하여 Chrony 서비스를 시작하고 활성화합니다.

sudo systemctl start chrony
sudo systemctl enable chrony

이제 다음 명령을 사용하여 Chrony 서비스를 확인하고 확인합니다. 그리고 Chrony 서비스가 실행 중임을 확인할 수 있습니다. 또한 Chrony 서비스가 "활성화"되어 시스템 부팅 시 자동으로 실행됨을 의미합니다.

sudo systemctl status chronyd

그런 다음 아래의 "timedatectl" 명령을 실행하여 시스템 시간을 특정 시간대에 맞게 조정하고 NTP 서비스 Chrony를 사용하도록 설정합니다.

sudo timedatectl set-timezone Europe/Stockholm --adjust-system-clock
sudo timedatectl set-ntp yes

마지막으로 아래의 "timedatectl" 명령을 실행하여 시스템 시계 및 시간의 현재 설정을 확인하고 확인하십시오. 모든 MariaDB 서버 간에 시간이 동기화되었는지 확인하십시오.

timedatectl

MariaDB 서버 설치

기본 Debian 리포지토리는 MariaDB 서버 패키지를 제공합니다. 하지만 이 데모에서는 공식 MariaDB 리포지토리에서 MariaDB 서버를 설치합니다.

MariaDB 서버를 설치하기 전에 아래의 "apt install" 명령을 실행하여 일부 기본 패키지 종속성을 설치하십시오. 설치를 확인하려면 Y를 입력하고 계속하려면 ENTER를 누르십시오.

sudo apt install gnupg2 apt-transport-https software-properties-common

그런 다음 다음 명령을 실행하여 MariaDB 리포지토리의 GPG 키를 가져옵니다. 전체 키 지문은 \1993 69E5 404B D5FC 7D2F E43B CBCB 082A 1BB9 43DB\입니다.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

이제 다음 명령을 실행하여 Debian 11 서버용 MariaDB 리포지토리를 추가합니다. 그런 다음 서버에서 패키지 인덱스를 업데이트하고 새로 고칩니다.

sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sfo1.mirrors.linux-console.net/mariadb/repo/10.8.3/debian bullseye main'
sudo apt update

"mariadb-server" 패키지를 설치하려면 아래의 "apt install" 명령을 실행하십시오. Y를 입력하여 확인하고 ENTER를 누르면 설치가 시작됩니다.

sudo apt install mariadb-server

Debian 시스템에서 MariaDB 서비스가 자동으로 시작되고 활성화됩니다. 아래의 "systemctl" 명령을 실행하여 MariaDB 서비스를 확인하고 확인합니다.

MariaDB 서비스가 "활성화된"으로 표시되어야 합니다. 이는 시스템 부팅 시 자동으로 실행된다는 의미입니다. 그리고 MariaDB 서비스의 현재 상태는 "실행 중"입니다.

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

UFW 방화벽 설정

모든 MariaDB 서버 간에 방화벽을 사용하는 것이 좋습니다. 이렇게 하면 허용된 IP 주소 또는 네트워크만 MariaDB 서비스 포트에 액세스하고 도달할 수 있습니다. 이 데모에서는 UFW 방화벽을 사용합니다.

아래의 "apt install" 명령을 실행하여 "ufw" 패키지를 설치하십시오. 설치를 확인하려면 Y를 입력하고 계속하려면 ENTER를 누르십시오.

sudo apt install ufw

설치가 완료되면 아래의 "ufw" 명령을 실행하여 "OpenSSH" 응용 프로그램 프로필을 추가하십시오. 그런 다음 UFW 방화벽 서비스를 실행하고 활성화합니다.

UFW 방화벽을 확인하고 활성화하라는 메시지가 표시되면 "y"를 입력하고 ENTER를 누릅니다. 그리고 UFW 방화벽이 실행 중입니다.

sudo ufw allow "OpenSSH"
sudo ufw enable

그런 다음 MariaDB 마스터-마스터 복제 배포를 위해 일부 포트를 엽니다. MariaDB 복제 배포를 위한 일부 TCP 포트는 "3306", "4567", "4568" 및 "4444"입니다.

이 예에서는 "192.168.5.0/24" 네트워크만 MariaDB 서버 TCP 포트에 액세스할 수 있습니다.

IP 주소가 "192.168.5.10"인 "master1" 서버의 경우 다음 "ufw" 명령을 실행하십시오.

sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 3306 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4567 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4568 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4444 proto tcp

IP 주소가 "192.168.5.11"인 "master2" 서버의 경우 다음 "ufw" 명령을 실행하십시오.

sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 3306 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4567 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4568 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4444 proto tcp

마지막으로 아래 명령을 사용하여 활성화된 모든 규칙으로 UFW 방화벽의 상태를 확인하고 확인합니다. UFW 방화벽에서 사용 가능한 모든 MariaDB 복제 포트 "3306", "4567", "4568" 및 "4444"가 있는 "OpenSSH" 애플리케이션 프로필이 표시되어야 합니다.

sudo ufw status

master1 MariaDB 서버 설정

MariaDB 마스터-마스터 복제 배포를 위한 Debian 서버의 기본 구성을 완료했습니다. 이제 MariaDB 서버 구성을 시작하겠습니다.

먼저 "master1" 서버에 MariaDB 서버를 설정합니다. "master1" 서버 셸에 로그인합니다.

MariaDB 서비스를 중지하려면 아래 "systemctl" 명령을 실행하십시오. 이것은 MariaDB 서버를 설정하기 전에 필요합니다.

sudo systemctl stop mariadb

이제 다음 명령을 사용하여 MariaDB 서버 구성 파일 "/etc/mysql/mariadb.conf.d/50-server.cnf"을 편집합니다.

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

기본 "listen-address"를 내부 IP 주소로 변경합니다. 이 예에서 \master1\ 서버의 IP 주소는 \192.168.5.10\입니다. 그런 다음 MariaDB 서버에 대해 "binary_log"를 활성화하면 MariaDB 서버에서 복제를 설정할 수 있습니다. "[mysqld]" 옵션 아래에 다음 구성을 배치해야 합니다.

[mysqld]
bind-address = 192.168.5.10

server-id              = 1
report_host            = master1

log_bin                = /var/log/mysql/mariadb-bin
log_bin_index          = /var/log/mysql/mariadb-bin.index

relay_log              = /var/log/mysql/relay-bin
relay_log_index        = /var/log/mysql/relay-bin.index

완료되면 파일을 저장하고 닫습니다.

그런 다음 아래 "systemctl" 명령을 실행하여 MariaDB 서비스를 시작하고 새 변경 사항을 적용합니다. 그런 다음 MariaDB가 실행 중인 IP 주소를 확인하고 확인합니다. 이제 MariaDB 서비스가 내부 IP 주소 "192.168.5.10"에서 실행되고 있는 것을 볼 수 있습니다.

sudo systemctl start mariadb
ss -plnt

이제 MariaDB 서버 간에 데이터를 복제하는 데 사용할 새 MariaDB 사용자를 생성해야 합니다. 아래의 "mysql" 명령을 사용하여 "root"로 MariaDB 셸에 로그인합니다.

sudo mysql -u root -p

다음 쿼리를 실행하여 새 MariaDB 사용자 및 암호 "replusr"를 만듭니다. 그런 다음 사용자에게 올바른 권한을 부여합니다.

CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr';
GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%';
FLUSH PRIVILEGES;

다음으로 다음 쿼리를 실행하여 현재 바이너리 로그와 정확한 위치를 확인합니다. 이 예에서 MariaDB 서버의 바이너리 로그 파일은 위치가 \773\인 \mariadb-bin.000001\입니다. 이러한 출력은 "master2" 서버 설정을 위한 다음 단계에서 사용됩니다.

SHOW MASTER STATUS;

"quit"를 입력하여 MariaDB 셸을 종료합니다.

master2 MariaDB 서버 설정

이제 "master2" 서버로 이동하여 MariaDB 서버 구성을 시작합니다. MariaDB 마스터-마스터 복제 구성은 모든 MariaDB 서버에서 특별히 다르지 않습니다.

다음 명령을 실행하여 MariaDB 서비스를 중지합니다.

sudo systemctl stop mariadb

다음 명령을 사용하여 MariaDB 구성 파일 "/etc/mysql/mariadb.conf.d/50-server.cnf"을 편집합니다.

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

"bind-address"를 "master2" 서버의 로컬 IP 주소로 변경합니다. 그런 다음 MariaDB 서버 "master2"에서 바이너리 로그를 활성화하여 복제를 활성화합니다. "[mysqld]" 옵션 아래에 다음 구성을 추가해야 합니다.

[mysqld]
bind-address = 192.168.5.11

server-id              = 2
report_host            = master2

log_bin                = /var/log/mysql/mariadb-bin
log_bin_index          = /var/log/mysql/mariadb-bin.index

relay_log              = /var/log/mysql/relay-bin
relay_log_index        = /var/log/mysql/relay-bin.index

완료되면 파일을 저장하고 닫습니다.

그런 다음 MariaDB 서비스를 시작하여 새 변경 사항을 적용합니다. 그런 다음 MariaDB 서버가 실행 중인 현재 IP 주소를 확인하고 확인합니다. 구성이 올바르면 MariaDB 서버가 "master2" 서버의 내부 IP 주소인 "192.168.5.11"에서 실행되고 있지 않은 것을 볼 수 있습니다.

sudo systemctl start mariadb
ss -plnt

MariaDB 서비스가 실행된 후 다음 명령을 실행하여 "root" 사용자로 MariaDB 셸에 로그인합니다.

sudo mysql -u root -p

다음 쿼리를 실행하여 모든 MariaDB 서버 간에 데이터를 복제하는 데 사용할 새 MariaDB 사용자를 만듭니다. 이 사용자는 "master1" 서버에서 방금 생성한 사용자와 일치해야 합니다.

CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr';
GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%';
FLUSH PRIVILEGES;

그런 다음 MariaDB "master2" 서버를 변경하고 MariaDB "master1" 서버의 세부 구성을 사용하여 "Master" 노드를 정의해야 합니다.

다음 쿼리를 실행하여 슬레이브를 중지합니다. 그런 다음 MariaDB "master1" 서버에 대한 자세한 정보를 추가합니다. 이 예에서 MariaDB "master1" 서버는 호스트 이름 "master1"을 사용하고 데이터 복제를 위한 사용자 및 비밀번호는 "replusr"이며 마지막으로 binlog 파일은 "mariadb-bin.000001"입니다. 위치는 \773\입니다.

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;

이제 다음 쿼리를 사용하여 슬레이브를 다시 시작하십시오. 그런 다음 "master2" 서버에서 슬레이브 상태를 확인하고 확인하십시오. "Slave_IO_Running: Yes" 및 "Slave_SQL_Running: Yes"와 같은 출력이 표시되면 MariaDB 복제가 활성화되어 실행 중임을 의미합니다. 또한 "master2" 서버의 바이너리 로그 파일이 위치가 "773인 "mariadb-bin.000001"임을 알 수 있습니다. \. 이는 "master1" 서버와 동일해야 합니다. 또한 MariaDB "Master_Host" 값이 "master1"임을 알 수 있습니다.

START SLAVE;
SHOW SLAVE STATUS\G

다음 쿼리를 사용하여 "master2" 서버에서 마스터 바이너리 로그 파일과 위치를 확인할 수도 있습니다. 그리고 "master1" 서버에서와 같이 위치가 "773"인 바이너리 로그 파일 "mariadb-bin.000001"과 동일한 출력을 얻어야 합니다.

SHOW MASTER STATUS;

master1 MariaDB 서버에서 마스터-마스터 복제 시작

이 가이드는 MariaDB 마스터-마스터 복제를 설정하는 것이므로 "master1" 서버에 "master2" 세부 구성도 추가하고 정의해야 합니다.

"master1" 서버로 돌아가서 아래의 "mysql" 명령을 사용하여 MariaDB 셸에 로그인합니다.

sudo mysql -u root -p

다음 명령을 사용하여 슬레이브를 중지합니다. 그런 다음 "master2" 서버 호스트 이름, 복제를 위한 MariaDB 사용자 및 암호, 바이너리 로그 파일 및 위치를 포함하는 "master2" 서버에 대한 자세한 정보를 추가합니다.

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master2', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;

이제 아래 명령을 사용하여 슬레이브를 다시 시작하십시오. 그런 다음 "master1" 서버에서 슬레이브를 확인하고 확인합니다. 그리고 "Slave_IO_Running: Yes" 및 "Slave_SQL_Running: Yes"와 같은 출력이 표시되어야 합니다. 이는 MariaDB 복제가 활성 상태이고 \\ master1\ MariaDB 서버. 또한 "Master_Host" 값이 "master2" 서버임을 알 수 있습니다.

START SLAVE;
SHOW SLAVE STATUS\G

데이터베이스 복제 테스트

MariaDB 마스터-마스터 복제를 확인하려면 "master1" 서버에 새 데이터베이스를 만들고 일부 데이터를 입력합니다. 그런 다음 "master2"에 로그인하여 데이터베이스를 확인하고 다른 데이터를 입력하십시오.

"master1" 서버로 이동하고 다음 명령을 사용하여 루트 사용자로 MariaDB 셸에 로그인합니다.

sudo mysql -u root -p

다음 쿼리를 사용하여 새 데이터베이스 "testdb"를 만듭니다.

CREATE DATABASE testdb;
USE testdb;

이제 다음 쿼리를 사용하여 "testdb" 데이터베이스에 일부 테이블을 만듭니다.

CREATE TABLE users (id INT AUTO_INCREMENT,
firstname VARCHAR(30),
lastname VARCHAR(30),
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id));

그런 다음 아래의 MariaDB 쿼리를 사용하여 "testdb"에 일부 데이터를 삽입합니다.

INSERT INTO users(firstname,lastname) VALUES ('Alice','Wonders');

MariaDB 서버에서 데이터를 확인하려면 아래와 같이 "SELECT" 쿼리를 사용하십시오. 방금 삽입한 데이터가 표시되어야 합니다.

SELECT * FROM users;

그런 다음 "master2" 서버로 이동하고 아래 "mysql" 명령을 사용하여 MariaDB 셸에 로그인합니다.

sudo mysql -u root -p

다음 쿼리를 사용하여 "master2" 서버의 데이터베이스 목록을 확인하고 확인합니다. 그리고 방금 생성한 "testdb" 데이터베이스를 가져와야 합니다.

SHOW DATABASES;
USE testdb;

다음으로 "master2" 서버에서 "testdb" 데이터베이스에 다른 데이터를 삽입합니다. 그런 다음 "SELECT" 쿼리를 사용하여 데이터를 확인하고 확인합니다. 그리고 "master2" 서버에서 삽입된 새 데이터를 가져와야 합니다.

INSERT INTO users(firstname,lastname) VALUES ('Bob','Burgers');
SELECT * FROM users;

이제 다시 "master1"으로 이동하여 방금 "master2" 서버에서 삽입한 새 데이터를 확인하고 확인하십시오. 다음 쿼리를 실행하여 "master1" 서버에서 새 데이터를 확인하십시오. 그리고 방금 "master2" 서버에서 삽입한 새 데이터가 "master1" 서버로 복제되는 것을 볼 수 있습니다.

select @@hostname;
SELECT * FROM users;

결론

축하합니다! 이제 Debian 11 서버에 MariaDB 마스터-마스터 복제를 성공적으로 배포했습니다. 또한 Chrony 서비스를 사용하여 MariaDB 서버에서 시간 동기화를 구성했습니다. 또한 UFW 방화벽을 사용하여 MariaDB 서버 배포를 보호했습니다. 결국 두 MariaDB 서버 간에 자동 복제 기능이 있는 MariaDB 서버가 있고 모든 MariaDB 서버에 쓸 수 있으며 모든 데이터가 자동으로 복제됩니다.