DB 복제와 샤딩
DB 샤딩 실습 review
왜 해시샤딩(파티션)인데 해시별 크기가 많이 차이나는가?
샤딩이 곧 로드밸런싱
샤딩은 일종의 로드밸런싱(Load Balancing) 기술
- RR(Round Robin)
- 정적(Static) vs. 동적(Dynamic)
- 기계적 로드밸런싱 vs. 적응형(Adaptive) 로드밸런싱
추측) spider엔진에서 적응형 로드밸런싱을 하여 저장하여 저번 실습 결과 shard_db1과 shard_db2의 크기가 차이날 것이다.
복제와 샤딩의 결합
샤딩(Write Scalability) + 복제(Read Scalability)
- 먼저 샤딩을 적용한다.
- 쓰기 성능을 향상
- 그리고 개별 샤드를 복제한다.
- 읽기 성능을 향상
실습
디비 설정
복제
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;
샤딩
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
$ 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
Author And Source
이 문제에 관하여(DB 복제와 샤딩), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kbj7227/DB-복제와-샤딩저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)