vi /etc/hostname
init 6
동일한 방식으로 4대의 리눅스 pc의 이름 설정.
vi /etc/hosts
110.110.110.xxx db1
110.110.110.xxx db2
110.110.110.xxx db3
110.110.110.xxx router
ping db1
vi /etc/yum.repos.d/CentOS-Stream-AppStream.repo
name=CentOS Linux $releasever - AppStream
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
baseurl=http://vault.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
# mysql-server 설치 (db1, db2, db3)
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 restart mysqld
# 초기 설정
mysql_secure_installation
# No, password, password, y, y, y, y 순차적으로 입력
# 클러스터 생성 준비 (db1, db2, db3)
# mysql-shell 실행
mysqlsh
# 클러스터 구성용 계정 생성
dba.configureInstance('root@localhost:3306')
# 패스워드 입력 root 로그인 필요하기 때문에 root 패스워드 입력
# Y 패스워드 저장하겠다
# 2 새로운 계정 생성
# clusteradmin 새로운 계정의 이름 입력
# 패스워드 입력
# 패스워드 확인
# y 설정 바꿀거냐?
# y 재실행 할거냐?
# root 계정으로 로그인해서 설정 내용 확인
dba.checkInstanceConfiguration('clusteradmin@localhost:3306')
# 패스워드 입력
y
# 실행 후 ok 확인
\quit
mysql -u root -p
show variables like '%enforce_gtid_consistency%';
# 실행 결과에서 Value에 ON으로 된 것 확인
# 서버 ID 및 포트 설정
vi /etc/my.cnf.d/mysql-server.cnf
server-id=[각자 다른 숫자]
port=3306
mysqlx=ON
mysqlx-port=33060
# 설정 적용
# 방화벽 끄기
# 1) 네트워크 방화벽 설정
systemctl stop firewalld
# 2) 로컬 방화벽
setenforce 0
# 클러스터 생성(db1)
# 1) clusteradmin 계정으로 로그인
\connect clusteradmin@db1:3306
# 패스워드 입력
y
# 클러스터 생성
var cluster = dba.createCluster('MyCluster', {ipAllowlist: "db1, db2, db3"})
# 클러스터에 인스턴스 추가
var cluster = dba.getCluster()
cluster.addInstance('clusteradmin@db2:3306', {ipAllowlist: "db1, db2, db3"})
C # 클론 방식으로 데이터를 공유하겠다
cluster.addInstance('clusteradmin@db3:3306', {ipAllowlist: "db1, db2, db3"})
C # 클론 방식으로 데이터를 공유하겠다
# 클러스터 확인
var cluster = dba.getCluster()
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
[GCS] Error on opening a connection to db1:33061 on local port: 33061.
Slave failed to initialize relay log info structure from the repository, Error_code: MY-013124
\connect clusteradmin@db1:3306
var cluster = dba.getCluster()
cluster.dissolve()
y
방화벽 끄기
mysql-router 설치
yum install -y https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
yum install -y mysql-router
mysql-router 구성
mysqlrouter --bootstrap clusteradmin@db1:3306 --name clusterrouter --directory mycluster --account myrouter --user root
--bootstrap : 대표 서버 주소
--name : 구성할 라우터 이름
--directory : 구성 파일이 생성 될 디렉토리의 경로
--account : 라우터로 접속할 때 사용할 계정
--user : 파일을 생성할 리눅스의 사용자
router 실행
/root/mycluster/start.sh
./mycluster/start.sh
workbench에서 접속 테스트
접속 후
show variables like '%server_id%';
db1, db2, db3, router 모두 동일하게 설정 완료
cluster는 한 곳에 만들고 나머지 2대는 가입하는 형태
참고>
NOSQL
은 대개 cluster 구성을 최소 2대로 시작 (짝수 대수로 구성)Replication | Clustering | |
---|---|---|
서버 개수 | master 1, slave n | 최소 3대 |
속도 | 빠름 | 느림 |
안전성 | 조금 안좋음 | 좋음 |
방식 | 비동기 | 동기 |
단점 | master가 죽으면 복구하기 까다로움 | Primary가 죽어도 Secondary 중 자동으로 Primary 선정 |