clickhouse报错 Connection refused: connect

一般报这种错误,基本都是配置问题导致。常见的配置有用户名、密码、host、port、防火墙等。代码方面排查时这四个点可能都要看一下。而在clickhouse中,则着重看一下防火墙以及clickhouse的host和port是否对外开放。我的报错如下:


我这里代码检查过是没问题的,而且用户名密码类的问题一般都有更清晰的提示。所以这里接着看clickhouse服务器防火墙以及host和port配置。

systemctl status firewalld

 防火墙没有打开,接着看clickhouse-server的host和port配置。该配置文件一般默认在/etc/clickhouse-server路径下,查看config.xml中以下两项配置:

<!-- 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>
    <!-- Port for interaction by native protocol with:
         - clickhouse-client and other native ClickHouse tools (clickhouse-benchmark, clickhouse-copier);
         - clickhouse-server with other clickhouse-servers for distributed query processing;
         - ClickHouse drivers and applications supporting native protocol
         (this protocol is also informally called as "the TCP protocol");
         See also 'tcp_port_secure' for secure connections.
    -->
<tcp_port>9000</tcp_port>

可以看到主机和端口都是正常配置的,注意这里还可以多看一下users.xml文件的网络配置。它也可以控制对clickhouse-server的访问,我的配置如下:

 <!-- List of networks with open access.

                 To open access from everywhere, specify:
                    <ip>::/0</ip>

                 To open access only from localhost, specify:
                    <ip>::1</ip>
                    <ip>127.0.0.1</ip>

                 Each element of list has one of the following forms:
                 <ip> IP-address or network mask. Examples: 213.180.204.3 or 10.0.0.1/8 or 10.0.0.1/255.255.255.0
                     2a02:6b8::3 or 2a02:6b8::3/64 or 2a02:6b8::3/ffff:ffff:ffff:ffff::.
                 <host> Hostname. Example: server01.yandex.ru.
                     To check access, DNS query is performed, and all received addresses compared to peer address.
                 <host_regexp> Regular expression for host names. Example, ^server\d\d-\d\d-\d\.yandex\.ru$
                     To check access, DNS PTR query is performed for peer address and then regexp is applied.
                     Then, for result of PTR query, another DNS query is performed and all received addresses compared to peer address.
                     Strongly recommended that regexp is ends with $
                 All results of DNS requests are cached till server restart.
            -->
<networks>
   <ip>::/0</ip>
</networks>

可以看到我的配置也是没问题的,然后我发现直接通过:
        clickhouse-client
可以访问数据库,但是通过 :
        clickhouse-client -h 192.168.71.136 --port 9000
不能访问。于是判断是端口问题。通过
        lsof -i:9000
命令查看有java进程在使用该端口,如下:

通过ps命令
ps -ef|grep 1704
查看进程的详细信息如下:

 可以推测出9000端口其实是被hadoop集群使用了,所以这里更改一下tcp连接的端口。这里我先是通过
        lsof -i:9001
查看9001端口没有被占用,然后修改config.xml中的<tcp_port>属性值。
再次通过命令
        clickhouse-client -h 192.168.71.136 --port 9001
连接后发现还是如下报错:

ClickHouse client version 21.7.2.7 (official build).
Connecting to 192.168.71.136:9001 as user default.
Code: 516. DB::Exception: Received from 192.168.71.136:9001. DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name. 

猜测可能需要重启服务,通过如下命令
        systemctl restart clickhouse-server
重启后连接成功

### GORM 并发场景下 `connection refused` 错误解决方案 当使用 GORM 进行高并发操作时,可能会遇到 `connect: connection refused` 的错误。这通常是因为数据库连接池设置不当或网络配置不合理造成的。 #### 数据库连接池优化 为了提高性能并减少连接被拒的概率,建议调整 Go 中使用的数据库驱动程序的连接池参数: ```go db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal(err) } sqlDB, _ := db.DB() // 设置最大打开的连接数 sqlDB.SetMaxOpenConns(100) // 设置最大闲置连接数 sqlDB.SetMaxIdleConns(10) // 设置每个连接的最大生命周期 sqlDB.SetConnMaxLifetime(time.Hour) ``` 通过合理配置这些参数可以有效防止因连接耗尽而导致的连接请求失败[^1]。 #### 增强网络稳定性 确保应用程序与目标主机之间的网络稳定可靠非常重要。对于外部 IP 地址(如 108.177.125.141),应当确认防火墙规则允许必要的端口通信,并且 DNS 解析正常工作。内部地址 (例如 127.0.0.1 或局域网内的私有IP),需验证两端的服务状态良好,避免其中一方意外终止而未正确关闭套接字的情况发生[^2]。 #### 处理 ClickHouse 特定问题 如果所涉及的是 ClickHouse 数据库,则还需要考虑其特有的因素。比如,在某些情况下,由于硬件故障或者电力供应中断等原因可能导致 ClickHouse 文件系统受损,进而影响正常的客户端连接尝试。此时应该先修复潜在的数据损坏问题再继续排查其他方面的原因[^3]。 综上所述,针对 GORM 在并发环境下可能出现的 "connection refused" 报错现象,可以从上述几个角度出发来进行诊断和处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值