循序渐进丨MogDB 与 PostgreSQL 对比测试IPv6

news2024/10/24 12:05:50

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 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:4e:37:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.200/24 brd 192.168.20.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 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 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:4e:37:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.200/24 brd 192.168.20.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 2022:1::db1/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 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 mysub
 connection '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 数据库新技术、新特性及行业发展,对数据库版本新特性有丰富的实践研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu中使用cmake编译报错No CMAKE_CXX_COMPILER could be found.的解决方法

ubuntu中使用cmake编译报错No CMAKE_CXX_COMPILER could be found.的解决方法 No CMAKE_CXX_COMPILER could be found.Could NOT find CUDA (missing: CUDA_NVCC_EXECUTABLE CUDA_CUDART_LIBRARY)Could not find a package configuration file provided by "OpenCV" …

【SQL|大数据|数据清洗|过滤】where条件中 “ != “ 和 “ NOT IN() ” 对NULL的处理

对数据进行清洗过滤的时候&#xff0c;NULL往往是一个很特殊的存在&#xff0c;对NULL值的存在通常有以下三种方式 1、保留NULL 2、过滤掉NULL 3、将NULL替换为其他符合业务需求的默认常量 下面是一些常用处理NULL的方式&#xff1a; 如下图所示数据源&#xff1a; car_vin&…

android openGL ES详解——缓冲区VBO/VAO/EBO/FBO

目录 一、缓冲区对象概念 二、分类 三、顶点缓冲区对象VBO 1、概念 2、为什么使用VBO 3、如何使用VBO 生成缓冲区对象 绑定缓冲区对象 输入缓冲区数据 更新缓冲区中的数据 删除缓冲区 4、VBO应用 四、顶点数组对象VAO 1、概念 2、为什么使用VAO 3、如何使用VAO…

ai修复照片工具哪个好?在线将模糊图像变清晰就用它

最近想尝试学习一下复古照片的拍摄风格&#xff0c;一波翻箱倒柜的操作翻出了以前家里拍的照片&#xff0c;却发现有些照片出现了氧化褪色&#xff0c;看不清原本图像的情况。 想看清晰一点的照片却找不到原本的底片&#xff0c;没办法再次冲洗新的相纸出来&#xff0c;该怎么…

Generative AI project lifecycle 生成式人工智能项目的全生命周期

这篇文章&#xff0c;你将学习到开发和部署一个由LLM驱动的应用程序所需的技术。在你将了解一个生成式AI项目的全生命周期&#xff0c;这可以帮助指导你完成这项工作。这个框架映射出了从概念到发布所需的任务。这里有一个整体生命周期的图表。我们将逐个阶段地讨论它。 在任何…

一文说明MySQL索引

最近研究了一下关于MySQL索引方面的面试题&#xff0c;以及可能拓展的问题&#xff0c;与大家分享 索引 在MySQL中&#xff0c;常见的索引类型包括以下几种&#xff1a; 普通索引&#xff08;INDEX&#xff09; &#xff1a;这是最基本的索引类型&#xff0c;可以包含一个或多…

基于springboot+vue实现的助学兼职系统(源码+L文+ppt)4-092

基于springbootvue实现的助学兼职系统&#xff08;源码L文ppt&#xff09;4-092 第4章 系统设计 4.1 总体功能设计 一般学生、招聘公司和管理者都需要登录才能进入助学兼职系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者和管理者,一般使…

探索 Python 中的 XML 转换利器:xml2dict

文章目录 **探索 Python 中的 XML 转换利器&#xff1a;xml2dict**一、背景介绍二、xml2dict 是什么&#xff1f;三、如何安装 xml2dict&#xff1f;四、基本用法五、实际应用场景六、常见问题及解决方案七、总结 探索 Python 中的 XML 转换利器&#xff1a;xml2dict 一、背景…

构建智能暖箱监控系统:基于C#和WPF的完整指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

鸿蒙前端-1. 层叠效果

