You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python SDK无法连接Couchbase集群,求助问题排查

Couchbase Python SDK 连接超时问题排查(curl可正常访问)

问题场景

  • 可通过cURL命令正常访问Couchbase集群:
    curl -u $CB_USERNAME:$CB_PASSWORD  http://$CB_HOST/pools/default/buckets
    
  • 使用Python SDK连接时触发UnAmbiguousTimeoutException,代码如下:
    from datetime import timedelta
    from couchbase.auth import PasswordAuthenticator
    from couchbase.cluster import Cluster
    from couchbase.options import ClusterOptions
    import os
    
    # Configuration
    CB_HOST = os.environ.get('CB_HOST')
    CB_BUCKET = os.environ.get('CB_BUCKET')
    CB_USERNAME = os.environ.get('CB_USERNAME')
    CB_PASSWORD = os.environ.get('CB_PASSWORD')
    
    # Initialize Couchbase connection
    auth = PasswordAuthenticator(CB_USERNAME, CB_PASSWORD)
    options = ClusterOptions(auth)
    cluster = Cluster(f'couchbase://{CB_HOST}', options)
    
  • 完整报错信息:
    Traceback (most recent call last):
      File "/Users/luc/code/couchbase/examples/main.py", line 27, in <module>
        cluster = Cluster(f'couchbase://{CB_HOST}', options)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/luc/code/couchbase/examples/venv/lib/python3.11/site-packages/couchbase/cluster.py", line 99, in __init__
        self._connect()
      File "/Users/luc/code/couchbase/examples/venv/lib/python3.11/site-packages/couchbase/logic/wrappers.py", line 98, in wrapped_fn
        raise e
      File "/Users/luc/code/couchbase/examples/venv/lib/python3.11/site-packages/couchbase/logic/wrappers.py", line 82, in wrapped_fn
        ret = fn(self, *args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/luc/code/couchbase/examples/venv/lib/python3.11/site-packages/couchbase/cluster.py", line 105, in _connect
        raise ErrorMapper.build_exception(ret)
    couchbase.exceptions.UnAmbiguousTimeoutException: UnAmbiguousTimeoutException(<ec=14, category=couchbase.common, message=unambiguous_timeout (14), C Source=/Users/couchbase/jenkins/workspace/python/sdk/python-packaging-pipeline/py-client/src/connection.cxx:199>)
    

排查与解决方法

  • 端口差异导致拦截:
    cURL用的是HTTP管理端口(默认8091),Python SDK使用的是Couchbase原生协议端口(默认11210,启用TLS则为11207)。需确认集群的这些原生端口是否在本地防火墙、集群安全组中开放。
  • 协议与TLS配置不匹配:
    如果集群启用了TLS加密,连接字符串需改为couchbases://{CB_HOST},并显式开启TLS选项:
    from couchbase.options import ClusterOptions, ClusterTimeoutOptions
    
    # 延长连接超时时间
    timeout_opts = ClusterTimeoutOptions(connect_timeout=timedelta(seconds=10))
    # 启用TLS并配置超时
    options = ClusterOptions(
        PasswordAuthenticator(CB_USERNAME, CB_PASSWORD),
        timeout_options=timeout_opts,
        enable_tls=True
    )
    cluster = Cluster(f'couchbases://{CB_HOST}', options)
    
  • 默认超时时间过短:
    显式设置更长的连接超时时间(如上述代码中的10秒),避免因网络延迟导致超时。
  • 主机名解析问题:
    尝试将CB_HOST替换为集群节点的IP地址,排除DNS解析失败的可能。
  • 集群节点列表不完整:
    如果是多节点集群,连接字符串建议列出所有节点(如couchbase://node1,node2,node3),SDK会自动选择可用节点建立连接。

内容的提问来源于stack exchange,提问作者Luc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:06:13