클러스터(Cluster) 란 무엇인가? ✍
"Replication" 과 "Clustering" 의 차이는 무엇인가? ✍
Master Node
에서는 쓰기 작업 만을 처리하고, Slave Node
에서는 읽기 작업만 처리한다.Master Node
가 다운되면 복구하는것이 까다롭다.Fail Over
시스템을 구축하기 위해 사용된다.❗Cluster 구성 실습하기❗
컴퓨터 이름 설정 : vi /etc/hostname
➡ 수정 후 시스템 재시작(init 6
) 시 반영된다.
➡ 나는 "db1", "db2", "db3", "router" 로 설정하겠다.
컴퓨터의 IP 를 설정해준다. ( 아래는 내가 설정한 IP 주소이다. )
➡ db1 : 77.77.77.131
➡ db2 : 77.77.77.132
➡ db3 : 77.77.77.133
➡ router : 77.77.77.100
컴퓨터의 IP 주소를 이름으로 설정 : vi /etc/hosts
➡ 기본 양식 : [DB1 IP주소] [지정할 이름]
➡ 위와 같이 4대의 컴퓨터 모두 설정해준다. 여기서 중요한 것은 이름을 지정해줄때
1번에서 설정해준 컴퓨터의 이름과 동일하게 설정✅ 해줘야된다는 것이다.
나중에 클러스터를 설정할 때 이름이 다르면 IP 주소를 찾아가질 못해서
오류가 발생하는것을 수업 시간에 확인했었다.
yum install -y mysql-server
yum install -y https://dev.mysql.com/get/mysql80-community-release
-el8-9.noarch.rpm
yum install -y mysql-shell
systemctl start mysqld
mysql_secure_installation
mysqlsh
dba.configureInstance('root@localhost:3306')
2
입력 후 새롭게 사용할clusteradmin
과 사용할 비밀번호를 입력해준다.dba.checkInstanceConfiguration('clusteradmin@localhost:3306')
show variables like '%enforce_gtid_consistency%';
mysql 서버 ID 및 포트 설정 : vi /etc/my.cnf.d/mysql-server.cnf
1) [mysqld] 아래에 다음과 같이 추가
server-id=[각자 다른 숫자 임의지정]
port=3306
mysqlx=ON
mysqlx-port=33060
2) 설정 파일을 수정했으므로 재시작 : systemctl restart mysqld
방화벽 끄기 : setenforce 0
(로컬) 과 systemctl stop firewalld
(네트워크)
클러스터 생성 : 클러스터 생성은 1개의 컴퓨터에서 실시( 나는 db1에서 실시하겠다. )
1) mysql-shell 접속 : mysqlsh
2) clusteradmin 계정으로 로그인 : \connect clusteradmin@db1:3306
3) 클러스터 생성 : var cluster = dba.createCluster('MyCluster',
{ipAllowlist: "db1, db2, db3"})
클러스터에 인스턴스 추가
1) 현재 클러스터 구성 확인 : var cluster = dba.getCluster()
2) db2 추가 / 아래 명령어 입력 후 "C" (클론 방식으로 데이터 공유) 입력
cluster.addInstance('clusteradmin@db2:3306', {ipAllowlist: "db1, db2, db3"})
3) db3 추가 / 아래 명령어 입력 후 "C" (클론 방식으로 데이터 공유) 입력
cluster.addInstance('clusteradmin@db3:3306', {ipAllowlist: "db1, db2, db3"})
클러스터 상태 확인
1) var cluster = dba.getCluster()
2) cluster.describe()
실행 : "topology" 에 db1, db2, db3이 있으면 성공
3) cluster.status()
Single-Primary 와 Multi-Primary 모드 변경하는 방법 🧐
Multi-Primary -> Single-Primary ✅
1) mysql-shell 실행 : mysqlsh
2) clusteradmin 계정으로 로그인 : \connect clusteradmin@db1:3306
3) 모드 변경 쿼리문 입력 : cluster.switchToMultiPrimaryMode();
Single-Primary -> Multi-Primary ✅
1) mysql-shell 실행 : mysqlsh
2) clusteradmin 계정으로 로그인 : \connect clusteradmin@db1:3306
3) 모드 변경 쿼리문 입력 : cluster.switchToSinglePrimaryMode();
➡ 이렇게 하면 기존에 "db1"이 Primary 였기때문에 그대로 "db1" 이 Primary 가 된다.
4) Primary를 변경하면서 모드 변경
cluster.switchToSinglePrimaryMode('[변경하고자 하는 서버명]:3306');
\connect clusteradmin@db1:3306
var cluster = dba.getCluster()
cluster.dissolve()
❗라우터 구성 실습하기❗
1. 라우터 컴퓨터의 방화벽을 꺼준다.
1) setenforce 0
2) systemctl stop firewalld
2. mysql-router를 설치한다.
1) mysql이 제공하는 repo(저장소) 추가
yum install -y https://dev.mysql.com/get/mysql80-community-release
-el8-9.noarch.rpm
2) mysql-route 설치 : yum install -y mysql-router
3. mysql-router를 구성한다.
mysqlrouter --bootstrap clusteradmin@db1:3306 --name clusterrouter
--directory mycluster --account myrouter --user root
--bootstrap : 대표 서버 주소
--name : 구성할 라우터 이름
--directory : 구성 파일이 생성 될 디렉토리의 경로
--account : 라우터로 접속할 때 사용할 계정
--user : 파일을 생성할 리눅스의 사용자
4. 라우터를 실행한다 : /root/mycluster/start.sh
5. MySQL Workbench 에서 접속 테스트를 한다.
hostname : [라우터 컴퓨터의 IP 주소]
username : [라우터 구성 시 생성해준 계정명]
port : [6446 or 6447] / 6446은 읽기/쓰기 가능, 6447은 읽기만 가능
➡ 각각 포트로 접속 후 show variables LIKE '%server_id%';
쿼리문을 입력하여
출력되는 server-id
를 확인해본다.
➡ 6446
포트로 접속하면 읽기/쓰기가 가능한 1개의 server-id
가 출력될 것이고,
6447
포트로 접속하면 나머지 2개의 server-id
가 접속할때마다 바뀌면서
출력되는 것을 확인할 수 있다.
server-id
가 내가 설정해준 id랑 다르게 나타나는데 중요한 사항은 아니다. 중요한것은 server-id
가 포트 번호에 맞게 접속했을 때 동일한 숫자로 출력되면 된다. 오늘의 느낀점 👀