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
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