Contoh klien IPv6 - Amazon ElastiCache

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Contoh klien IPv6

catatan

Bagian ini berlaku untuk klaster Memcached yang dirancang sendiri.

ElastiCache kompatibel dengan Memcached sumber terbuka. Ini berarti bahwa klien open source untuk Memcached yang mendukung koneksi IPv6 harus dapat terhubung ke cluster berkemampuan IPv6 (Memcached). ElastiCache Selain itu, klien berikut secara khusus telah divalidasi untuk berfungsi dengan semua konfigurasi jenis jaringan yang didukung:

Berikut ini adalah praktik terbaik untuk berinteraksi dengan sumber daya berkemampuan IPv6 dengan pustaka ElastiCache klien sumber terbuka yang umum digunakan. Anda dapat melihat praktik terbaik yang ada untuk berinteraksi dengan ElastiCache rekomendasi tentang mengonfigurasi klien untuk ElastiCache sumber daya. Namun, ada beberapa peringatan yang perlu diperhatikan saat berinteraksi dengan sumber daya dengan IPv6 aktif.

Klien yang divalidasi

Klien yang Divalidasi:

Mengonfigurasi protokol pilihan untuk klaster tumpukan ganda

Untuk klaster Memcached, Anda dapat mengontrol protokol yang akan digunakan klien untuk terhubung ke simpul di klaster dengan parameter Penemuan IP. Parameter Penemuan IP dapat diatur ke IPv4 atau IPv6.

Parameter Penemuan IP mengontrol protokol IP yang digunakan dalam output config get cluster. Yang pada gilirannya akan menentukan protokol IP yang digunakan oleh klien yang mendukung penemuan otomatis untuk cluster ElastiCache (Memcached).

Perubahan pada Penemuan IP tidak akan mengakibatkan waktu henti untuk klien yang terhubung. Namun, perubahan ini akan memakan waktu untuk disebarkan.

Pantau output getAvailableNodeEndPoints untuk Java, sementara untuk Php, pantau output dari getServerList. Setelah output dari fungsi-fungsi ini melaporkan IP untuk semua simpul di klaster yang menggunakan protokol yang diperbarui, berarti perubahan telah selesai disebarkan.

Contoh 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; }));

Contoh 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);

Setiap koneksi klien yang ada yang dibuat sebelum Penemuan IP diperbarui akan tetap terhubung menggunakan protokol lama. Semua klien yang divalidasi akan secara otomatis terhubung kembali ke klaster menggunakan protokol IP baru setelah perubahan terdeteksi dalam output perintah penemuan klaster. Namun, hal ini tergantung pada implementasi klien.

TLS mengaktifkan cluster tumpukan ElastiCache ganda

Saat TLS diaktifkan untuk ElastiCache cluster, fungsi penemuan klaster mengembalikan nama host alih-alih IP. Nama host kemudian digunakan sebagai pengganti IP untuk terhubung ke ElastiCache cluster dan melakukan jabat tangan TLS. Hal ini berarti bahwa klien tidak akan terpengaruh oleh parameter Penemuan IP. Untuk klaster dengan TLS diaktifkan, parameter Penemuan IP tidak berpengaruh pada protokol IP pilihan. Sebagai gantinya, protokol IP yang digunakan akan ditentukan berdasarkan protokol IP mana yang lebih dipilih klien saat meresolusi nama host DNS.

Klien Java

Saat menghubungkan dari lingkungan Java yang mendukung IPv4 dan IPv6, Java secara default akan lebih memilih IPv4 daripada IPv6 untuk kompatibilitas mundur. Namun, preferensi protokol IP dapat dikonfigurasi melalui argumen JVM. Untuk memilih IPv4, JVM menerima -Djava.net.preferIPv4Stack=true dan untuk memilih IPv6, JVM mengatur -Djava.net.preferIPv6Stack=true. Pengaturan -Djava.net.preferIPv4Stack=true berarti bahwa JVM tidak akan lagi membuat koneksi IPv6.

Preferensi Tingkat Host

Secara umum, jika klien atau runtime klien tidak menyediakan opsi konfigurasi untuk mengatur preferensi protokol IP, saat melakukan resolusi DNS, protokol IP akan bergantung pada konfigurasi host. Secara default, sebagian besar host lebih memilih IPv6 daripada IPv4, tetapi preferensi ini dapat dikonfigurasi di tingkat host. Ini akan memengaruhi semua permintaan DNS dari host itu, bukan hanya permintaan ke ElastiCache cluster.

Host Linux

Untuk Linux, preferensi protokol IP dapat dikonfigurasi dengan mengubah file gai.conf. File gai.conf dapat ditemukan dalam /etc/gai.conf. Jika tidak ada gai.conf yang ditentukan, maka contohnya akan tersedia di /usr/share/doc/glibc-common-x.xx/gai.conf yang dapat disalin ke /etc/gai.conf lalu konfigurasi default-nya harus di-uncommenting. Untuk memperbarui konfigurasi agar lebih memilih IPv4 saat menghubungkan ke ElastiCache kluster, perbarui prioritas untuk rentang CIDR yang mencakup IP cluster berada di atas prioritas untuk koneksi IPv6 default. Secara default, koneksi IPv6 memiliki prioritas 40. Misalnya, dengan asumsi klaster terletak di subnet dengan CIDR 172.31.0.0:0/16, konfigurasi di bawah ini akan menyebabkan klien lebih memilih koneksi IPv4 ke klaster tersebut.

label ::1/128 0 label ::/0 1 label 2002::/16 2 label ::/96 3 label ::ffff:0:0/96 4 label fec0::/10 5 label fc00::/7 6 label 2001:0::/32 7 label ::ffff:172.31.0.0/112 8 # # This default differs from the tables given in RFC 3484 by handling # (now obsolete) site-local IPv6 addresses and Unique Local Addresses. # The reason for this difference is that these addresses are never # NATed while IPv4 site-local addresses most probably are. Given # the precedence of IPv6 over IPv4 (see below) on machines having only # site-local IPv4 and IPv6 addresses a lookup for a global address would # see the IPv6 be preferred. The result is a long delay because the # site-local IPv6 addresses cannot be used while the IPv4 address is # (at least for the foreseeable future) NATed. We also treat Teredo # tunnels special. # # precedence <mask> <value> # Add another rule to the RFC 3484 precedence table. See section 2.1 # and 10.3 in RFC 3484. The default is: # precedence ::1/128 50 precedence ::/0 40 precedence 2002::/16 30 precedence ::/96 20 precedence ::ffff:0:0/96 10 precedence ::ffff:172.31.0.0/112 100

Detail selengkapnya tentang gai.conf tersedia di Halaman utama Linux.

Host Windows

Proses untuk host Windows juga serupa. Untuk host Windows, Anda dapat menjalankan netsh interface ipv6 set prefix CIDR_CONTAINING_CLUSTER_IPS PRECEDENCE LABEL. Hal ini memiliki efek yang sama seperti mengubah file gai.conf pada host Linux.

Hal ini akan memperbarui kebijakan preferensi untuk memilih koneksi IPv4 daripada koneksi IPv6 untuk rentang CIDR yang ditentukan. Misalnya, dengan asumsi bahwa klaster berada dalam subnet dengan CIDR 172.31.0.0:0/16, eksekusi netsh interface ipv6 set prefix ::ffff:172.31.0.0:0/112 100 15 akan menghasilkan tabel prioritas berikut yang akan menyebabkan klien lebih memilih IPv4 saat terhubung ke klaster.

C:\Users\Administrator>netsh interface ipv6 show prefixpolicies Querying active state... Precedence Label Prefix ---------- ----- -------------------------------- 100 15 ::ffff:172.31.0.0:0/112 20 4 ::ffff:0:0/96 50 0 ::1/128 40 1 ::/0 30 2 2002::/16 5 5 2001::/32 3 13 fc00::/7 1 11 fec0::/10 1 12 3ffe::/16 1 3 ::/96