2023.11.09(목) - Day 9

  • 강의 내용
    • 리눅스에 데이터베이스 설치
    • Replication vs Clustering
    • Sharding

리눅스 준비

  • 환경: Window11 + vmware pro 17 (centos8)
  • db1: 110.110.110.xxx - mysql-server
  • db2: 110.110.110.xxx - mysql-server
  • db3: 110.110.110.xxx - mysql-server
  • router: 110.110.110.xxx - mysql-router

computer 이름 설정

vi /etc/hostname
  • localhost 지우고 원하는대로 리눅스 서버의 이름 변경

init 6
  • 설정 적용을 위한 서버 재부팅

동일한 방식으로 4대의 리눅스 pc의 이름 설정.


다른 컴퓨터의 ip 주소를 이름으로 설정

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


(참고) yum 작동 안될 때

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
  • centos8에서 yum 안되는 문제 해결

mysql


mysql 설치

# 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 순차적으로 입력

db cluster 구성

# 클러스터 생성 준비 (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으로 된 것 확인

mysql 서버 설정

# 서버 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
    • 해결: stop slave; reset slave; 후 다시 실행

  • 인스턴스 추가할 때 에러
    [GCS] Error on opening a connection to db1:33061 on local port: 33061.
    • 해결: 3대 전부 mysqld끄고 /var/lib/mysql/* 삭제, cd ~, mysqld 시작, 클러스터 설정 다시 진행


  • 클러스터 삭제
    \connect clusteradmin@db1:3306
    var cluster = dba.getCluster()
    cluster.dissolve()
    y

router 구성

  • 방화벽 끄기

  • 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 실행

    • 생성된 폴더 안에 있는 start.sh 파일 실행
      /root/mycluster/start.sh
      ./mycluster/start.sh
  • workbench에서 접속 테스트

    • hostname: mysql-router 컴퓨터의 ip 주소
    • username: mysql-router에서 생성한 계정
    • port: 6446 or 6447 (6446: 읽기/쓰기, 6447: 읽기 전용)
  • 접속 후
    show variables like '%server_id%';

    • 실행해서 server_id 확인
    • 접속할 때마다 server_id가 바뀌어야 정상

실행 모습

router

db1, db2, db3, router 모두 동일하게 설정 완료

  • 110.110.110.xxx db1
  • 110.110.110.xxx db2
  • 110.110.110.xxx db3
  • 110.110.110.xxx router

cluster는 한 곳에 만들고 나머지 2대는 가입하는 형태


참고>

  • cluster 구성은 최소 3대 이상으로 구성
  • NOSQL은 대개 cluster 구성을 최소 2대로 시작 (짝수 대수로 구성)

  • connection 연결 제대로 잘 되었고
  • Cluster 생성까지 성공.

  • db2, db3 instance 추가

  • db3개가 하나의 cluster에 들어와 있는 것 확인

  • router 설치 화면

  • 6446 포트 접속 결과

  • 6447 접속 결과

HW

  • Instance 2대 추가
  • Primary kill 해보기
  • Multi-Primary도 해보기

Replication vs Clustering

ReplicationClustering
서버 개수master 1, slave n최소 3대
속도빠름느림
안전성조금 안좋음좋음
방식비동기동기
단점master가 죽으면 복구하기 까다로움Primary가 죽어도 Secondary 중 자동으로 Primary 선정

profile
Web Developer

0개의 댓글