您的位置:首页 > 娱乐 > 八卦 > 青岛专业网站开发_十大免费跨境网站_上海搜索引擎优化seo_网站推广软件下载

青岛专业网站开发_十大免费跨境网站_上海搜索引擎优化seo_网站推广软件下载

2024/10/31 13:18:07 来源:https://blog.csdn.net/weixin_54551388/article/details/143175719  浏览:    关键词:青岛专业网站开发_十大免费跨境网站_上海搜索引擎优化seo_网站推广软件下载
青岛专业网站开发_十大免费跨境网站_上海搜索引擎优化seo_网站推广软件下载

1.关于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(首选)

Linux下使用ip addr命令可查看网络接口,包含IPv4和IPv6地址:

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:4e:37:21 brd ff:ff:ff:ff:ff:ffinet 192.168.20.200/24 brd 192.168.20.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe4e:3721/64 scope link noprefixroute valid_lft forever preferred_lft forever

IPv6分为本地关联IPv6和全局IPv6:本地关联的IPv6与网卡的物理地址(MAC地址)有关,不需要通过DHCP自动分配或者手工设置。全局IPv6适用于跨网络或跨路由器进行通信。

本文为了对比测试,也添加一个全局IPv6:

# ip -6 addr add 2022:1:0:0::db1/64 dev ens160

添加完后的信息显示如下:

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:4e:37:21 brd ff:ff:ff:ff:ff:ffinet 192.168.20.200/24 brd 192.168.20.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 2022:1::db1/64 scope global valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe4e:3721/64 scope link noprefixroute valid_lft forever preferred_lft forever

2.PostgreSQL 测试IPv6

首先配置postgresql.conf文件:

listen_addresses='*'

pg_hba.conf文件配置:​​​​​​​

host  all          all  ::0/0  scram-sha-256host  replication  all  ::0/0  scram-sha-256

重启完数据库服务后,进行测试。

使用psql工具进行IPv6连接认证:​​​​​​​

$ psql -h fe80::20c:29ff:fe4e:3721%ens160 -p 1700 -U postgres postgres=# \conninfoYou are connected to database "postgres" as user "postgres" on host "fe80::20c:29ff:fe4e:3721%ens160" (address "fe80::20c:29ff:fe4e:3721") at port "1700".

再使用全局IPv6连接认证:​​​​​​​

$ psql -h 2022:1:0:0::db1 -p 1700 -U postgres postgres=# \conninfoYou are connected to database "postgres" as user "postgres" on host "2022:1:0:0::db1" (address "2022:1::db1") at port "1700".

无论是本地还是全局IPv6,都可以连接成功。

再使用物理流复制协议测试连接:​​​​​​​

$ psql "dbname=postgres replication=database port=1700 user=postgres host=2022:1:0:0::db1" -c "IDENTIFY_SYSTEM"
$ psql "dbname=postgres replication=database port=1700 user=postgres host=fe80::20c:29ff:fe4e:3721%ens160" -c "IDENTIFY_SYSTEM"

都可以获得下面的系统信息:​​​​​​​

      systemid       | timeline |  xlogpos  |  dbname  ---------------------+----------+-----------+---------- 7411331880576156369 |        1 | 2/36517D8 | postgres(1 row)

再搭建standby节点进行测试:​​​​​​​

$ pg_basebackup -D data_standby -h 2022:1:0:0::db1 -p 1700$ pg_basebackup -D data_standby -h fe80::20c:29ff:fe4e:3721%ens160 -p 1700

基础备份使用本地或全局IPv6连接主库都可以。

再编辑standby节点的postgresql.conf文件,修改如下两个参数:​​​​​​​

port=1709primary_conninfo='host=fe80::20c:29ff:fe4e:3721%ens160 port=1700 user=postgres password=XXX application_name=node2'

创建standby.signal后,启动standby节点:​​​​​​​

$ touch data_standby/standby.signal$ pg_ctl start -D data_standby

接着在主库查询pg_stat_replication视图:​​​​​​​

postgres=# select usename,application_name,client_addr,sync_state from pg_stat_replication;
┌──────────┬──────────────────┬──────────────────────────┬────────────┐
│ usename  │ application_name │       client_addr        │ sync_state │
├──────────┼──────────────────┼──────────────────────────┼────────────┤
│ postgres │ node2            │ fe80::20c:29ff:fe4e:3721 │ async      │
└──────────┴──────────────────┴──────────────────────────┴────────────┘
(1 row)

