리눅스 준비
DB_server110 192.168.72.110 mysql-server
DB_server120 192.168.72.120 mysql-server
DB_server130 192.168.72.130 mysql-server
router 192.168.72.140 mysql-router
1) 컴퓨터 이름 설정
/etc/hostname 컴퓨터 이름을 설정하는 파일
내용 삭제 후 처음에 설계했던 PC이름 입력 (ex : DB_server110)
2) 다른 컴퓨터의 IP주소를 이름으로 설정
/etc/hosts IP주소와 이름을 매핑하는 파일
마지막 줄에 다음 내용 추가
192.168.72.110 DB_server110
192.168.72.120 DB_server120
192.168.72.130 DB_server130
mysql-server 설치(db1, db2, db3)
1) mysql-server 설치
yum install -y mysql-server
2) mysql이 제공하는 repo(저장소) 추가
yum install -y https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
3) mysql-shell 설치
yum install -y mysql-shell
4) mysql 서버 실행
systemctl restart mysqld
5) 초기설정
mysql_secure_installation
No
패스워드
패스워드
y 4번
클러스터 생성 준비(db1, db2, db3 각각 전부 실시)
0) mysql-shell 실행
mysqlsh
1) 클러스터 구성용 계정 생성 (바탕이 흰색이면 메시지가 잘 안보인다.)
dba.configureInstance('root@localhost:3306')
패스워드 입력 root 로그인 필요하기 때문에 root 패스워드 입력
Y 패스워드 저장하겠다
2 새로운 계정 생성
clusteradmin 새로운 계정의 이름 입력
패스워드 입력
패스워드 확인
y 설정 바꿀거냐?
y 재실행 할거냐?
2) root 계정으로 로그인해서 설정 내용 확인
dba.checkInstanceConfiguration('clusteradmin@localhost:3306')
패스워드 입력
y
실행 후 ok 확인
\quit
mysql -u root -p
show variables like '%enforce_gtid_consistency%';
실행 결과에서 Value에 ON으로 된 것 확인
mysql 서버 설정
1) 서버 ID 및 포트 설정
vi /etc/my.cnf.d/mysql-server.cnf
server-id=[각자 다른 숫자]
port=3306
mysqlx=ON
mysqlx-port=33060
2) 설정 적용
systemctl restart mysqld
방화벽 끄기
1) 네트워크 방화벽 설정
systemctl stop firewalld
2) 로컬 방화벽
setenforce 0
클러스터 생성(db1 하나에서만 진행)
1) clusteradmin 계정으로 로그인
\connect clusteradmin@server110:3306
패스워드 입력
y
2) 클러스터 생성
var cluster = dba.createCluster('MyCluster', {ipAllowlist: "server110, server120, server130"})
3) 클러스터에 인스턴스 추가
cluster.addInstance('clusteradmin@server130:3306', {ipAllowlist: "server110, server120, server130"})
C 클론 방식으로 데이터를 공유하겠다.
cluster.addInstance('clusteradmin@db3:3306', {ipAllowlist: "server110, server120, server130"})
C 클론 방식으로 데이터를 공유하겠다.
4) 클러스터 확인
cluster.describe() 실행했을 때 "topology" 에 db1, db2, db3이 있으면 성공
cluster.status()
*클러스터 모드
Single-Primary : 클러스터 내의 1개의 서버에서만 읽기-쓰기 가능, 나머지는 읽기 전용
Multi-Primary : 클러스터 내의 모든 서버에서 읽기-쓰기 가능
상황 : 클러스터 생성할 때 에러
에러 : Slave failed to initialize relay log info structure from the repository, Error_code: MY-013124
해결 : stop slave; reset slave; 후 다시 실행
상황 : 인스턴스 추가할 때 에러
에러 :[GCS] Error on opening a connection to db1:33061 on local port: 33061.
해결 : 3대 전부 mysqld끄고 /var/lib/mysql/* 삭제, cd ~, mysqld 시작, 2-5번부터 다시 진행
참고 : https://dev.mysql.com/doc/mysql-shell/8.0/en/add-instances-cluster.html
클러스터 삭제
\connect clusteradmin@db1:3306
var cluster = dba.getCluster()
cluster.dissolve()
라우터 구성(router)
0) hosts 설정
1) 방화벽 끄기
2) mysql-router 설치
yum install -y https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
yum install -y mysql-router
3) mysql-router 구성
mysqlrouter --bootstrap clusteradmin@server110:3306 --name clusterrouter --directory mycluster --account myrouter --user root
--bootstrap : 대표 서버 주소
--name : 구성할 라우터 이름
--directory : 구성 파일이 생성 될 디렉토리의 경로
--account : 라우터로 접속할 때 사용할 계정
--user : 파일을 생성할 리눅스의 사용자
4) 라우터 실행
생성된 폴더 안에 있는 start.sh 파일을 실행
/root/mycluster/start.sh
./mycluster/start.sh
5) workbench에서 접속 테스트
hostname : 192.168.72.140
username : mycluster
port : [6446 or 6447] 6446은 읽기/쓰기, 6447 읽기 전용
접속 후
show variables LIKE '%server_id%'; 실행해서 server-id를 확인, 접속할 때마다 server-id가 바껴야 정상