본문 바로가기

리눅스

[리눅스] mongodb 서버 환경 설정

728x90

mongodb 서버 환경 설정

테스트 환경

cat /etc/os-release
$ 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

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

기본 에디터 변경

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

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 구성

Shard 서버(PSA방식) 7대
node1:27011
node2:27011
node3:27011
node1:27012
node2:27012
node3:27012
node3:27013
Config 서버 3대
node1:27018
node2:27018
node3:27018
router(mongos) 3대
node1:27017
node2:27017
node3:27017

도커 컨테이너로 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