primary_conninfo换成全局ipv6地址:​​​​​​​

port=1709primary_conninfo='host=2022:1:0:0::db1 port=1700 user=postgres password=XXX application_name=node2'

查询pg_stat_replication视图,replication连接也是正常状态:​​​​​​​

postgres=# select usename,application_name,client_addr,sync_state from pg_stat_replication;
┌──────────┬──────────────────┬─────────────┬────────────┐
│ usename  │ application_name │ client_addr │ sync_state │
├──────────┼──────────────────┼─────────────┼────────────┤
│ postgres │ node2            │ 2022:1::db1 │ async      │
└──────────┴──────────────────┴─────────────┴────────────┘
(1 row)

最后再测试逻辑复制,逻辑复制的发布与订阅端搭配过程,本文省略,直接测试订阅端的订阅创建过程。​​​​​​​

create subscription sub_all  connection 'hostaddr=fe80::20c:29ff:fe4e:3721%ens160 port=1700 user=postgres password=XXX dbname=logical_src' publication pub_all;

发布端查询pg_stat_replication视图信息:​​​​​​​

postgres=# select usename,application_name,client_addr,sync_state from pg_stat_replication;
┌──────────┬──────────────────┬──────────────────────────┬────────────┐
│ usename  │ application_name │       client_addr        │ sync_state │
├──────────┼──────────────────┼──────────────────────────┼────────────┤
│ postgres │ sub_all          │ fe80::20c:29ff:fe4e:3721 │ async      │
└──────────┴──────────────────┴──────────────────────────┴────────────┘
(1 row)

同样再使用全局ipv6进行测试:​​​​​​​

create subscription sub_all  connection 'hostaddr=2022:1:0:0::db1 port=1700 user=postgres password=XXX dbname=logical_src' publication pub_all;

发布端查询pg_stat_replication视图信息:​​​​​​​

postgres=# select usename,application_name,client_addr,sync_state from pg_stat_replication;┌──────────┬──────────────────┬─────────────┬────────────┐│ usename  │ application_name │ client_addr │ sync_state │├──────────┼──────────────────┼─────────────┼────────────┤│ postgres │ sub_all          │ 2022:1::db1 │ async      │└──────────┴──────────────────┴─────────────┴────────────┘(1 row)

小结:PostgreSQL全面支持IPv6的监听、流复制、逻辑复制及客户端工具的使用。

3.MogDB 测试IPv6

首先配置postgresql.conf文件:

listen_addresses='*'

pg_hba.conf文件配置:​​​​​​​

host  all          all  ::0/0  sha256host  replication  all  ::0/0  sha256

重启完数据库服务后,进行测试。

create user repuser sysadmin password ‘Admin@1234’;

使用gsql工具进行IPv6连接认证:​​​​​​​

$ gsql -h fe80::20c:29ff:fe4e:3721%ens160 -p 6432 -U repuser postgres MogDB=> \conninfoYou are connected to database "postgres" as user "repuser" on host "fe80::20c:29ff:fe4e:3721%ens160" at port "6432".

再使用全局IPv6连接认证:​​​​​​​

$ gsql -h 2022:1:0:0::db1 -p 6432 -U repuser postgres MogDB=> \conninfoYou are connected to database "postgres" as user "repuser" on host "2022:1:0:0::db1" at port "6432".

无论是本地还是全局IPv6,都可以连接成功。

再使用物理流复制协议测试连接:​​​​​​​

$ gsql "dbname=postgres replication=database port=6432 user=repuser host=2022:1:0:0::db1" -c "IDENTIFY_SYSTEM"
The 'replication' parameter is not supported by gsql.

gsql客户端暂时还不支持replication连接。

搭建standby节点进行测试:​​​​​​​

$ mkdir data_standby$ chmod 700 data_standby$ gs_basebackup -D data_standby -h 2022:1:0:0::db1 -p 6432$ gs_basebackup -D data_standby -h fe80::20c:29ff:fe4e:3721%ens160 -p 6432

基础备份使用本地或全局IPv6连接主库都可以。

分别编辑主备节点postgresql.conf文件,修改replconninfo1参数。

主库postgresql.conf文件,参考配置如下:​​​​​​​

port=6432
application_name=node1
replconninfo1 = 'localhost=2022:1:0:0::db1 localport=6433 localheartbeatport=6435 localservice=6439 remotehost=2022:1:0:0::db1 remoteport=7433 remoteheartbeatport=7435 remoteservice=7439'

