빅데이터 분석 환경 구축(Docker 활용)

#5 컨테이너 복제 및 네트워크 구축

쵸비 2023. 7. 3. 17:41
728x90

이번에는 이미지를 생성하여 복제를 해보자.

5개의 컨테이너를 생성하여 두개는 Namenode,  세게는 Datanode로 사용할 예정이다.

[ Docker 컨테이너 나가기 & 이미지 만들기 ]

Docker 컨테이너에서 나가기 위해 Ctrl + P 키를 누르고 바로 Ctrl + Q 키를 누르면 됩니다.

#이미지 만들기 [이름이 test라는 컨테이너로 test 이미지 만들기]
docker commit test test

#이미지 확인
docker images

[ Docker network 설정 ]

: 특정 네트워크 대역을 지정하여 도커 네트워크를 생성한다.

docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/16 testnet

 

  • Docker network 리스트 확인
docker network ls

 

  • Docker network 정보 확인
docker inspect testnet

 

  • Docker 컨테이너 1번 생성[test 이미지 사용]
docker run -it -d -p 18888:18888 --network testnet --ip 172.19.0.11 --hostname nn1 --name nn1 test /bin/bash

 

  • Docker 컨테이너 2~5번 생성
# 같은 방법으로 ip 172.19.0.13~ip 172.19.0.15(dn1, dn2, dn3)까지 만들어준다
#2번
docker run -it -d --network testnet --ip 172.19.0.12 --hostname nn2 --name nn2 test /bin/bash
#3번
docker run -it -d --network testnet --ip 172.19.0.13 --hostname dn1 --name dn1 test /bin/bash
#4번
docker run -it -d --network testnet --ip 172.19.0.14 --hostname dn2 --name dn2 test /bin/bash
#5번
docker run -it -d --network testnet --ip 172.19.0.15 --hostname dn3 --name dn3 test /bin/bash

 

  • Docker 컨테이너 호스트 이름 확인

: nn1, nn2 컨테이너에 접속하여 각각 호스트 이름이 정상적으로 지정 되었는지 확인한다.

docker exec -it nn1 /bin/bash

cat /etc/hostname

 

nn1 ~dn3 컨테이너 모두 하위 작업 반복

  • SSH KEY 생성
#5개의 서버 모두 실행
ssh-keygen -t rsa

 

  • SSH KEY를 인증 KEY로 복사
#5개의 서버 모두 실행
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

 

  • SSH 디렉토리 확인
#5개의 서버 모두 실행
cd ~/.ssh && ls
>>> authorized_keys  id_rsa  id_rsa.pub

 

  • SSH 인증키 확인
#5개의 서버 모두 실행
cat authorized_keys
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGFz2na47vkmzxeqISPycd0HzySVCFengqBUji9VlzYOb6gf155GrPU/iX8FPzikD0ziVG9RYagmvtEyiegzCtMQRoomnm1QYz9JLjYjf6hxQZLnKEIpK+fC7n+Jxn7iEs7jyC/zf0uqQyirPfyTlNvcoY1z7pb0rfxVNT7oCL8FhVCFFCBtFpphnK5dCv0J15cqr+NN7eo7OfHvDqVBKD4LEhS3hpQLP3meB/YCdqw6WEi6lrb6uUvyIftKe65Jmm/B5WqTI4dJUhFCtyIXqpyYRWdXRubb0QEXIPvQk2sxHBlaYTyacdJD5B5+uaAt083eqwNBuJhtkpLTAHPgwz2ThwixGSl1i+pJuLEhSK3vcZXJvC8TgU6UfEI3wDejkTtCDtRMj9HIjulLjBBJ+/+O0ms8+TpkGX0lUvIoE31jdBN/Otg3GAn+WGtsAY61Fcz1cwGx6o/MAL99FBXXljYkXyKYZ82IHBJn3mbf4NRYM90R0MoTFLUnB0EN0a+m8= root@server01

 

  • 통신할 Docker 컨테이너끼리 SSH 인증키 등록 : nn1~dn3까지 ssh키를 입력.

