클러스터(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-serveryum install -y https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpmyum install -y mysql-shellsystemctl start mysqldmysql_secure_installationmysqlshdba.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"})
4) 위와 같이 뜨면 정상적으로 생성된 것이다.
클러스터에 인스턴스 추가
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:3306var 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		: 파일을 생성할 리눅스의 사용자
 - 정상적으로 구성된다면 위와 같이 접속할 수 있는 포트번호가 출력된다.
   1) 읽기/쓰기가 가능한 연결 : `6446` 포트
   2) 읽기만 가능한 연결 : `6447` 포트
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 가 포트 번호에 맞게 접속했을 때 동일한 숫자로 출력되면 된다. 오늘의 느낀점 👀