备库postgresql.conf文件,参考配置如下:​​​​​​​

port=7432application_name=node2replconninfo1 = 'localhost=2022:1:0:0::db1 localport=7433 localheartbeatport=7435 localservice=7439 remotehost=2022:1:0:0::db1 remoteport=6433 remoteheartbeatport=6435 remoteservice=6439'

启动主备服务后,使用gs_ctl query查看节点状态信息:

​​​​​​​

 Receiver info:              receiver_pid                   : 2943261        local_role                     : Standby        peer_role                      : Primary        peer_state                     : Normal        state                          : Normal        sender_sent_location           : 0/A0010A8        sender_write_location          : 0/A0010A8        sender_flush_location          : 0/A0010A8        sender_replay_location         : 0/A0010A8        receiver_received_location     : 0/A0010A8        receiver_write_location        : 0/A0010A8        receiver_flush_location        : 0/A0010A8        receiver_replay_location       : 0/A0010A8        sync_percent                   : 100%        channel                        : 2022:1::db1:60032<--2022:1::db1:6433

主库查询pg_stat_replication视图:​​​​​​​

MogDB=# select usename,application_name,client_addr,sync_state from pg_stat_replication;usename |      application_name       | client_addr | sync_state 
---------+-----------------------------+-------------+------------mog     | WalSender to Standby[node2] | 2022:1::db1 | Sync
(1 row)

主备库的replconninfo1换成本地ipv6地址,再进行测试。

使用gs_ctl query查看节点状态信息:

 Receiver info:              receiver_pid                   : 3005116        local_role                     : Standby        peer_role                      : Primary        peer_state                     : Normal        state                          : Normal        sender_sent_location           : 0/A001C88        sender_write_location          : 0/A001C88        sender_flush_location          : 0/A001C88        sender_replay_location         : 0/A001C88        receiver_received_location     : 0/A001C88        receiver_write_location        : 0/A001C88        receiver_flush_location        : 0/A001C88        receiver_replay_location       : 0/A001C88        sync_percent                   : 100%        channel                        : fe80::20c:29ff:fe4e:3721:60736<--fe80::20c:29ff:fe4e:3721:6433

pg_stat_replication视图显示信息如下:

MogDB=# select usename,application_name,client_addr,sync_state from pg_stat_replication;usename |      application_name       |       client_addr        | sync_state 
---------+-----------------------------+--------------------------+------------mog     | WalSender to Standby[node2] | fe80::20c:29ff:fe4e:3721 | Sync
(1 row)

最后测试逻辑复制,逻辑复制的发布与订阅端搭配过程,本文省略,直接测试订阅端的订阅创建过程。​​​​​​​

create subscription mysubconnection 'host=fe80::20c:29ff:fe4e:3721%ens160 port=6433 user=repuser password=XXX dbname=logical_src' publication mypub;

注意需要使用流复制端口6433(主端口port + 1)。​​​​​​​

create subscription mysub
connection ‘host=2022:1:0:0::db1 port=6433 user=repuser password=Admin@1234 dbname=postgres’ publication mypub_in_1610;

发布端pg_stat_replication视图无信息,不过pg_stat_activity能查到订阅端的连接信息:​​​​​​​

MogDB=# select datname,usename,application_name,client_addr,client_port from pg_stat_activity where application_name ='subscription';datname  | usename | application_name |       client_addr        | client_port 
----------+---------+------------------+--------------------------+-------------postgres | repuser | subscription     | fe80::20c:29ff:fe4e:3721 |       60922
(1 row)

创建订阅时连接主库的地址换成全局ipv6地址,再进行测试,pg_stat_activity同样能查到订阅端的连接信息:​​​​​​​

MogDB=# select datname,usename,application_name,client_addr,client_port from pg_stat_activity where application_name ='subscription';datname  | usename | application_name | client_addr | client_port 
----------+---------+------------------+-------------+-------------postgres | repuser | subscription     | 2022:1::db1 |       34234
(1 row)

4.总结

从监听、物理流复制、逻辑复制的对比测试来看,PostgreSQL 与 MogDB 支持IPv6本地关联地址和全局地址。

关于作者

彭冲,云和恩墨技术研究院高级技术顾问,专注于 MogDB、openGauss、PG 数据库新技术、新特性及行业发展,对数据库版本新特性有丰富的实践研究。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com