• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    해결됨

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

20.12.26 13:18 작성 조회수 159

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

박종선님의 프로필

박종선

2021.01.01

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

0

김기훈님의 프로필

김기훈

질문자

2020.12.26

저 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

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