Java程序连接ClickHouse失败拒绝连接 failed: Connection refused

69 篇文章 0 订阅
24 篇文章 1 订阅

ClickHouse介绍

  • ClickHouse是俄罗斯搜索引擎Yandex开发的一个高性能列式数据库系统,支持SQL查询,具有高并发、高可靠、高扩展性等特点
  • Java连接ClickHouse有以下几种方式
  • 1、使用JDBC连接:ClickHouse提供了JDBC驱动,可以使用JDBC API连接到ClickHouse,类似于连接其他关系型数据库。可以使用Java中JDBC APIClickHouse进行操作,例如执行SQL查询、插入、更新、删除等操作。连接方式如下:
Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
Connection conn = DriverManager.getConnection("jdbc:clickhouse://localhost:8123/test","default","");
  • 2、使用ClickHouse-Java客户端连接:ClickHouse-Java是一个基于HTTP协议的ClickHouse客户端,具有跨平台、跨语言、易于使用等特点。可以使用Java代码通过ClickHouse-Java连接到ClickHouse并执行查询、插入、更新、删除等操作。连接方式如下:
ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://localhost:8123/test");
  • 3、使用ORM框架连接:如果使用的Java应用涉及数据存储的逻辑比较复杂,可以使用ORM框架连接到ClickHouse,例如HibernateMyBatis等。ORM框架会自动将Java对象映射到ClickHouse中的表结构,简化了代码编写和维护。ORM框架连接方式和其他数据库连接方式类似,需要根据具体框架进行配置和使用。
  • 我们使用clickhouse作为大数据组件,存储前端设备实时采集到的海量数据,用做大数据的存储和分析

问题描述

  • clickhouse在客户服务器部署后,启动成功,但是程序无法连接到clickhouse,程序报错拒绝连接,关键报错internal:8123 [host.docker.internal/172.17.0.1] failed: Connection refused
  • 节选程序报错日志如下:
org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 600, active 0, maxActive 100, creating 0, createErrorCount 1
Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 600, active 0, maxActive 100, creating 0, createErrorCount 1
Caused by: java.lang.RuntimeException: ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 210, host: host.docker.internal, port: 8123; Connect to host.docker.internal:8123 [host.docker.internal/172.17.0.1] failed: Connection refused (Connection refused)
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to host.docker.internal:8123 [host.docker.internal/172.17.0.1] failed: Connection refused (Connection refused)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
  • 客户的程序和clickhouse的配置都是和我们测试环境一致的,但是程序无法连接,继续排查clickhouse的日志
  • 查看clickhouse报错日志 clickhouse-server.err.log (默认在/var/log/clickhouse-server/下),确实是有网络问题,在我们测试环境是没这个报错的
2023.02.25 11:42:11.223352 [ 16413 ] {} <Error> CertificateReloader: Cannot obtain modification time for certificate file /etc/clickhouse-server/server.crt, skipping update. errno: 2, strerror: No such file or directory
2023.02.25 11:42:11.223506 [ 16413 ] {} <Error> CertificateReloader: Cannot obtain modification time for key file /etc/clickhouse-server/server.key, skipping update. errno: 2, strerror: No such file or directory
2023.02.25 11:42:11.224947 [ 16413 ] {} <Error> CertificateReloader: Poco::Exception. Code: 1000, e.code() = 0, SSL context exception: Error loading private key from file /etc/clickhouse-server/server.key: error:02000002:system library:OPENSSL_internal:No such file or directory (version 22.2.2.1)
  • 配置一致,初步判断是网络环境不一样,查看了客户的网络配置,发现客户网络只设置了ipv4,禁用了ipv6。查看了clickhouse的配置文件,发现对于ipv4/6,是有不同配置的

处理解决

  • clickhouse的网络访问服务配置在config.xml文件(默认在/etc/clickhouse-server下),具体是这儿,如下:
    <!-- Listen specified address.
         Use :: (wildcard IPv6 address), if you want to accept connections both with IPv4 and IPv6 from everywhere.
         Notes:
         If you open connections from wildcard address, make sure that at least one of the following measures applied:
         - server is protected by firewall and not accessible from untrusted networks;
         - all users are restricted to subset of network addresses (see users.xml);
         - all users have strong passwords, only secure (TLS) interfaces are accessible, or connections are only made via TLS interfaces.
         - users without password have readonly access.
         See also: https://www.shodan.io/search?query=clickhouse
    -->
    <listen_host>::</listen_host>
	

    <!-- Same for hosts without support for IPv6: -->
    <!-- <listen_host>0.0.0.0</listen_host>  --> 

    <!-- Default values - try listen localhost on IPv4 and IPv6. -->
    <!--
    <listen_host>::1</listen_host>
    <listen_host>127.0.0.1</listen_host>
    -->

    <!-- Don't exit if IPv6 or IPv4 networks are unavailable while trying to listen. -->
    <!-- <listen_try>0</listen_try> -->
  • 翻译解释下大致为,ipv4和ipv6的写法不同,如果是开启了ipv4/6,则使用<listen_host>::</listen_host>;如果只有ipv4,则使用<listen_host>0.0.0.0</listen_host>
  • 看了配置文件的注释,已经了解了,就可以对应处理了,按照不同的网络环境修改配置即可

其他可能的原因和处理方式

  • clickhouse服务未启动,或者服务器未联网
  • clickhouse启动报错服务终止(例如异常断电造成的文件损坏),未正常提供服务

【已解决】异常断电文件损坏clickhouse启动不了:filesystem error Structure needs cleaning
服务器强制关闭、异常断电等导致clickhouse数据损坏Suspiciously many broken parts to remove

  • 应用服务与clickhouse服务网络不通,无法访问
  • clickhouse服务限定访问ip,未在允许范围内
  • 用户名、密码不正确,拒绝访问
  • 访问的数据库或表不存在,其他报错等
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持是一种态度

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值