728x90

1. nest project생성

# nest.js cli 설치
npm i -g @nestjs/cli

#프로젝트 생성
# 패키지 매니저 설정: npm 선택
nest new [프로젝트 폴더명]

 

2. 도커이미지 생성프로젝트 루트경로에 Dockerfile, .dickerignore 생성

a. 프로젝트 루트경로에 Dockerfile, .dickerignore 생성

# Dockerfile
FROM node:lts-alpine
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
# .dockerignore
node_modules
dist
.git
Dockerfile

 

b. 빌드 & 실행

# 프로젝트 루트경로에서
# 도커 이미지 생성
# dockerhub에 올릴꺼면 docker hub repo명과 도커이미지명이 같아야함
docker build -t [도커이미지 명] .

# 이미지 확인
docker images

# 로컬에서 이미지 실행
docker run -it -p [접속port]:[도커port] [도커이미지 명]

 

c. docker hub push

docker login --username=[dockerhub Id]
docker push [도커이미지 명]:[image version]

 

3. minikube + kubectl로 service띄우기

a. minikube 설치

# macOS
brew install minikube

# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

# Usages
minikube start

 

b. kubectl설치

  - mac : https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/

  - window : https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/

  - linux : https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/ 

c. deployment.yaml파일 생성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nest
  labels:
    app: nest
spec: # specification
  replicas: 2
  selector: 
    matchLabels:
      app: nest
  template:
    metadata:
      labels: 
        app: nest
    spec:
      containers:
      - name: nest
        image: [docker hub image명] # either from docker registries or other
        ports:
        - containerPort: 3000

 

 

b. service.yaml파일 생성

# depolyment.yaml파일 하나로 관리할거기 때문에 맨아래 --- 입력후 하단에 접속정보 추가
~~~
depolyment.yaml내용
~~~
---
apiVersion: v1
kind: Service
metadata:
  name: nest-service
spec:
  selector:
    app: nest
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
      nodePort: 30000 # 30000~32000 포트범위 정해져 있음

 

e. eployment & service등록

# deplyment.yaml하나에 service 내용까지 작성했기 때문에 아래 명령어만 실행하면 service까지 등록됨
kubectl apply -f deployment.yaml

# deplyments 확인
kubectl get deplyments

# service 확인
minikube service list

# service 실행
minikube service [service명]

# minikube 대쉬보드 접속
minikube dashboard
728x90

DB replication이란?

DB replication 데이터베이스 시스템에서 사용되는 기술로, 마스터 데이터베이스(DB) 변경 내용을 하나 이상의 슬레이브(DB) 복제하는 과정을 말합니다.

이를 통해 데이터의 안정성, 가용성, 성능을 향상시킬 있습니다.

 

Master DB vs SlaveDB

1. Master DB

      • 마스터 디비는 데이터베이스 시스템에서 기본 데이터 저장소 역할을 합니다.
      • 읽기와 쓰기 작업에 대한 모든 데이터 변경 작업(INSERT, UPDATE, DELETE) 처리합니다.
      • 마스터 디비에 수행된 변경 작업은 슬레이브 디비에 자동으로 복제됩니다.
      • 데이터의 일관성과 무결성을 유지하는 중요한 역할을 수행합니다.

2. Slave DB

        • 슬레이브 디비는 마스터 디비의 복제본으로 작동합니다.
        • 주로 읽기 작업을 처리하는데 사용됩니다.
        • 마스터 디비에서 변경된 데이터를 주기적으로 가져와 슬레이브 디비를 업데이트합니다.
        • 슬레이브 디비는 읽기 작업을 처리하는 서버로 사용되어 응답 시간을 최적화하고 부하를 분산시킵니다.
        • 슬레이브 디비는 마스터 디비의 장애 발생 시에도 작동하여 데이터 손실을 최소화합니다.

mysql 설정

1. 마스터 디비 설정

# my.cnf 또는 my.ini 파일을 열어서 [mysqld] 섹션 아래 추가
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=database_name

여기서 database_name 복제할 데이터베이스의 이름입니다.

설정 후 mysql 재시작

2. 슬래이브 디비 설정

# my.cnf 또는 my.ini 파일을 열어서 [mysqld] 섹션 아래 추가
[mysqld]
server-id=2

3. 계정 생성 및 권한 부여

CREATE USER 'replication_user'@'slave_ip' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ip';
FLUSH PRIVILEGES;

마스터 디비에 접속하고, 아래 쿼리를 실행하여 복제에 사용할 계정을 생성합니다:

4. 슬레이브 디비에서 복제 설정

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=XXX;
START SLAVE;

슬레이브 디비에 접속하고, 아래 쿼리를 실행하여 복제를 설정합니다

mysql-bin.XXXXXX XXX 마스터 디비의 SHOW MASTER STATUS; 결과에서 확인할 있는 파일 이름과 위치입니다.

5. 복제상태 확인

슬레이브 디비에서 SHOW SLAVE STATUS; 쿼리를 실행하여 복제 상태를 확인할 있습니다.

Slave_IO_Running Slave_SQL_Running Yes 표시되어야 합니다.

 

다음 글에서는 설정한 replication을 spring boot에 적용 해보는 방법에 대해서 작성하겠습니다.

+ Recent posts