네트워크가 없는 Micro VM의 YugabyteDB

빠른 단기 실습을 위해 YugabyteDB를 빠르게 시작하는 방법에 대해 언급했습니다. 이것은 폭죽과 같은 Micro VM에서 실행될 수 있으며 경우에 따라 네트워크 인터페이스가 없습니다. MicroVM에서 ysqlsh에 연결하는 경우 필요하지 않지만 이름 확인 문제가 발생할 수 있습니다. docker run --network none 로 재현할 수 있습니다.

이 게시물은 다음 오류 및 해결 방법에 관한 것입니다.

ysqlsh: FATAL:  Timed out: OpenTable RPC (request call id 2) to 0.0.0.0:9100 timed out after 120.000s


또는 yb-tserver.ERROR에서:

E0830 11:32:44.518383    66 async_initializer.cc:100] Failed to initialize client: Network error (yb/util/net/net_util.cc:447): Could not determine local host names: Unable to lookup FQDN (699cdfc74424), getaddrinfo returned -11 (EAI_SYSTEM): Connection refused (system error 111)


이것은 이름 확인과 관련이 있습니다. YugabyteDB는 분산 데이터베이스이며 노드를 식별하기 위해 호스트 이름과 IP 주소가 일치해야 합니다. 마지막 메시지는 명시적입니다. YugabyteDB는 Linuxgetaddrinfo() 시스템 호출을 호출하여 내 컨테이너 호스트 이름인 699cdfc74424의 IP를 가져옵니다.

기본적으로 다음과 동일합니다.

sh-4.2# getent ahosts  $(hostname)

127.0.0.2       STREAM 699cdfc74424
127.0.0.2       DGRAM
127.0.0.2       RAW
::1             STREAM
::1             DGRAM
::1             RAW


그런데 왜 127.0.0.2 ? 네트워크가 없는 컨테이너에 있는 유일한 인터페이스인 127.0.0.1에서 YugabyteDB를 시작하려고 합니다.


/home/yugabyte/bin/yb-master --fs_data_dirs=/var/tmp --master_addresses=127.0.0.1:7100 --replication_factor=1 --default_memory_limit_to_ram_ratio=0.30 &
/home/yugabyte/bin/yb-tserver --fs_data_dirs=/var/tmp --tserver_master_addrs=127.0.0.1:7100 --default_memory_limit_to_ram_ratio=0.30 &



그 이유는 /etc/nsswitch.conf에 있습니다.

sh-4.2# grep hosts: /etc/nsswitch.conf

#hosts:     db files nisplus nis dns
hosts:      files dns myhostname
sh-4.2#


호스트 이름 확인은 먼저 files 로 진행되며, 이 경우에는 /etc/hosts 입니다.

sh-4.2# cat /etc/hosts

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters


내 호스트 이름을 알 수 없습니다.

그런 다음 dns로 이동하지만 네트워크가 없는 컨테이너에 DNS가 없습니다(Connection refused 오류의 원인으로 추측)

그런 다음 호스트 이름을 확인하는 myhostname 로 이동하지만 127.0.0.2 로 이동합니다. /etc/hosts 패치를 피하는 데 사용되지만 제 경우에는 127.0.0.2를 알 수 없기 때문에 사용할 수 없습니다.yb-master --master_addresses=127.0.0.2:7100를 시작하려고 했지만 None of the local addresses are present in master_addresses 127.0.0.2:7100와 함께 실패합니다.

그런 다음 내 솔루션은 단순히 호스트 이름을 /etc/hosts에 추가하는 것입니다.

echo "127.0.0.1 localhost $(hostname)"  > /etc/hosts

yb-master--fs_data_dirs=/var/tmp --master_addresses=127.0.0.1:7100 --replication_factor=1yb-tserver --fs_data_dirs=/var/tmp --master_addresses=127.0.0.1:7100 --replication_factor=1를 시작하기 전에 이를 통해 기본적으로 ysqlsh에 연결되는 간단한 localhost에 연결할 수 있어야 합니다.

물론 네트워크가 없는 분산 SQL 데이터베이스는 예를 들어 지속적인 통합에 사용되는 작은 컨테이너를 제외하고는 의미가 없습니다.

좋은 웹페이지 즐겨찾기