kjh00n의 기록저장소
Mysql 8에 SSL 적용해서 이중화하기 본문
[서버 구성]
Master Server | Rocky Linux 9 + MySQL 8 | 192.168.50.50 |
Slave Server | Rocky Linux 9 + MySQL 8 | 192.168.50.60 |
[모든 서버]
yum -y install mysql-server
systemctl enable mysqld
systemctl start mysqld
systemctl start firewalld
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
vim /etc/ssh/sshd_config
Port 22 주석 해제하기
PermitRootLogin yes 추가하기
systemctl restart sshd
[Master Server]
인증서, 인증키 생성
mkdir -p /etc/mysql/ssl
openssl req -x509 -newkey rsa:2048 -keyout /etc/mysql/ssl/server-key.pem -out /etc/mysql/ssl/server-cert.pem -days 365 -nodes
openssl dhparam -out /etc/mysql/ssl/dhparam.pem 2048
chmod 600 /etc/mysql/ssl/*
chown mysql:mysql /etc/mysql/ssl/*
vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
↓ 밑에 내용 추가
server_id=1
log-bin=mysql-bin
ssl-ca=/etc/mysql/ssl/server-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
ssl-cipher=TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES256-GCM-SHA384
systemctl restart mysqld
1. 슬레이브 서버에서 실행
mkdir -p /etc/mysql/ssl
2. 마스터 서버에서 실행 (Master의 인증키, 인증서 Slave에게 복사)
scp /etc/mysql/ssl/* root@192.168.50.60:/etc/mysql/ssl/
3. 슬레이브 서버에서 실행
chmod 600 /etc/mysql/ssl/*
chown mysql:mysql /etc/mysql/ssl/*
[모든 서버]
mysql 접속해서 repl 계정 생성
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
[Slave Server]
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
↓ 밑에 내용 추가
server_id=2
log-bin=mysql-bin
ssl-ca=/etc/mysql/ssl/server-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
systemctl restart mysqld
mysql 접속
CHANGE MASTER TO
MASTER_HOST='192.168.50.50',
MASTER_USER='repl',
MASTER_PASSWORD='repl',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=517,
MASTER_SSL=1,
MASTER_SSL_CA='/etc/mysql/ssl/server-cert.pem',
MASTER_SSL_CERT='/etc/mysql/ssl/server-cert.pem',
MASTER_SSL_KEY='/etc/mysql/ssl/server-key.pem';
start slave;
※slave쪽에서 mysql_secure_installation을 설치해서 아래 결과처럼 나올 수도 있음.
나중에 설치 안하는 방향으로 해보기
[WireShark]
암호화 통신되는데 진짜 드럽게 오래 걸렸음. 바로 적용이 안되던데??
나중에 mysql_secure_installation 설치 안하고 해보기
Master에서 생성된 데이터들이 이중화될 때 TLSv1.3을 통해 암호화된 상태로 Slave에게 동기화 된다.
여기까지 했는데도 안된다? WireShark에서 TLSV1.3으로 통신이 안된다?
● Slave에서 mysql_secure_install 설정해라 (초기 DB 보안 설정이다)
● 그리고 mysql -u root -p --ssl-ca=/etc/mysql/ssl/server-cert.pem --ssl-cert=/etc/mysql/ssl/server-cert.pem --ssl-key=/etc/mysql/ssl/server-key.pem 입력해서 mysql 접속해봐라 (ssl 강제로 사용해서 접속하는 것)
● 그냥 계속 두 서버 모두 restart 해봐라. (아직까지 통신에서 TLSv1.3이 사용되는 기준을 모르겠다)
● 갑자기 암호화통신되고....뭔데 도대체
'파이널 프로젝트' 카테고리의 다른 글
Project B에 MHA + SSL 구축하기 (0) | 2025.02.18 |
---|---|
Rocky Linux9 + MySQL 8로 MHA 구성 (SSL 있는 ver.) root계정 사용 (0) | 2025.02.17 |
Rocky Linux9 + MySQL 8로 MHA 구성 (SSL 없는 ver.) (0) | 2025.02.13 |
MariaDB Galera Cluster 구성 (0) | 2025.02.06 |
Galera Cluster (0) | 2025.02.06 |