代码Stack&#xff08;{alignContent&#xff1a;Alignment.Center}&#xff09;{ Item1&#xff08;&#xff09; Item2&#xff08;&#xff09; Item3&#xff08;&#xff09;} 默认是居中对齐&#xff0c;后面的Item的优先级比前面的要高。 特点&#xff1a;代码简洁&…

stm32实现esp8266连接到TCP服务器(二)

1.2 连接到TCP Server 1.2.1 使用网络助手&#xff0c;设立TCP服务器 ​ 编辑 1.2.2 连接服务器 ATCIPSTART"TCP","192.168.1.18",8080 //指令&#xff0c;注意双引号逗号都要半角(英文)输入 CONNECT //结果&#xff1a;成功 OK //结果&#xff1a;成功 …

08 实战:色彩空间展示(本程序以视频为主)

程序效果如下: 我在这里讲解RGB和YCbCr的原理: 一、RGB颜色空间 1.1 基本概念 RGB颜色空间是一种最基础和常用的颜色表示方式,它基于人眼感知色彩的三原色原理。RGB分别代表: R(Red):红色G(Green):绿色B(Blue):蓝色通过这三种基本颜色的不同组合,可以产生人眼…

c#编写的各类应用程序、类库的引用(黑白盒)

001 课程简介&#xff0c;C# 语言简介&#xff0c;开发环境准备 (yuque.com)https://www.yuque.com/yuejiangliu/dotnet/timothy-csharp-001 一个Solution里包含多个Project 一、见识 C# 编写的各类应用程序 二、类库的引用&#xff08;黑/白盒引用&#xff09; 1、黑盒引用&a…

杨辉三角算法

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]]提示: 1 <…

2024ideaUI切换和svn与git的切换,svn的安装和配置,idea集成svn ,2024-10-18日

2024-10-18日 2024的UI实在很不舒服&#xff0c;隐藏了很多按键&#xff1b; 第一步&#xff1a; 视图 -》 外观 -》 工具栏选出来&#xff1b; 结果出来&#xff1a; 运行的按键和设置的按钮 第二步 点击设置的按钮&#xff0c;选择最后一个&#xff0c;重启就行 结果 舒服&…

LabVIEW提高开发效率技巧----用户权限控制

在LabVIEW开发中&#xff0c;用户权限控制是一个重要的设计模块&#xff0c;尤其在多用户系统中&#xff0c;它可以确保数据安全并控制不同用户的操作权限。为了实现用户权限控制&#xff0c;可以通过角色与权限管理模块来进行设计和实施。以下将从多个角度详细说明如何在LabVI…

Quarto ppt模板制作与Rstudio git连接

本篇记录下当前ppt演示中比较流行的quarto document使用情况以及Rstudio与git相连接的一些实操。 1 Quarto ppt模板制作 1.1 Quarto简介&#xff08;来自Kimi&#xff09; Quarto 是一个由 RStudio 的母公司 Posit 团队开发的开源科学和技术出版系统&#xff0c;它建立在 Pan…

Vue3 Composition Admin——基于 Vue 3 的现代化后台管理模板

Vue3 Composition Admin,这是一个基于 Vue 3 的现代化后台管理模板,旨在为开发者提供一个高效、灵活的开发基础。借助 Vue 3 的 Composition API,我们构建了一个可扩展的架构,使得代码更加清晰易读,同时提升了开发效率。 本项目集成了丰富的 UI 组件、动态路由管理和权限…

Android OpenGL光照效果

在计算机图形学领域&#xff0c;光照仿真是一个重要的研究领域&#xff0c;它对游戏画面的提升、电影和电视节目中的电脑生成图像&#xff08;CGI&#xff09;等方面产生了显著影响。通过使用不同的光照算法&#xff0c;我们可以改变场景的外观&#xff0c;例如模拟从白天到夜晚…

安装好的 Nginx 增加 nginx-module-vts 模块

目录 1. nginx-module-vts 准备 2.查看已安装的的 nginx 编译参数 3. 重新编译 nginx 添加 nginx-module-vts 模块 4. 验证 1. nginx-module-vts 准备 # 解压 unzip nginx-module-vts-master.zip # 将解压包移动到/usr/local/目录 mv nginx-module-vts-master /usr/local/ …