해결된 질문
작성
·
283
1
안녕하세요
영상 5:47초에서 복제 구성을 할 때, 마스터 서버의 IP를 사용하는 것이 아니라 container 이름을 통해 복제 구성을 했다고 설명해주셨는데요. 이 부분에 대한 이해가 잘 안갑니다.
db001 이라는 값은 현재 강의까지 총 3군데에서 사용되었는데요.
말씀하신 "컨테이너 명"이 이 셋 중에서 어떤 옵션 값을 지칭하신걸까요?
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
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
가 나왔으면 성공이라고 봤습니다.