将白名单动态IP改为静态IP后数据库连接失败求助
问题分析与解决方案
问题背景
我正尝试将动态生成的白名单IP替换为静态IP,这样就能用单个IP连接数据库测试,不用在会话过期时重新生成IP,也不用反复添加IP到可信列表。
原有动态IP实现代码
#Get IP for Whitelist def get_external_ip(x): hostname = socket.gethostname() r = requests.get("https://api.ipify.org/") public_IP = r.content return f"#{x} From {hostname} with publicIP {public_IP}." print('DRIVER:') rdd1 = get_external_ip(0) print(rdd1)
尝试的静态IP代码(运行失败)
# 静态IP获取函数 def get_static_ip(x): hostname = socket.gethostname() static_IP = "172.161.48.227" # 在此处指定静态IP地址 return f"#{x} From {hostname} with publicIP {static_IP}." # 显示驱动程序的IP地址 print('DRIVER:') rdd1 = get_static_ip(0) print(rdd1) # 显示工作节点的IP地址 print('WORKERS:') rdd2 = sc.parallelize(range(1, 4)).map(get_static_ip) datacoll2 = rdd2.collect() for row in datacoll2: print(row)
报错信息
Error: (-10709, 'Connection failed (RTE:[89013] Socket closed by peer (10.0.0.8:50354 -> e79bc323--.hana.prod-eu10.hanacloud.ondemand.com:443))')
解决方向
- 检查白名单配置:确认静态IP
172.161.48.227已被添加到数据库的可信IP列表中,这是连接被拒最常见的原因。 - 验证Worker节点实际出口IP:Spark集群的Worker节点可能使用和Driver不同的出口IP,你硬编码的静态IP可能和Worker实际访问数据库的IP不匹配。可以在每个Worker节点上执行
curl https://api.ipify.org获取真实出口IP,再替换代码中的静态值。 - 测试网络连通性:从Driver和Worker节点分别测试到数据库地址
e79bc323--.hana.prod-eu10.hanacloud.ondemand.com:443的连通性,用telnet e79bc323--.hana.prod-eu10.hanacloud.ondemand.com 443或nc -zv e79bc323--.hana.prod-eu10.hanacloud.ondemand.com 443验证端口是否可达。 - 确认静态IP的网络权限:检查该静态IP是否被集群防火墙或云服务商限制,无法访问外部数据库服务。
内容的提问来源于stack exchange,提问作者WqX He
相关产品推荐
相关产品推荐

