mariadb 마스터

서버 환경

IP1:10.10.0.11 IP2:10.10.0.12

1. 구성 파일을 별도로 가져옵니다.

mkdir -p /data/mariadb/conf/
vim my.cnf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
lower_case_table_names=1
wait_timeout=1800
max_allowed_packet = 512M
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
skip-host-cache

2. 각각 docker로 mariadb를 시작합니다.

docker run -d --restart=always -p3306:3306 --name mariadb -v /etc/localtime:/etc/localtime  -v /data/mariadb/conf/my.cnf:/etc/mysql/my.cnf -v /data/mariadb/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  mariadb:10.6

3. 중복 계정을 생성하고 별도로 승인하세요.

grant replication slave on *.* to repluser@'10.10.0.%' identified by 'zhuzhu';

4. 마스터-마스터 복제의 특징

두 노드 모두 데이터를 업데이트하고 서로 마스터-슬레이브 역할을 할 수 있습니다. 데이터 불일치 문제가 발생하기 쉬우므로 프로덕션에서는 주의해서 사용해야 합니다.

마스터-마스터 복제를 위한 구성 단계:
(1) 각 노드는 고유한 server_id를 사용합니다.
(2) 바이너리 로그 및 릴레이 로그 시작
(3) 복제 권한이 있는 사용자 계정 생성
(4) 자동으로 증가하는 id 필드의 값 범위를 정의합니다. auto_increment_offset=1 auto_increment_increment=2
(5) 두 마스터는 서로를 마스터 노드로 지정하고 복제 스레드를 시작해야 합니다.

5. 마스터 노드 10.10.0.11 구성

5.1# [mysqld] 섹션에 4줄을 추가하여 노드 ID, 시작 바이너리, 시작 지점 및 성장률을 정의합니다.
vim /data/mariadb/conf/my.cnf

[mysqld]
server-id=11
log-bin
auto_increment_offset=1
auto_increment_increment=2


5.2# 바이너리 로그 정보를 보고 기록합니다. 73e4df274138-bin.000001 및 335 두 값은 데이터베이스 마스터 노드 10.10.012 docker exec -it mariadb bash
mysql -uroot -p123456 에서 다시 구성하는 데 사용됩니다.

MariaDB [(none)]> show master logs;
+-------------------------+-----------+
| Log_name                | File_size |
+-------------------------+-----------+
| 73e4df274138-bin.000001 |       335 |
+-------------------------+-----------+
1 row in set (0.000 sec)

6. 마스터 노드 10.10.0.12를 구성합니다.

6.1# [mysqld] 섹션에 4줄을 추가하여 노드 ID, 시작 바이너리, 시작 지점 및 성장률
vim /data/mariadb/conf/my.cnf를 정의합니다.

[mysqld]
server-id=12
log-bin
auto_increment_offset=2
auto_increment_increment=2

6.2# 데이터베이스 복제 구성

stop slave; 

CHANGE MASTER TO 
MASTER_HOST='10.10.0.11',
MASTER_USER='repluser', 
MASTER_PASSWORD='zhuzhu',
MASTER_PORT=3306,
MASTER_LOG_FILE='73e4df274138-bin.000001', 
MASTER_LOG_POS=1629;

start slave; 

6.3# 바이너리 로그 정보를 보고 기록합니다. 179d604d3e6f-bin.000001과 538 두 값은 데이터베이스 마스터 노드 10.10.0.11을 다시 구성할 때 사용됩니다.

MariaDB [(none)]> show master logs;       
+-------------------------+-----------+
| Log_name                | File_size |
+-------------------------+-----------+
| 179d604d3e6f-bin.000001 |       538 |
+-------------------------+-----------+
1 row in set (0.000 sec)

6.4# IP11에서 IP12로의 복제 상태 확인

MariaDB [(none)]> show slave status\G

7. 그런 다음 데이터베이스 마스터 노드 10.10.0.11의 복제를 구성합니다.

stop slave;

CHANGE MASTER TO 
MASTER_HOST='10.10.0.12',
MASTER_USER='repluser', 
MASTER_PASSWORD='zhuzhu',
MASTER_PORT=3306,
MASTER_LOG_FILE='179d604d3e6f-bin.000001', 
MASTER_LOG_POS=1382;

start slave;

7.1# IP12에서 IP11로의 복제 상태 확인

show slave status\G 

이 시점에서 기본 MariaDB 데이터베이스로서 두 서버의 복제(마스터-마스터 복제) 구성이 완료됩니다.

8. 데이터베이스 마스터-마스터 복제 확인

기본 데이터베이스 노드 1에 test1 데이터베이스를 생성합니다.

데이터베이스 test1 생성, 데이터베이스 test1 사용 테이블 생성,
테이블 t1 생성(id int auto_increment 기본 키, 이름 char(10)), 키 값 쌍 삽입 t1(이름) 값 삽입('user1');



그런 다음 기본 데이터베이스 노드 2로 전환하고 shonedb1 데이터베이스의 t1 테이블에 키 값 쌍을 삽입합니다.

데이터베이스 test1을 사용하십시오.
t1 (이름) 값 삽입('user2');

그런 다음 SSH 터미널 소프트웨어를 통해 다음 명령이 데이터베이스 마스터 노드 1과 데이터베이스 마스터 노드 2에 동시에 전송되었습니다.

t1 (이름) 값 삽입('userX');

결과를 보려면
t1에서 *를 선택하세요.

9. 고가용성을 달성하기 위해 연결 유지 생성

yum install keepalived -y
9.1은 비선점 모드를 사용하고 노드 1의 keepalived.conf를 편집합니다.

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
   }
   notification_email_from [email protected]
   router_id LVS_DEVEL

  # vrrp_strict

}
vrrp_script chk_mariadb {
script "/root/check_mariadb.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行       
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2
}

vrrp_instance VI_1 {
    state BACKUP #两台都需要设置为backup
    interface eth0
    virtual_router_id 51
    priority 99
    nopreempt #非抢占模式
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 8888
    }
    virtual_ipaddress {
        10.10.0.150/24
    }
   track_script {
   chk_mariadb #调用检测脚本
}
}

9.2 비선점 모드 사용 및 노드 2의 keepalived.conf 편집

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
   }
   notification_email_from [email protected]
   router_id LVS_DEVEL
}
vrrp_script chk_mariadb {
script "/root/check_mariadb.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2
}

vrrp_instance VI_1 {
    state BACKUP #两台都需要设置为backup
    interface eth0
    virtual_router_id 51
    priority 100
    nopreempt #非抢占模式
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 8888
    }
    virtual_ipaddress {
        10.10.0.150/24
    }
    track_script {
    chk_mariadb #调用检测脚本
}
}

9.3 모니터링 mariadb 스크립트 사용
vim /root/check_mariadb.sh

#!/bin/bash
A=`ps -C mariadbd --no-header |wc -l`
if [ $A -eq 0 ]
then
echo 'mariadb server is died'
systemctl stop keepalived
fi

chmod +x /root/check_mariadb.sh

10.
ip addr을 테스트하여 가상 IP가 어느 서버에 있는지 확인하고
mariadb를 종료하여 스크립트가 적용되는지, IP가 우아한지 확인합니다.
Docker stop mariadb

추천

출처blog.csdn.net/weixin_42516922/article/details/134014505