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
配置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://fe80::a00:27ff:feb5:5432: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,直接使用地址即可。