예 : nn1 과 nn2 컨테이너가 양방향 SSH 인증 통신을 하기 위해서 nn1의 인증키를 nn2에 등록하고, nn2의 인증키를nn1에 등록한다.

  • nn1 컨테이너
#5개의 서버 모두 실행
#해당 파일에 5개 서버의 ssh키를 넣어준다

vi ~/.ssh/authorized_keys
"""
# nn1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGFz2na47vkmzxeqISPycd0HzySVCFengqBUji9VlzYOb6gf155GrPU/iX8FPzikD0ziVG9RYagmvtEyiegzCtMQRoomnm1QYz9JLjYjf6hxQZLnKEIpK+fC7n+Jxn7iEs7jyC/zf0uqQyirPfyTlNvcoY1z7pb0rfxVNT7oCL8FhVCFFCBtFpphnK5dCv0J15cqr+NN7eo7OfHvDqVBKD4LEhS3hpQLP3meB/YCdqw6WEi6lrb6uUvyIftKe65Jmm/B5WqTI4dJUhFCtyIXqpyYRWdXRubb0QEXIPvQk2sxHBlaYTyacdJD5B5+uaAt083eqwNBuJhtkpLTAHPgwz2ThwixGSl1i+pJuLEhSK3vcZXJvC8TgU6UfEI3wDejkTtCDtRMj9HIjulLjBBJ+/+O0ms8+TpkGX0lUvIoE31jdBN/Otg3GAn+WGtsAY61Fcz1cwGx6o/MAL99FBXXljYkXyKYZ82IHBJn3mbf4NRYM90R0MoTFLUnB0EN0a+m8= root@server01

# nn2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYNzyBRDNXlthOa+GX37jUk/OCAKex520ckfxohYKNqGo0tP0vb2eTXKNXpECdp7wxI89/YUuPdcnyUF4Lu7kjuQ5MvSwg2hLaLe8gNiaU50YpnePHL4zkHAJ7DdWmKNqYmWpXJ8cRSpKp4vYhi9L9MZ7FPYYtvAYm8Lr56+dT2ea73Z/mJ5LnZRYdZRTtR9DN6/OQEQU0WQQvV1C3Nrs8O2MwSIbfrVyrYQ6gDt0DTzusp8d92vFiHsbhstsFnv4yWQbS4oL+KXUUKkGsZnFrS7ChuF0fSsSuxQc3ycg2Q5h/xzmyp22EVSeJRNGrQvmGNIjP278SuDfPhTm7t0VXT0bhNlo9K8ih27Kj66SseHp4ept0QrnxDSZyec1pE5kkHnOVm9kCCZrNklUUQ5JOmXDGb2bxBgoZurefYikztUzyVCv6rYG5K6D5DxC0ukAg9cOAPBl5MBqKkW5mxeEaNKAXbLFO34FDGwPqNs4eW5IhxCGND2AJo/teBO7gnG0= root@server02

# dn1
ssh-rsa~~
# dn2
ssh-rsa~~~
# dn3
ssh-rsa~~~
"""

 

  • nn2 컨테이너도 같은 상황으로 만들어준다.
