

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

# Memecahkan masalah konektivitas
<a name="troubleshooting.connecting"></a>

Mengalami masalah saat menghubungkan? Berikut ini adalah beberapa skenario umum dan cara untuk mengatasinya.

**Topik**
+ [Tidak dapat terhubung ke titik akhir Amazon DocumentDB](#troubleshooting-connecting)
+ [Menguji koneksi ke instans Amazon DocumentDB](#troubleshooting.testing-connection)
+ [Menghubungkan ke titik akhir yang tidak valid](#troubleshooting.invalid-endpoint)
+ [Konfigurasi driver yang memengaruhi jumlah koneksi](#troubleshooting.driver.config)

## Tidak dapat terhubung ke titik akhir Amazon DocumentDB
<a name="troubleshooting-connecting"></a>

Ketika Anda mencoba untuk menyambungkan ke Amazon DocumentDB, berikut ini adalah salah satu pesan kesalahan yang paling umum yang mungkin Anda terima.

```
connecting to: mongodb://docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-
1.docdb.amazonaws.com:27017/
2018-11-14T14:33:46.451-0800 W NETWORK [thread1] Failed to connect to
172.31.91.193:27017 after 5000ms milliseconds, giving up.
2018-11-14T14:33:46.452-0800 E QUERY [thread1] Error: couldn't connect to server
docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017,
connection attempt failed :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed
```

Arti pesan kesalahan ini biasanya adalah bahwa klien Anda (mongo shell dalam contoh ini) tidak dapat mengakses titik akhir Amazon DocumentDB. Hal ini dapat terjadi karena beberapa alasan:

**Topics**
+ [Menghubungkan dari titik akhir publik](#troubleshooting.cannot-connect.public-endpoints)
+ [Cross-Region koneksi](#troubleshooting.cannot-connect.different-regions)
+ [Menghubungkan dari VPC Amazon yang berbeda](#troubleshooting.cannot-connect.different-vpcs)
+ [Grup keamanan memblokir koneksi masuk](#troubleshooting.cannot-connect.inbound-not-allowed)
+ [Masalah preferensi membaca driver Java Mongo](#troubleshooting-cannot-connect-java-mongo-issue)

### Menghubungkan dari titik akhir publik
<a name="troubleshooting.cannot-connect.public-endpoints"></a>

**Anda mencoba untuk terhubung ke cluster Amazon DocumentDB langsung dari laptop atau mesin pengembangan lokal Anda. **

Mencoba untuk menghubungkan ke klaster Amazon DocumentDB langsung dari titik akhir publik, seperti laptop Anda atau mesin pengembangan lokal, akan gagal. Amazon DocumentDB adalah virtual private cloud (VPC)-satu-satunya dan saat ini tidak mendukung titik akhir publik. Dengan demikian, Anda tidak dapat menghubugkan secara langsung ke klaster Amazon DocumentDB Anda dari laptop Anda atau lingkungan pengembangan lokal di luar VPC Anda.

Untuk menghubungkan ke klaster Amazon DocumentDB dari luar Amazon VPC, Anda dapat menggunakan terowongan SSH. Untuk informasi selengkapnya, lihat [Menghubungkan ke cluster Amazon DocumentDB dari luar Amazon VPC](connect-from-outside-a-vpc.md). Selain itu, jika lingkungan pengembangan Anda berada di Amazon VPC yang berbeda, Anda juga dapat menggunakan VPC Peering dan terhubung ke cluster Amazon DocumentDB Anda dari Amazon VPC lain di Wilayah yang sama atau Wilayah yang berbeda.

### Cross-Region koneksi
<a name="troubleshooting.cannot-connect.different-regions"></a>

**Anda mencoba menyambung ke cluster Amazon DocumentDB di Wilayah lain. **

Jika Anda mencoba untuk menghubungkan ke klaster Amazon DocumentDB dari instans Amazon EC2 di Wilayah selain Wilayah klaster ini—sebagai contoh, mencoba untuk menghubungkan ke klaster di Wilayah US East (N. Virginia) (us-east-1) dari Wilayah US West (Oregon) (us-west-2)—koneksi akan gagal.

Untuk memverifikasi Wilayah klaster Amazon DocumentDB Anda, jalankan perintah berikut ini. Wilayah ini berada di titik akhir.

```
aws docdb describe-db-clusters \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].Endpoint'
```

Keluaran dari operasi ini terlihat seperti berikut ini. 

```
[
    "sample-cluster.node.us-east-1.docdb.amazonaws.com"
]
```

Untuk memverifikasi Wilayah instans EC2 Anda, jalankan perintah berikut ini.

```
 aws ec2 describe-instances \
     --query 'Reservations[*].Instances[*].Placement.AvailabilityZone'
```

Keluaran dari operasi ini terlihat seperti berikut ini. 

```
[
    [
        "us-east-1a"
    ]
]
```

### Menghubungkan dari VPC Amazon yang berbeda
<a name="troubleshooting.cannot-connect.different-vpcs"></a>

**Anda mencoba menyambungkan ke cluster Amazon DocumentDB dari VPC yang berbeda dari Amazon VPC yang digunakan cluster Anda. **

Jika cluster Amazon DocumentDB dan instans Amazon EC2 berada dalam satu Wilayah AWS, tetapi tidak di Amazon VPC yang sama, Anda tidak dapat terhubung langsung ke cluster Amazon DocumentDB kecuali VPC Peering diaktifkan di antara dua Amazon VPC.

Untuk memverifikasi Amazon VPC dari instans Amazon DocumentDB Anda, jalankan perintah berikut ini.

```
aws docdb describe-db-instances \
   --db-instance-identifier sample-instance \
   --query 'DBInstances[*].DBSubnetGroup.VpcId'
```

Untuk memverifikasi Amazon VPC dari instans Amazon EC2 Anda, jalankan perintah berikut ini.

```
aws ec2 describe-instances \
   --query 'Reservations[*].Instances[*].VpcId'
```

### Grup keamanan memblokir koneksi masuk
<a name="troubleshooting.cannot-connect.inbound-not-allowed"></a>

**Anda mencoba menyambung ke cluster Amazon DocumentDB, dan grup keamanan cluster tidak mengizinkan koneksi masuk pada port cluster (port default: 27017). ** 

Anggap bahwa klaster Amazon DocumentDB Anda dan instans Amazon EC2 keduanya di Wilayah dan Amazon VPC yang sama dan menggunakan grup keamanan Amazon VPC yang sama. Jika Anda tidak dapat menghubungkan ke klaster Amazon DocumentDB Anda, kemungkinan penyebabnya adalah bahwa grup keamanan Anda (yaitu, firewall) untuk klaster Anda tidak mengizinkan koneksi inbound pada port yang Anda pilih untuk klaster Amazon DocumentDB Anda (port default adalah 27017).

Untuk memverifikasi port untuk klaster Amazon DocumentDB Anda , jalankan perintah berikut ini.

```
aws docdb describe-db-clusters \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].[DBClusterIdentifier,Port]'
```

Untuk mendapatkan grup keamanan Amazon DocumentDB Anda untuk klaster Anda, jalankan perintah berikut ini.

```
aws docdb describe-db-clusters \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].[VpcSecurityGroups[*],VpcSecurityGroupId]'
```

Untuk memeriksa aturan inbound untuk grup keamanan Anda, lihat topik berikut ini dalam dokumentasi Amazon EC2:
+ [Mengotorisasi Lalu Lintas Masuk untuk Instans Linux Anda ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)
+ [Mengotorisasi Lalu Lintas Masuk untuk Instans Windows Anda ](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/authorizing-access-to-an-instance.html)

### Masalah preferensi membaca driver Java Mongo
<a name="troubleshooting-cannot-connect-java-mongo-issue"></a>

**Preferensi baca klien tidak dihormati dan beberapa klien tidak dapat menulis ke Amazon DocumentDB setelah failover kecuali mereka melakukan reboot. **

Masalah ini, pertama kali ditemukan di Java Mongo Driver 3.7.x, terjadi ketika klien membuat koneksi ke Amazon DocumentDB menggunakan `MongoClientSettings` dan, khususnya, saat merantau metode. `applyToClusterSettings` Peng MongoClient aturan Cluster dapat didefinisikan menggunakan beberapa metode yang berbeda, seperti`hosts()`,`requiredReplicaSetName()`, dan`mode()`.

 Ketika klien menentukan hanya satu host dalam `hosts()` metode, mode diatur ke alih- `ClusterConnectionMode.SINGLE` alih `ClusterConnectionMode.MULTIPLE` Ini menyebabkan klien mengabaikan preferensi baca dan hanya terhubung ke server yang dikonfigurasi di`hosts()`. Jadi bahkan jika pengaturan klien diinisialisasi seperti di bawah ini, semua pembacaan masih akan masuk ke primer, bukan sekunder.

```
final ServerAddress serverAddress0 = new ServerAddress("cluster-endpoint", 27317));
    final MongoCredential credential = MongoCredential.createCredential("xxx",
            "admin", "xxxx".toCharArray());
    final MongoClientSettings settings = MongoClientSettings.builder()
            .credential(credential)
            .readPreference(ReadPreference.secondaryPreferred())
            .retryWrites(false)
            .applyToSslSettings(builder -> builder
                    .enabled(false))
            .applyToClusterSettings(builder -> builder.hosts(
                            Arrays.asList(serverAddress0
                            ))
                    .requiredReplicaSetName("rs0"))
            .build();
    MongoClient mongoClient = MongoClients.create(settings);
```

**Kasus failover **

Menggunakan pengaturan koneksi klien di atas, jika ada failover dan pembaruan catatan DNS yang tertunda untuk titik akhir penulis cluster, klien masih akan mencoba menerbitkan penulisan ke penulis lama (sekarang pembaca setelah failover). Ini menghasilkan kesalahan sisi server (bukan primer) yang tidak ditangani dengan tepat oleh driver Java (ini masih dalam penyelidikan). Dengan demikian, klien dapat dibiarkan dalam keadaan buruk sampai server aplikasi di-reboot, misalnya.

Ada dua solusi untuk ini:
+ Klien yang terhubung ke Amazon DocumentDB melalui string koneksi tidak akan mengalami masalah ini, karena `ClusterConnectionMode` akan disetel ke `MULTIPLE` saat menyetel preferensi baca.

  ```
  MongoClientURI mongoClientURI = new MongoClientURI("mongodb://usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred");
  MongoClient mongoClient = MongoClients.create(mongoClientURI.getURI());
  ```

  Atau menggunakan `MongoClientSettings` builder dengan `applyConnectionString` metode.

  ```
  final MongoClientSettings settings = MongoClientSettings.builder()
          .credential(credential)
          .applyConnectionString(new ConnectionString("usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred"))
          .retryWrites(false)
          .applyToSslSettings(builder → builder
                  .enabled(false))
          .build();
  MongoClient mongoClient = MongoClients.create(settings);
  ```
+ Secara eksplisit diatur `ClusterConnectionMode` ke`MULTIPLE`. Ini hanya diperlukan saat menggunakan `applyToClusterSettings` dan`hosts().size() == 1`.

  ```
  final ServerAddress serverAddress0 = new ServerAddress("cluster-endpoint", 27317));
  final MongoCredential credential = MongoCredential.createCredential("xxx","admin", "xxxx".toCharArray());
  final MongoClientSettings settings = MongoClientSettings.builder()
      .credential(credential)
      .readPreference(ReadPreference.secondaryPreferred())
      .retryWrites(false)
      .applyToSslSettings(builder → builder
      .enabled(false))
      .applyToClusterSettings(builder → builder
                  .hosts(Arrays.asList(serverAddress0))
                  .requiredReplicaSetName("rs0"))
                  .mode(ClusterConnectionMode.MULTIPLE))
      .build();
  MongoClient mongoClient = MongoClients.create(settings);
  ```

## Menguji koneksi ke instans Amazon DocumentDB
<a name="troubleshooting.testing-connection"></a>

Anda dapat menguji koneksi ke klaster menggunakan alat Linux atau Windows umum.

 Dari terminal Linux atau Unix, Anda dapat menguji koneksi dengan memasukkan hal berikut ini (ganti `cluster-endpoint` dengan titik akhir, dan ganti `port` dengan port instans Anda):

```
nc -zv cluster-endpoint port 
```

Berikut ini adalah contoh operasi sampel dan nilai balik: 

```
nc -zv docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017
   
Connection to docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 port [tcp/*] succeeded!
```

## Menghubungkan ke titik akhir yang tidak valid
<a name="troubleshooting.invalid-endpoint"></a>

Ketika menghubungkan ke klaster Amazon DocumentDB dan Anda menggunakan titik akhir klaster yang tidak valid, muncul kesalahan yang mirip dengan berikut ini.

```
mongo --ssl \
   --host sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 \
   --sslCAFile global-bundle.pem \
   --username <user-name> \
   --password <password>
```

Keluaran terlihat seperti ini:

```
MongoDB shell version v3.6
connecting to: mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/
2018-11-14T17:21:18.516-0800 I NETWORK [thread1] getaddrinfo("sample-cluster.node.us-east-1.docdb.amazonaws.com") failed: 
nodename nor servname provided, or not known 2018-11-14T17:21:18.537-0800 E QUERY [thread1] Error: couldn't initialize
connection to host sample-cluster.node.us-east-1.docdb.amazonaws.com, address is invalid :
connect@src/mongo/shell/mongo.js:237:13@(connect):1:6
exception: connect failed
```

Untuk mendapatkan titik akhir yang valid untuk klaster, jalankan perintah berikut ini: 

```
aws docdb describe-db-clusters \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].[Endpoint,Port]'
```

Untuk mendapatkan titik akhir yang valid untuk instans, jalankan perintah berikut ini:

```
aws docdb describe-db-instances \
   --db-instance-identifier sample-instance \
   --query 'DBInstances[*].[Endpoint.Address,Endpoint.Port]'
```

Untuk informasi selengkapnya, lihat [Memahami titik akhir Amazon DocumentDB](endpoints.md). 

## Konfigurasi driver yang memengaruhi jumlah koneksi
<a name="troubleshooting.driver.config"></a>

Saat menggunakan driver klien untuk terhubung ke cluster Amazon DocumentDB, penting untuk mempertimbangkan parameter `maxPoolSize` konfigurasi. Peng `maxPoolSize` aturan menentukan jumlah maksimum koneksi yang akan dipertahankan oleh driver klien di kumpulan koneksinya.