DB 복제와 샤딩

DB 샤딩 실습 review


왜 해시샤딩(파티션)인데 해시별 크기가 많이 차이나는가?

샤딩이 곧 로드밸런싱

샤딩은 일종의 로드밸런싱(Load Balancing) 기술

  • RR(Round Robin)
  • 정적(Static) vs. 동적(Dynamic)
  • 기계적 로드밸런싱 vs. 적응형(Adaptive) 로드밸런싱

추측) spider엔진에서 적응형 로드밸런싱을 하여 저장하여 저번 실습 결과 shard_db1과 shard_db2의 크기가 차이날 것이다.

복제와 샤딩의 결합

샤딩(Write Scalability) + 복제(Read Scalability)

  1. 먼저 샤딩을 적용한다.
  • 쓰기 성능을 향상
  1. 그리고 개별 샤드를 복제한다.
  • 읽기 성능을 향상

실습

디비 설정

복제

MySQL 복제마스터 설정파일

cd /home/자신

mkdir master

vi config_file.cnf

[mysqld]
log-bin=mysql-bin 
server-id=1 

cd /home/자신

mkdir slave 

vi config_file.cnf

[mysqld]
server-id=2 
read_only=1 

도커 생성

docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=ssu -v /home/자신/master/:/etc/mysql/conf.d  --name=shard_db1 mariadb:10.1

docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=ssu -v /home/자신/slave/:/etc/mysql/conf.d  --name=shard_db1_slave mariadb:10.1

ip 확인

$ docker inspect shard_db1 | grep IPAddress 
$ docker inspect shard_db1_slave | grep IPAddress

마스터 설정

select @@server_id;

show master status;

값 저장 해놓기 

CREATE USER 'repluser'@'%' IDENTIFIED BY 'replpw';

GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%';

슬레이브 설정

CHANGE MASTER TO MASTER_HOST='서버IP주소', MASTER_USER='복제슬레이브
계정명', MASTER_PASSWORD='계정비밀번호', MASTER_LOG_FILE='바이너리로그파일명',
MASTER_LOG_POS=바이너리로그상의 위치;
start slave;

샤딩

이걸 따라해주세요

launchpad 다운로드

이걸 따라해주세요

웹 어플리케이션 설정

build.gradle

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

application.yml

spring:
  datasource:
    url: jdbc:mariadb://172.17.0.2:3306/employees
    driver-class-name: org.mariadb.jdbc.Driver
    username: root
    password: ssu

  jpa:
    open-in-view: false
    show-sql: true
    generate-ddl: false
    format-sql: true
    hibernate:
      ddl-auto: none

java 코드

github에서 참조해주세요~
https://github.com/bangjom/Sharding-Replication

좋은 웹페이지 즐겨찾기