概述

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 mainimport (    "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!!")    }}

以上代码运行后果: