인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김기훈님의 프로필 이미지
김기훈

작성한 질문수

따라하며 배우는 MySQL on Docker

Bridge Network을 이용한 Replication구성

5:47초 구간에 대한 질문이 있습니다

해결된 질문

작성

·

283

1

안녕하세요

영상 5:47초에서 복제 구성을 할 때, 마스터 서버의 IP를 사용하는 것이 아니라 container 이름을 통해 복제 구성을 했다고 설명해주셨는데요. 이 부분에 대한 이해가 잘 안갑니다.

db001 이라는 값은 현재 강의까지 총 3군데에서 사용되었는데요.

  • --name db001
  • -h db001
  • --net-alias=db001

말씀하신 "컨테이너 명"이 이 셋 중에서 어떤 옵션 값을 지칭하신걸까요?

MASTER_HOST 라는 변수 명만 봤을 때는 -h(Container host name)이 맞는 것 같고,

현재 강의에서 다룬 주제를 봤을 때는 --net-alias가 맞는 것 같고,

"컨테이너 명"이라는 말을 그대로 받아들였을 때는 --name이 맞는 것 같아서 혼란스럽습니다.

답변 5

2

김영헌님의 프로필 이미지
김영헌
지식공유자

hostname은 의미 그대로 해당 container의 호스트명을 의미합니다. 

hostname을 별도로 명시하지 않을 경우 default로 생성되는 container의 host명은 해쉬값 형태의 container id가 됩니다.

hostname을 명시적으로 지정해 주기 위한 용도로 -h 옵션으로 host명을 지정해서 사용했습니다.

-h 옵션을 사용해서 hostname을 설정한 경우 :

    [root@db001 exporters]# hostname

    db001

-h 옵션없이 생성한 경우 :

  [root@a39f26b144f4 exporters]# hostname

   a39f26b144f4

hostname 설정의 필요성은 아래 질문 내용을 참고하시면 될 거 같습니다.

(https://www.inflearn.com/questions/114999)

alias의 경우는 말 그대로 같은 bridge network을 사용하는 container 간에 접속에 사용될 수 있는 별칭인데요.

강의에서는 계속 container명과 동일하게 같은 alias를 사용했지만 아래와 같은 형태로 다른 별칭으로 사용도 가능합니다.

docker run -i -t --name db001 -h db001 -p 3306:3306 \

--net mybridge --net-alias=master \

-v /db/db001/data:/var/lib/mysql \

-v /db/db001/log:/var/log/mysql \

-v /db/db001/conf:/etc/percona-server.conf.d \

-e MYSQL_ROOT_PASSWORD="root" -d magma1/mysql57:0.0

docker run -i -t --name db002 -h db002 -p 3307:3306 \

--net mybridge --net-alias=slave1 \

-v /db/db002/data:/var/lib/mysql \

-v /db/db002/log:/var/log/mysql \

-v /db/db002/conf:/etc/percona-server.conf.d \

-e MYSQL_ROOT_PASSWORD="root" -d magma1/mysql57:0.0

그리고 본 강의 내용에서는 다루고 있지 않지만 net-alias옵션의 경우 load balancing 용도로 사용할 수도 있는데요.

예를 들면 nginx 같은 웹서버용 container를 web1, web2, web3 와 같이 3개 생성하면서 각각 --net-alias를 같은 이름으로

(--net-alias=web_server) 설정하면 외부에서 "web_server"라는 alias로 접속을 하게 되면 3대의 container 중 한대로 round robin 방식으로 접속할 수 있습니다.

2

김영헌님의 프로필 이미지
김영헌
지식공유자

저도 간단히 테스트를 해봤는데요.

bridge network를 사용하는 경우에 --net-alias 설정이 없어도 container 명으로 설정이 가능하네요.

bridge network 설정이 없는 상태에서 아래와 같이 생성하면 start slave 시에 connecting error가 발생하구요.

docker run -i -t --name db001 -h db001 -p 3306:3306 -v /db/db001/data:/var/lib/mysql -v /db/db001/log:/var/log/mysql -v /db/db001/conf:/etc/percona-server.conf.d -e MYSQL_ROOT_PASSWORD="root" -d magma1/mysql57:0.0

docker run -i -t --name db002 -h db002 -p 3307:3306 -v /db/db002/data:/var/lib/mysql -v /db/db002/log:/var/log/mysql -v /db/db002/conf:/etc/percona-server.conf.d -e MYSQL_ROOT_PASSWORD="root" -d magma1/mysql57:0.0

다시 bridge network 설정을 넣은 상태에서는 container명만으로 접속이 가능한 것을 확인했습니다.

docker run -i -t --name db001 -h db001 --net mybridge -p 3306:3306 -v /db/db001/data:/var/lib/mysql -v /db/db001/log:/var/log/mysql -v /db/db001/conf:/etc/percona-server.conf.d -e MYSQL_ROOT_PASSWORD="root" -d magma1/mysql57:0.0

docker run -i -t --name db002 -h db002 --net mybridge -p 3307:3306 -v /db/db002/data:/var/lib/mysql -v /db/db002/log:/var/log/mysql -v /db/db002/conf:/etc/percona-server.conf.d -e MYSQL_ROOT_PASSWORD="root" -d magma1/mysql57:0.0

1

김영헌님의 프로필 이미지
김영헌
지식공유자

안녕하세요.

net alias명과 host명, container명이 모두 동일하게 구성되어서 좀 헷갈릴 수 있겠네요.

bridge network 구성 후에  bridge network를 사용하면서 --net-alias를 함께 사용하게 되는데요.

여기서 세팅한 --net-alias명을 가지고 사용하는 겁니다.

0

1. hostname과 alias의 차이점이 무엇인가요?
2. 이 강의에서 hostname이 필요한가요?

0

김기훈님의 프로필 이미지
김기훈
질문자

저 3 옵션을 전부 다른 값으로 주었을 때 (각각 db001_name, db001_host, db001_net),
MASTER_HOST 변수 값으로 db001_name, db001_net 을 주었을 때 복제 성공하였고, db001_host를 주었을 때 실패하였습니다.

성공/실패 유무는

> show slave status\G

를 통해 얻은 결과에서

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

가 나왔으면 성공이라고 봤습니다.

김기훈님의 프로필 이미지
김기훈

작성한 질문수

질문하기