Невозможно подключиться к кластерам AWS ElastiCache с помощью клиентской библиотеки Membase для memcached - PullRequest
6 голосов
/ 16 ноября 2011

У меня проблемы с get / set для кластера ElastiCache из моего экземпляра EC2.Я получаю - SEVERE: net.spy.memcached.OperationTimeoutException: Timeout waiting for value - ошибка.

Когда я пытаюсь получить или установить значение.Я использовал тот же код на своей локальной машине (хотя и общался с локальным сервером memcached), и все работает нормально.Полная трассировка стека может быть найдена здесь - http://pastebin.com/tYcCJ6cj

Я впервые увидел, что я могу, по крайней мере, получить IP-адрес всех узлов кластера, чтобы я мог передать его на свой клиентский клиент& Я действительно могу узнать IP-адреса узла.Я также удостоверился, что все мои группы безопасности EC2 также добавлены в группу безопасности кластера кэша по умолчанию.

Любые указатели на это будут очень полезны.

ОБНОВЛЕНИЕ

Фрагмент кода, используемый для извлечения конкретной записи.

public String getCachedValue(String namespace, String key) {
    String value = null;

    try {
        MemcachedClient client
            = CacheConnectionUtil.connectToElastiCacheMemcachedServer();

        // Point of origin for the exception.
        return (String) client.get(namespace + "$" + hashKey(key));        
    } catch (IOException e) {
        e.printStackTrace();
    }

    return value;
}

Фрагмент кода, используемый для подключения к серверу ElastiCache

private static MemcachedClient connectToElastiCacheMemcachedServer() 
    throws IOException {

    DescribeCacheClustersResult cacheClustersInfo = null;
    DescribeCacheClustersRequest cacheClusterRequest
         = new DescribeCacheClustersRequest();
    cacheClusterRequest.setShowCacheNodeInfo(true);

    try {
    cacheClustersInfo = AWSConnectionUtil
        .getElastiCacheObject(null)
        .describeCacheClusters(cacheClusterRequest);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IOException("Unable to connect to ElastiCache Cluster.", e);
    }

    if (cacheClustersInfo == null) {
        throw new IOException("ElastiCache Cluster Info Object is null.");
    }

    List<CacheCluster> clusters = cacheClustersInfo.getCacheClusters();

    if (clusters == null || clusters.isEmpty()) {
        throw new IOException("No ElastiCache Clusters available.");
    }

    List<String> serverList = new ArrayList<String>();
    for (CacheCluster cluster : clusters) {
        if (cluster != null 
            && AWSConstants
                   .CACHE_CLUSTER_ID
                   .equalsIgnoreCase(cluster.getCacheClusterId())) {

            List<CacheNode> nodes = cluster.getCacheNodes();
            if (nodes != null ) {
                for (CacheNode node : nodes) {
                    if (node != null) {
                        Endpoint endpoint = node.getEndpoint();
                        if (endpoint != null
                            && endpoint.getAddress() != null) {
                            serverList.add(endpoint.getAddress()
                                           + ":"
                                           + endpoint.getPort());
                        }
                    }
                }
            }
        }
    }

    if (serverList.isEmpty()) {
        throw new IOException("No Cached nodes available for cluster - "
                              + AWSConstants.CACHE_CLUSTER_ID); 
    }

    return new MemcachedClient(AddrUtil.getAddresses(serverList));
}

1 Ответ

0 голосов
/ 17 января 2014

Используйте модифицированный клиент ElastiCache Cluster от Amazon.

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AutoDiscovery.html#AutoDiscovery.ClusterClient

Согласно документации для загрузки клиента ElastiCache Cluster:

  1. Войдите в консоль управления AWS и откройте консоль ElastiCache на https://console.aws.amazon.com/elasticache/.
  2. В консоли ElastiCache щелкните Загрузить клиент кластера ElastiCache.

Исходный код для ElastiCache Cluster Client для Java доступен по адресу https://github.com/amazonwebservices/aws-elasticache-cluster-client-memcached-for-java. Эта библиотека основана на популярном клиенте Spymemcached. Клиент ElastiCache Cluster выпускается под лицензией Amazon Software. Вы можете изменять исходный код по своему усмотрению; Вы даже можете включить код в другие библиотеки Memcached с открытым исходным кодом или в свой собственный клиентский код.

В настоящее время версия 1.0.1. Я пользуюсь версией 1.0 без проблем уже больше года.

...