vi ~/.ssh/authorized_keys
"""
# nn1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGFz2na47vkmzxeqISPycd0HzySVCFengqBUji9VlzYOb6gf155GrPU/iX8FPzikD0ziVG9RYagmvtEyiegzCtMQRoomnm1QYz9JLjYjf6hxQZLnKEIpK+fC7n+Jxn7iEs7jyC/zf0uqQyirPfyTlNvcoY1z7pb0rfxVNT7oCL8FhVCFFCBtFpphnK5dCv0J15cqr+NN7eo7OfHvDqVBKD4LEhS3hpQLP3meB/YCdqw6WEi6lrb6uUvyIftKe65Jmm/B5WqTI4dJUhFCtyIXqpyYRWdXRubb0QEXIPvQk2sxHBlaYTyacdJD5B5+uaAt083eqwNBuJhtkpLTAHPgwz2ThwixGSl1i+pJuLEhSK3vcZXJvC8TgU6UfEI3wDejkTtCDtRMj9HIjulLjBBJ+/+O0ms8+TpkGX0lUvIoE31jdBN/Otg3GAn+WGtsAY61Fcz1cwGx6o/MAL99FBXXljYkXyKYZ82IHBJn3mbf4NRYM90R0MoTFLUnB0EN0a+m8= root@server01

# nn2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYNzyBRDNXlthOa+GX37jUk/OCAKex520ckfxohYKNqGo0tP0vb2eTXKNXpECdp7wxI89/YUuPdcnyUF4Lu7kjuQ5MvSwg2hLaLe8gNiaU50YpnePHL4zkHAJ7DdWmKNqYmWpXJ8cRSpKp4vYhi9L9MZ7FPYYtvAYm8Lr56+dT2ea73Z/mJ5LnZRYdZRTtR9DN6/OQEQU0WQQvV1C3Nrs8O2MwSIbfrVyrYQ6gDt0DTzusp8d92vFiHsbhstsFnv4yWQbS4oL+KXUUKkGsZnFrS7ChuF0fSsSuxQc3ycg2Q5h/xzmyp22EVSeJRNGrQvmGNIjP278SuDfPhTm7t0VXT0bhNlo9K8ih27Kj66SseHp4ept0QrnxDSZyec1pE5kkHnOVm9kCCZrNklUUQ5JOmXDGb2bxBgoZurefYikztUzyVCv6rYG5K6D5DxC0ukAg9cOAPBl5MBqKkW5mxeEaNKAXbLFO34FDGwPqNs4eW5IhxCGND2AJo/teBO7gnG0= root@server02

# dn1
ssh-rsa~~
# dn2
ssh-rsa~~~
# dn3
ssh-rsa~~~
"""

 

  • SSH 서비스 활성화(모든 컨테이너에서 실행)
service ssh start # 이미 실행 되어 있다면 restart

 

  • 통신 테스트
# server01 에서
$ ssh nn2

# server02 에서
$ ssh nn1

 

  • SSH 디렉토리 권한 설정(모든 컨테이너에서 실행)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub  
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts

 

  • SSH 서비스 자동 실행 등록(모든 컨테이너에서 실행)
vim ~/.bashrc

# 아래 내용을 파일 맨 하단에 기입하고 저장
service ssh start

 

#환경변수 활성화
source ~/.bashrc

 

[ Hosts 및 Hostname 설정 ]

  • nn1 서버 hosts 파일 편집

: nn1 서버로 접속해서 hosts 파일에 각 서버의 Private IP와 hostname을 등록한다.

# 로컬에서 nn1 서버 접속
ssh nn1
# hosts 파일 편집
vim /etc/hosts

# 아래 내용으로 추가 후 저장
172.19.0.11 nn1
172.19.0.12 nn2
172.19.0.13 dn1
172.19.0.14 dn2
172.19.0.15 dn3
  • 모든 인스턴스에 Hosts 파일 복제

: nn1 에서만 진행한다. (수동으로 내용 복붙가능)

# 복제
cat /etc/hosts | ssh nn2 "sh -c 'cat >/etc/hosts'"
cat /etc/hosts | ssh dn1 "sh -c 'cat >/etc/hosts'"
cat /etc/hosts | ssh dn2 "sh -c 'cat >/etc/hosts'"
cat /etc/hosts | ssh dn3 "sh -c 'cat >/etc/hosts'"

 

  • hdfs-site.xml 파일 복제

: nn1 에서만 진행한다. (수동으로 내용 복붙가능)

# 복제
cat $HADOOP_HOME/etc/hadoop/hdfs-site.xml | ssh nn2 "sh -c 'cat >$HADOOP_HOME/etc/hadoop/hdfs-site.xml'"

 

이상 5개의 컨테이너를 복제하 SSH 통신, Hosts 설정 까지 완료

 

 

728x90