使用配置
数据库 postgresql-15.3
操作系统 centos-7
host | port | dbname | datadire | |
主库 | 10.0.0.198/24 | 5432 | postgres | /home/postgres/pg/data |
从库 | 10.0.0.199/24 | 25432 | postgres | /home/postgres/pgback |
首先主从之间的白名单和监听要打开
目录
主库配置
在主库上修改postgresql.conf相关参数
listen_addresses = '*'
max_wal_senders = 10
wal_level = replica 或者使用logcial
min_wal_size=800MB
hot_standby = off 默认情况下是“off” 在从库启动后还会再次做介绍
这些参数的设定都需重启服务才能生效,所以在部署的时候相关参数就需要设定好。
另外,min_wal_size参数的默认值为“80MB”,该值通常太小,很容易导致备库失效,
在主库上修改pg_hba.conf相关参数增加一下两条内容
ip地址也可以使用0/0 替代 代表任意IP地址。
可以指定用户 也可以使用ALL 这个用户权限必须具备replica tion权限
主库中创建该用户
create user pgback with replication;
备库配置
在备库上生成基础备份
- -h:指定要连接的服务器的主机名或IP地址。
- -U:指定连接使用的用户名。
- -Fp:指定备份的格式。在这种情况下,备份以纯文本格式存储。
- -P:指定在备份过程中显示进度信息。
- -X stream:指定备份的流式传输方法。
- -R:指定包括所有必需的WAL文件以进行一致性备份。
- -D:指定备份存储的目录。
基础备份完成
在备份路径下/home/postgres/pgback/postgresql.auto.conf 文件可以查看备份时链接的相关信息。
当pg_basebackup做基础备份时,没有设置-R参数相关的链接信息也就不会被记录到/home/postgres/pgback/postgresql.auto.conf 文件中
启动从库
pg_ctl -D pgback/ start
此时的从库是一个只读状态,
从库被启动后再数据目录下还会生成一个standby.signal 的标识文件
用于指示 PostgreSQL 数据库引擎当前服务器是一个备用服务器,并通过流复制进行数据复制。
删除了 standby.signal 文件,数据库再次重启将不再被识别为备用服务器,并且流复制将停止。便需要再创建一个空的 standby.signal 文件,再重启数据服务。
---查看主从进程区别进程
ps -ef |grep postgres ----查看主从进程区别进程
主库进程
主库进程会多一个walsender 进程 并可以知道从库的IP地址、库名以及wal日志发送的LSN发送节点。
从库进程
从库会有一个walreceiver 进程,并告知当前接收的LSN接收节点
查看流复制状态
主库中可以使用 视图pg_stat_replication查看当前流复制的状态以及相关节点信息
select * from pg_stat_replication;
通过sync_state字段 显示为async 说明 我们现在创建的流复制是一个异步流复制状态,我会在下一篇文章继续给大家讲同步流复制的搭建
- pid:主库walsender进程ID。
- usesysid:登录到这个 WAL 发送进程的用户的 OID。
- usename:登录到这个 WAL 发送进程的用户名。
- application_name:连接到从库服务器的应用程序的名称。
- client_addr:连接到从库服务器的客户端的IP地址。
- client_hostname:连接上的客户端的主机名,由一次对client_addr的逆向 DNS 查找报告。 这个域将只对 IP 连接非空,并且只有在 log_hostname被启用时非空。。
- client_port:客户端用来与这个 WAL 发送进程通讯的 TCP 端口号,如果使用 Unix 套接字则为-1
。
- backend_start:这个进程开始的时间,即客户端是何时连接到这个WAL 发送进程的(从库数据库的服务被拉起,就会被记录到这个时间)。
- backend_xmin:从库服务器需要保留的最旧事务ID。
- state:当前的 WAL 发送进程状态。 可能的值是:
startup: 这个WAL发送器正在启动。
catchup: 这个WAL发送者连接的从库服务器正在赶上主服务器。
streaming: 在其连接的从库服务器赶上主服务器之后,这个WAL发送方正在流化变化。
backup: 这个WAL发送器正在发送一个备份。
stopping: 这个WAL发送器正在停止。
- sent_location:已发送到从库服务器的WAL流中的位置(LSN)。
- write_location:已写入从库服务器磁盘上的WAL流中的位置(LSN)。
- flush_location:已刷新到从库服务器磁盘上的WAL流中的位置(LSN)。
- replay_location:已在从库服务器上重放的WAL流中的位置(LSN)。
- sync_priority:用于同步复制的从库服务器的优先级。
- sync_state:从库服务器的同步状态。 可能的值是:
async: 从库服务器是异步的。
potential: 从库服务器现在是异步的,但可能在当前的同步后备失效时变成同步的。
sync: 从库服务器服务器是同步的。
quorum: 从库服务器服务器被当做规定数量后备服务器的候选。
reply_time : 从库服务器收到的最后一条回复信息的发送时间。
从库中使用 pg_stat_wal_receiver 视图 查看流复制相关节点状态
select * from pg_stat_wal_receiver ;
- pid:从库walreceiver的进程ID。
- status:WAL接收器进程的活动状态(如果看到的流复制状态“state”的值不是“streaming”,也说明备库的流复制有问题。 )。
- receive_start_lsn:WAL接收器启动时使用的第一个写入前日志(WAL)位置。
- receive_start_tli:WAL接收器启动时使用的第一个时间线号。
- written_lsn:已接收并写入磁盘但尚未刷新的最后一个WAL位置。
- flushed_lsn:已接收并刷新到磁盘的最后一个WAL位置。
- received_tli:已接收并刷新到磁盘的最后一个WAL位置的时间线号。
- last_msg_send_time:从源WAL发送者接收到的最后一条消息的发送时间。
- last_msg_receipt_time:从源WAL发送者接收到的最后一条消息的接收时间。
- latest_end_lsn :向源头WAL发送器报告的最后的预写式日志位置
- latest_end_time:这个WAL接收器使用的复制槽的名称
- sender_hos:这个WAL接收器连接到的PostgreSQL实例的主机。 这可以是主机名、IP地址,或者目录路径,如果连接是通过Unix套接字进行的。(路径的情况可以区分,因为它总是以/开头的绝对路径。)
- sender_port:这个WAL接收器连接的PostgreSQL实例的端口号。
- conninfo :这个WAL接收器使用的连接字符串,对安全敏感的字段进行了模糊处理。
使用pg_controldata 分别查看主从库的状态
还可以通过函数pg_is_in_recovery();判断时候属于从库