기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
듀얼 스택 클러스터에 선호되는 프로토콜 구성(Memcached)
Memcached 클러스터의 경우, 클라이언트가 클러스터 내 노드에 연결하는 데 사용할 프로토콜을 IP Discovery 파라미터로 제어할 수 있습니다. IP Discovery 파라미터는 IPv4 또는 IPv6로 설정할 수 있습니다.
IP Discovery 파라미터는 config get 클러스터 출력에 사용되는 IP 프로토콜을 제어합니다. 그러면 ElastiCache for Memcached 클러스터의 자동 검색을 지원하는 클라이언트가 사용하는 IP 프로토콜이 결정됩니다.
IP Discovery를 변경해도 연결된 클라이언트는 가동 중지되지 않습니다. 하지만 변경 사항이 전파되려면 다소 시간이 소요됩니다.
Java의 경우 getAvailableNodeEndPoints
출력을, Php의 경우 getServerList
출력을 모니터링합니다. 이들 함수의 출력에서, 업데이트된 프로토콜을 사용하는 클러스터 내 모든 노드에 해당하는 IP를 보고하면, 변경 사항이 완전히 전파된 것입니다.
Java 예제:
MemcachedClient client = new MemcachedClient(new InetSocketAddress("xxxx", 11211)); Class targetProtocolType = Inet6Address.class; // Or Inet4Address.class if you're switching to IPv4 Set<String> nodes; do { nodes = client.getAvailableNodeEndPoints().stream().map(NodeEndPoint::getIpAddress).collect(Collectors.toSet()); Thread.sleep(1000); } while (!nodes.stream().allMatch(node -> { try { return finalTargetProtocolType.isInstance(InetAddress.getByName(node)); } catch (UnknownHostException ignored) {} return false; }));
Php 예제:
$client = new Memcached; $client->setOption(Memcached::OPT_CLIENT_MODE, Memcached::DYNAMIC_CLIENT_MODE); $client->addServer("xxxx", 11211); $nodes = []; $target_ips_count = 0; do { # The PHP memcached client only updates the server list if the polling interval has expired and a # command is sent $client->get('test'); $nodes = $client->getServerList(); sleep(1); $target_ips_count = 0; // For IPv4 use FILTER_FLAG_IPV4 $target_ips_count = count(array_filter($nodes, function($node) { return filter_var($node["ipaddress"], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6); })); } while (count($nodes) !== $target_ips_count);
IP Discovery가 업데이트되기 전에 생성된 기존 클라이언트 연결은 업데이트 전의 프로토콜을 사용하여 연결됩니다. 클러스터 검색 명령의 출력에서 변경 사항이 감지되면, 검증된 모든 클라이언트가 새 IP 프로토콜을 사용하여 자동으로 클러스터에 재연결됩니다. 하지만, 클라이언트 구현에 따라 달라질 수 있습니다.