본문 바로가기

리눅스

[리눅스] 몽고디비 클러스터 구성하기(mongodb shard cluster)

728x90

몽고디비 클러스터 구성하기(mongodb shard cluster)

테스트 환경

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

몽고디비 클러스트 구성

출처-https://cloudsek.com/wp-content/uploads/2020/11/Sharding2-768x570.png

 

mongodb 계정 생성

groupadd -g 5000 dba
useradd -m -c "MongoDB Service Account" -d /home/mongo -s /bin/bash -u 5000 -g 5000 mongo
echo 'mongo ALL=(ALL:ALL) ALL' >> /etc/sudoers

기본 에디터 변경(vim editor)

update-alternatives --config editor

쉘 프롬프트 변경(PS1)

echo 'export PS1="\[\e[33m\]\u\[\e[m\]\[\e[37m\]@\[\e[m\]\[\e[34m\]\h\[\e[m\]:\[\033[01;31m\]\W\[\e[m\]$ "' >> ~/.bashrc

시스템 타임 존 설정

timedatectl set-timezone Asia/Seoul

APT 저장소(repository) 변경하기

에러 ㅠㅠ

sed -i 's/ports.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list

원복하였습니다.

sed -i 's/mirror.kakao.com/ports.ubuntu.com/g' /etc/apt/sources.list

도커 엔진 설치

기존 도커 삭제

apt remove -y docker docker-engine docker.io containerd runc

최신 도커 엔진 설치

apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce
docker version
systemctl --now enable docker
$ docker version
Client: Docker Engine - Community
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.17.11
 Git commit:        100c701
 Built:             Mon Jun  6 23:02:20 2022
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.11
  Git commit:       a89b842
  Built:            Mon Jun  6 23:00:44 2022
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.6
  GitCommit:        10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc:
  Version:          1.1.2
  GitCommit:        v1.1.2-0-ga916309
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker-compose 설치

apt install -y docker-compose
$ docker-compose version
docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10
OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020

ctop 설치

echo "deb http://packages.azlux.fr/debian/ buster main" | tee /etc/apt/sources.list.d/azlux.list
wget -qO - https://azlux.fr/repo.gpg.key | sudo apt-key add -
apt update
apt install -y docker-ctop
ctop -v
$ ctop -v
ctop version 0.7.7, build 11a1cb1 go1.18

MongoDB Shard Cluster(Sharded Cluster)

MongoDB sharded cluster는 다음 구성 요소로 구성됩니다.

shard : 각 샤드는 샤딩된 데이터의 하위 집합을 포함합니다. 각 샤드는 replica set로 배포할 수 있습니다.

config servers : 구성 서버는 클러스터에 대한 메타데이터 및 구성 설정을 저장합니다.

mongos : mongos는 쿼리 라우터 역할을 하여 클라이언트 애플리케이션과 sharded cluster 사이에 인터페이스를 제공합니다. MongoDB 4.4부터 mongos는 지연 시간을 최소화하기 위해 hedged reads를 지원할 수 있습니다.

다음 그래픽은 sharded cluster 내 구성 요소의 상호 작용을 설명합니다.

참고URL-https://www.mongodb.com/docs/manual/images/sharded-cluster-production-architecture.bakedsvg.svg

MongoDB는 collection 수준에서 데이터를 샤드하여 클러스터의 샤드 전체에 컬렉션 데이터를 배포합니다.

Sharded Cluster 구성

ServerName router(mongos) Config 서버 Shard 서버(PSA방식) 비고
node1 27017 27018 27011  
27012  
node2 27017 27018 27011  
27012  
node3 27017 27018 27011  
27012  
27013  

도커 컨테이너로 mongodb 클러스터(Sharded Cluster) 구성

github에서 docker-sharded-cluster 클론

mkdir /docker-container; cd $_
git clone https://github.com/anti1346/docker-sharded-cluster.git

각 서버에 alias 등록

[node1]

echo "alias mongodb='cd /docker-container/docker-sharded-cluster/node1'" >> ~/.bashrc

[node2]

echo "alias mongodb='cd /docker-container/docker-sharded-cluster/node2'" >> ~/.bashrc

[node3]

echo "alias mongodb='cd /docker-container/docker-sharded-cluster/node3'" >> ~/.bashrc

mongodb 디렉터리 생성 및 오너 변경

mongodb
mkdir mongodb; chown -R 999:999 mongodb

 

- 참고사이트

Sharded Cluster : https://www.mongodb.com/docs/manual/sharding/

 

728x90