opengauss/mogdb支持多种网络接口,假如我们想在支持ipv6的网络上部署使用,只需简单操作即可,本文将介绍在centos上如何配置使用。
关于ipv6
ipv6(internet protocol version 6),是internet engineering task force (ietf)设计用于替代ipv4的下一代ip协议,使用ipv6能解决网络地址资源数量的问题。
我们使用ipconfig /all命令查看windows网络接口,会看到ipv6地址。
以太网适配器 以太网 7:
本地链接 ipv6 地址. . . . . . . . : fe80::828a:5e20:53cb:7719%6(首选)
ipv4 地址 . . . . . . . . . . . . : 192.168.137.68(首选)
centos下使用ip addr命令查看linux网络接口,也会看到ipv6地址。
# ip addr
1: lo: mtu 65536 qdisc noqueue state unknown group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: mtu 1500 qdisc pfifo_fast state up group default qlen 1000
link/ether 08:00:27:b5:54:32 brd ff:ff:ff:ff:ff:ff
inet 192.168.137.101/24 brd 192.168.137.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feb5:5432/64 scope link
valid_lft forever preferred_lft forever
ipv6分类
1.本地关联ipv6
本地关联的ipv6,是以fe80开头,与网卡的物理地址(mac地址)有关,不需要通过dhcp自动分配或者手工设置。
2.全局ipv6
如果需要跨网络或者跨路由器进行通信,则需要使用全局的ipv6。
创建全局ipv6
创建全局ipv6有多种的方式,例如dhcpv6、stateless address autoconfiguration (slaac) 以及手工配置。
手工配置可以使用ip命令来配置:
# ip -6 addr add 2022:1:0:0::db1/64 dev enp0s3
或者使用ifconfig命令来配置:
# ifconfig enp0s3 inet6 add 2022:1:0:0::db1/64
通过上面任意一种方式配置后,可以看到enp0s3网络接口将增加一个inet6,并且是global属性的。
# ip addr
1: lo: mtu 65536 qdisc noqueue state unknown group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: mtu 1500 qdisc pfifo_fast state up group default qlen 1000
link/ether 08:00:27:b5:54:32 brd ff:ff:ff:ff:ff:ff
inet 192.168.137.101/24 brd 192.168.137.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 2022:1::db1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feb5:5432/64 scope link
valid_lft forever preferred_lft forever
注意:上面ipv6字符串配置中有db1,这符合hex字符规则,非hex字符则不允许设置,比如我们把db换成dx,则会提示下面的错误信息。
# ifconfig enp0s3 inet6 add 2022:1:0:0::dx1/64
2022:1:0:0::dx1: resolver error 0 (no error)
ipv6连通性测试
在本地使用ping6进行连通性测试,先使用全局ipv6进行测试
# ping6 2022:1::db1 -c3
ping 2022:1::db1(2022:1::db1) 56 data bytes
64 bytes from 2022:1::db1: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from 2022:1::db1: icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from 2022:1::db1: icmp_seq=3 ttl=64 time=0.028 ms
--- 2022:1::db1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.027/0.034/0.047/0.009 ms
再使用本地关联ipv6进行测试,此时需要带上网络接口名称
# ping6 fe80::a00:27ff:feb5:5432%enp0s3 -c3
ping fe80::a00:27ff:feb5:5432%enp0s3(fe80::a00:27ff:feb5:5432%enp0s3) 56 data bytes
64 bytes from fe80::a00:27ff:feb5:5432%enp0s3: icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from fe80::a00:27ff:feb5:5432%enp0s3: icmp_seq=2 ttl=64 time=0.041 ms
64 bytes from fe80::a00:27ff:feb5:5432%enp0s3: icmp_seq=3 ttl=64 time=0.022 ms
--- fe80::a00:27ff:feb5:5432%enp0s3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.022/0.034/0.041/0.010 ms
opengauss/mogdb配置ipv6
编辑postgresql.conf文件,修改监听参数
listen_addresses = '*'
修改完后重启服务,数据库将监听本机所有的网络接口。
编辑pg_hba.conf文件,添加数据库客户端连接的ipv6认证条目
host all all fe80::a00:27ff:feb5:5432/128 md5
host all all 2022:1::db1/128 md5
使用gsql客户端进行测试
1.使用本地关联ipv6进行测试,此时需要带上网络接口名称
$ gsql -h fe80::a00:27ff:feb5:5432%enp0s3 -umoguser postgres -r -p6432
postgres=> \conninfo
you are connected to database "postgres" as user "moguser" on host "fe80::a00:27ff:feb5:5432%enp0s3" at port "6432".
postgres=> select datname,usename, client_addr from pg_stat_activity where usename='moguser';
datname | usename | client_addr
---------- --------- --------------------------
postgres | moguser | fe80::a00:27ff:feb5:5432
(1 row)
2.使用全局ipv6进行测试
$ gsql -h 2022:1::db1 -umoguser postgres -r -p6432
postgres=> \conninfo
you are connected to database "postgres" as user "moguser" on host "2022:1::db1" at port "6432".
postgres=> select datname,usename, client_addr from pg_stat_activity where usename='moguser';
datname | usename | client_addr
---------- --------- -------------
postgres | moguser | 2022:1::db1
(1 row)
使用java jdbc进行测试
通过java程序test.jar包进行测试,test.jar需要三个入参,分别是jdbc url、jdbc username、jdbc password。
1.使用普通的ipv4进行测试
$ java -jar test.jar jdbc:postgresql://192.168.137.101:6432/postgres moguser admin@1234
执行结果如下,可以看到数据库连接测试成功
input jdbc url:jdbc:postgresql://192.168.137.101:6432/postgres
input jdbc username:moguser
connection test successfully.
2.使用本地关联ipv6进行测试,进行测试
$ java -jar test.jar jdbc:postgresql://fe80::a00:27ff:feb5:5432:6432/postgres moguser admin@1234
执行结果如下,可以看到数据库连接测试成功
input jdbc url:jdbc:postgresql://fe80::a00:27ff:feb5:5432:6432/postgres
input jdbc username:moguser
connection test successfully
3.使用全局ipv6进行测试
$ java -jar test.jar jdbc:postgresql://2022:1::db1:6432/postgres moguser admin@1234
执行结果如下,可以看到数据库连接测试成功
input jdbc url:jdbc:postgresql://2022:1::db1:6432/postgres
input jdbc username:moguser
connection test successfully.
总结
1.opengauss/mogdb配置ipv6只需简单修改listen_addresses = ‘*’ 即可。
2.使用gsql客户端进行连接时,本地关联ipv6还需要使用网络接口名进行访问,全局ipv6不需要。
3.使用jdbc客户端进行连接时,无论是本地关联ipv6还是全局ipv6,直接使用地址即可。