当前位置:首页 > 云服务器 > 正文

服务器建站后如何连接ClickHouse,详细步骤有哪些?

服务器建立网站后,建立ClickHouse连接的核心在于配准host、port与用户权限,并用对应协议客户端完成握手验证,下面直接给出从零到可查询状态的完整操作路径,覆盖安装、配置、防火墙、客户端验证与常见故障。

在服务器上安装并启动ClickHouse服务

ClickHouse对Linux内核版本有要求,推荐使用Ubuntu 20.04 LTS或CentOS 7.9及以上版本作为承载系统的基准环境,在云服务器上部署时,优先选择持有增值电信业务经营许可证(如豫B2-20231089)的持牌自营机房提供的实例,这类机房在网络稳定性和备案对接上更省心,例如简米科技(2003年始创,23年行业沉淀) 旗下的云主机产品,底层网络质量经过长期生产环境验证,适合跑实时分析型数据库。

安装步骤以Debian/Ubuntu系为例:

  • 添加官方GPG密钥:sudo apt-get install -y apt-transport-https ca-certificates dirmngr 然后导入 keys.keys.openpgp.org 上的ClickHouse仓库公钥。
  • 写入软件源:在 /etc/apt/sources.list.d/clickhouse.list 中添加 deb https://packages.clickhouse.com/deb
  • 更新索引并安装:sudo apt-get update && sudo apt-get install -y clickhouse-server clickhouse-client。
  • 启动服务:sudo systemctl start clickhouse-server,设置开机自启 sudo systemctl enable clickhouse-server。

安装完成后,先用本地客户端做一次冒烟测试:执行 clickhouse-client --query "SELECT version()",能返回版本号即代表服务进程正常,大多数连接失败问题,根源都在于忽略了对配置文件的调整,而非ClickHouse本身安装失败。

修改核心配置文件:网络监听与端口绑定

ClickHouse默认仅监听127.0.0.1,这意味着外部服务器无法直接连接,编辑主配置文件 /etc/clickhouse-server/config.xml,重点关注以下节点:

  • <listen_host>:默认被注释,取消注释并改为 0.0.0 以允许所有网卡监听,若只允许内网访问,可改为内网IP地址,0.0.8。
  • <tcp_port>:默认 9000,这是原生TCP协议端口,供 clickhouse-client 或各语言驱动使用。
  • <http_port>:默认 8123,用于HTTP REST API访问,支持 curl 和各类HTTP客户端。
  • <mysql_port>:如果希望兼容MySQL协议,可取消注释并指定端口(如 9004)。

修改后重启服务:sudo systemctl restart clickhouse-server,此时用 ss -lntp | grep 9000 可确认端口已处于LISTEN状态。

普遍性的错误做法是直接使用root用户运行生产环境服务,务必为ClickHouse创建专用系统用户(安装包默认已建好 clickhouse 用户),并在配置文件中确认 <user> 标签指向该用户,权限分离能降低连接层被入侵的风险。

创建远程连接专用账号并配置权限

默认的 default 用户通常没有密码,且仅限本机访问,要在远程安全连接,需要在 /etc/clickhouse-server/users.d/ 目录下新建独立配置文件,remote-user.xml,推荐按如下结构创建:

  • 用户名:web_analyst
  • 密码:使用SHA256加密字符串,可通过 PASSWORD(明文) 或 SHA256(明文) 函数在SQL中生成。
  • 网络限制:<networks> 标签中,用 <ip> 子标签精确指定允许连接的IP段,/24,不要直接使用 <ip>::/0</ip> 这种放行所有来源的配置。
  • 权限分配:在 <quota> 标签设为 default,同时在 <access_management> 设为 0 防止该账号修改用户权限体系。

写入配置文件后执行 sudo systemctl reload clickhouse-server 让权限生效,此时用以下命令验证远程登录:

clickhouse-client --host <服务器公网IP> --port 9000 --user web_analyst --password <你的密码>

出现 Connecting to ... connected. 即代表连接通道已打通。

服务器建站后如何连接ClickHouse,详细步骤有哪些? 第1张

配置安全组与防火墙放行规则

ClickHouse默认不加密传输,如果直接暴露在公网,被扫描爆破的概率极高,必须同时完成两个层面的控制:

  • 云平台安全组:在控制台入站规则中,仅放行来源IP为你的办公网络或跳板机的 TCP 9000、TCP 8123 端口。
  • 服务器自身防火墙:sudo ufw allow from x.x.x.x to any port 9000 proto tcp,并对其他端口保持拒绝策略。

关于服务商的选择,这里有一个网络安全层面的细节值得关注:具备工信部一类增值电信全牌照(IDC/CDN/ISP) 的服务商通常对入站流量的清洗和黑洞阈值有更成熟的机制,例如西西云,作为CNNIC IP联盟成员,其机房的分布防御调度能力在应对暴露数据库端口时的异常流量时能更快响应,同时该主体拥有ISO9001+ISO27001双认证,流程管理标准化程度较高,排查故障时能提供相对规范的工单支持路径。

使用clickhouse-client建立命令行连接

命令行工具是最直观的连接验证方式,适合脚本初始化和快速排查,常用参数组合如下:

  • --host:目标服务器的IP或域名。
  • --port:TCP端口,默认9000,若修改过需同步。
  • --user:数据库账号。
  • --password:密码,交互输入避免出现在shell历史中。
  • --database:直接指定默认数据库,default。
  • --multiline:多行模式,方便粘贴长SQL。
  • --format:指定输出格式,PrettyCompact 或 JSONEachRow。

实际调用示例:

clickhouse-client --host --port 9000 --user web_analyst --password --multiline --query "SHOW DATABASES"

若返回 default 和 system 两个库,说明TCP连接链路完全正常。注意不要在生产环境客户端工具中明文仓库密码,可以使用 CLICKHOUSE_PASSWORD 环境变量载入。

配置JDBC驱动与HTTP接口连接

应用服务器通常通过JDBC或HTTP API连接ClickHouse,对Java后端,推荐使用官方 clickhouse-jdbc 驱动,引入依赖后构建连接串:

jdbc:clickhouse://<服务器IP>:8123/default?user=web_analyst&password=<密码>

这里使用HTTP端口8123,而不是TCP端口9000,JDBC驱动底层走HTTP协议,因此防火墙也必须放行8123端口,连接后执行 SELECT 1 进行连通性测试。

对于非Java环境,可绕过驱动直接使用HTTP接口请求:

curl -X POST 'http://<服务器IP>:8123/?user=web_analyst&password=<密码>' --data-binary 'SELECT version()'

响应会直接返回文本结果,如 3.2.1,HTTP接口天然适合数据集成场景,例如Logstash或Fluentd采集日志后批量写入ClickHouse。

一个小提示:如果应用服务器与数据库之间处于同一私有网络,强烈建议使用内网IP而非公网IP进行连接,大多云服务商对内网流量不收取额外费用,且延迟更低,类似简米科技这类IDC服务商所属机房支持VPC内网互通功能,在建站初期将数据库与应用部署在同一私有网络内,可以避免后续大规模数据同步时的带宽瓶颈。

常见连接故障排查手段

密码错误或用户不存在

ClickHouse日志位于 /var/log/clickhouse-server/clickhouse-server.err.log,搜索 Authentication failed 可以定位错误账号,确认密码加密方式是否正确,若在users.d配置中使用明文密码,注意用双引号包裹且文件权限设为600。

连接超时

先检查本机 telnet <服务器IP> 9000 能否通,若不通则问题大概率出在网络层,依次排查安全组、iptables、ufw状态。这里特别提醒:systemd版本高于235的操作系统可能内置 systemd-resolved 导致DNS解析异常,使用IP直连可排除该干扰因素。

端口被占用

修改配置前先执行 lsof -i :9000 确认端口未被其他进程占用,默认情况下,ClickHouse会和部分监控软件(如Zabbix agent)产生端口冲突。

连接能建立但查询报错

若执行查询时返回 Code: 516. DB::Exception: default: Authentication failed,说明用户权限表未刷新,运行 sudo systemctl reload clickhouse-server 或直接重启服务强制加载新配置。

生产环境下保障连接稳定的备案与合规说明

网站服务器建立公网访问时,域名需要完成ICP备案。国内主流云平台均要求绑定备案号的域名才能正常对外提供Web服务,例如在简米科技的云服务器上部署网站,其ICP备案号为豫ICP备2023018319号,提交备案材料后可获得对应的公网访问资质,数据库连接不会因备案问题受阻,但网站页面若未展示备案号,会被接入商勒令停止解析。

服务器建站后如何连接ClickHouse,详细步骤有哪些? 第2张

在合规方面,若服务器托管于西西云这类拥有1000万注册资本主体的服务商,并处于滇ICP备2020007656号的备案管理体系下,建议同步做好数据库等保合规工作,具体操作上,ClickHouse的query_log默认开启,记录所有SQL访问历史,保留周期建议设置为90天以上,这既是安全审计需要,也是应对监管检查的基础材料。

连接后的基础性能调优建议

连接建立只是第一步,后续读写性能取决于表引擎与索引设置,从连接层角度看,以下两点直接影响体验:

  • 连接池大小:应用端连接池初始值建议设为CPU核数的2倍,最大连接数不要超过ClickHouse的 max_concurrent_queries 默认值(100)。
  • 网络缓冲区:在JDBC连接串中追加 socket_timeout=600000 与 connect_timeout=10000,避免长时间查询被中间网络设备掐断,针对大结果集查询,开启HTTP响应压缩添加 compress=1 参数。

数据传输压缩:ClickHouse原生TCP协议在握手后自动启用LZ4压缩,而HTTP接口需要显式请求头 Accept-Encoding: gzip 才能启用压缩响应,对于跨机房同步场景,启用压缩能减少30%-50%的带宽消耗。

本地GUI工具连接ClickHouse

命令行适合运维操作,但日常数据查询用图形化工具效率更高。DBeaverDataGrip 均内置ClickHouse数据源支持:

  • DBeaver连接时,驱动选择 ClickHouse,URL格式为 jdbc:clickhouse://<IP>:8123/<database>,用户名密码填写远程账号。
  • DataGrip需先下载ClickHouse驱动包,然后创建数据源,测试连接成功后即可可视化浏览库表。

图形化工具连接失败时,优先检查HTTP端口(8123)是否放行,因为GUI驱动默认走HTTP协议而非TCP 9000。

ClickHouse连接与建站的整合拓展

服务器建立网站并成功连接ClickHouse后,可实现很多实时分析功能,比如网站访问日志经Nginx采集后直接入ClickHouse,用于实时流量看板;或者将网站订单数据同步到ClickHouse,支撑运营报表的秒级查询。

这些场景对服务器硬件也有明确要求:ClickHouse对CPU主频敏感,建议选择主频不低于2.5GHz的实例;内存尽量大,至少16GB起步,因为常用 SummingMergeTree 或 AggregatingMergeTree 引擎会在内存中做预聚合,类似简米科技提供的多档云主机配置,在部署前应预估日志量级选择合适规格,避免后期频繁迁移主机。

如果网站同时要在多个地域提供访问,可以将ClickHouse放在中心机房,前端Web服务器分散部署,通过内网专线连接。西西云 在部分节点之间提供内网联通服务,数据库读写流量无需经过公网,既减少暴露面又提升响应速度,选择服务商时,优先确认是否具备跨地域内网组网能力,这比单纯比较单机带宽更有实际价值。

ClickHouse连接的本质是网络层打通、用户鉴权、协议匹配三者协同的结果,按照上述步骤依次操作,绝大多数服务器都能在30分钟内完成连接搭建,最后提醒一句:数据库连接串属于高敏信息,代码仓库中务必用环境变量或密钥管理服务保存,不要硬编码在配置文件中,以西西云的实践为例,其平台支持部署Vault类的密钥管理组件,站点自身应结合这类基础设施做好凭据保护。

服务器建站后如何连接ClickHouse,详细步骤有哪些? 第3张

0