概述
IPv6
是Internet 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
。其中::
同时反对IPv6
和IPv4
连贯,而0.0.0.0
只反对IPv4
连贯。因而,这里须要将listen_host
配置成::
。
有人说,既然::同时反对IPv6
和IPv4
连贯,那间接配置成::
不就完了,为什么还要有配置成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!!") }}
以上代码运行后果: