乐趣区

关于clickhouse:ClickHouse连接IPv6

概述

IPv6Internet Protocol Version 6 的缩写,是代替 IPv4 的下一代协定。因为 IPv4 所能表白的网络地址资源无限,随着网络的全世界遍及,曾经越来越不够用,因而,IPv6的推广势在必行。

尤其是政府银行机构,更是将 IPv6 的反对作为推广亮点,呈现在手机 App 的首页。

ClickHouse 作为支流的 OLAP 列式存储数据库,在大数据的利用中越来越失去用户的青眼和认可,那么对 IPv6 的反对也是牵强附会的事件。

本文次要解说 ClickHouse 如何通过 IPv6 进行连贯。

前置工作

如何查看服务器是否反对 ipv6

随着 IPv6 的遍及以及政府对 IPv6 的反对力度加大,当初大部分设施都曾经反对 IPv6。能够通过ifconfig 命令查看:

如上图所示,如果有 inet6 这一项,则示意以后机器反对ipv6

如果是 Linux 服务器,也能够通过查看目录下是否有 /proc/net/if_inet6 文件,来判断是否反对IPv6

如何配置使 ClickHouse 反对 ipv6 连贯

在应用 IPv6 地址连贯 ClickHouse 之前,须要在 ClickHouse 的服务器中做一些配置,次要是配置 listen_host 选项。官网阐明如下:

    <!-- 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>

总结起来就是,默认配置的 ::1 只反对本机连贯,如果要放开近程连贯,则要应用 :: 或者 0.0.0.0。其中:: 同时反对 IPv6IPv4连贯,而 0.0.0.0 只反对 IPv4 连贯。因而,这里须要将 listen_host 配置成 ::
有人说,既然:: 同时反对 IPv6IPv4连贯,那间接配置成 :: 不就完了,为什么还要有配置成 0.0.0.0 这种形式呢?

起因是当 ClickHouse 服务器所在的机器不反对 IPv6 的时候,启动 clickhouse-server 会报错。

命令行工具连贯

应用命令行工具连贯很简略,就是间接跟上 -h ipv6 地址 即可。如果是以 fe80 结尾的局域网地址,则须要带上网卡名称,如下所示:

应用代码连贯

在这里,通过 go 语言实现应用 ipv6 连贯clickhouse,其余编程语言能够触类旁通,大抵相似。

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/ClickHouse/clickhouse-go"
)

func main() {
    /*
    因为要辨别 ip 和端口,所以个别默认的规定都是将 ipv6 的地址应用中括号 [] 蕴含起来。尽管实际上的 ipv6 地址是 fe80::427c:e13c:50b6:d747%p5p2,但在此处,ipv6 地址是作为 url 的一部分呈现的,因而,对于百分号 % 的解析会呈现问题,须要用特殊符号 %25 代替,所以最终的地址应该是[fe80::427c:e13c:50b6:d747%25p5p2]
    当然,如果 ipv6 地址是一个失常的外网地址,而非局域网地址,则无需从新解析百分号。*/
    connect, err := sql.Open("clickhouse", "tcp://[fe80::427c:e13c:50b6:d747%25p5p2]:9000?database=default&username=default&password=")
    if err != nil {fmt.Println("connect error", err)
    } else {fmt.Println("connected")
    }

    if err = connect.Ping(); err != nil {fmt.Println("error:", err)
    } else {fmt.Println("connect success!!")
    }
}

以上代码运行后果:

退出移动版