查网站域名备案查询,wordpress自带企业主题,信息安全网站建设方案书,扬中信息网同步流复制过程 第一步#xff1a;主库#xff08;primary端#xff09;第二步#xff1a;备库#xff08;standby端#xff09;第三步#xff1a;主库#xff08;primary端#xff09;其他1.主库IP变更2.主库上做回归测试时会卡住并出现以下提示 参考链接#xff1a… 同步流复制过程 第一步主库primary端第二步备库standby端第三步主库primary端其他1.主库IP变更2.主库上做回归测试时会卡住并出现以下提示 参考链接
POSTGRES 15 流复制搭建主备
PostgreSQL 14.5复制流同步复制
postresql同步流复制-多备库
同步可以一主一备但是如果备库损坏会导致主库部分数据丢失异步流复制则不会
此过程同时也包含了“异步”流复制的设置过程
第一步主库primary端
设置归档相关参数如果已经开启了同步流复制和归档模式archive_mode on但是没有对归档相关参数进行设置主库会一直发出警告WARNING: archive_mode enabled, yet archiving is not configured也是因为没有设置配置文件的archive_command和archive_timeout导致的
# 在主库数据目录$PGDATA下创建目录arch_log
[postgreslocalhost data]$ mkdir arch_log# 归档命令写成bash文件或者直接把这一长串写到下一步的postgresql.conf文件的archive_command都可以(这里演示的是bash文件)
[postgreslocalhost data]$ vim archive.sh
# 文件内容如下如果环境变量没有配置$PGDATA就写自己主库数据目录的绝对地址
cp --preservetimestamps $1 $PGDATA/arch_log/$2 ; find $PGDATA/arch_log -type f -mtime 30 | xargs rm -fr;
#假设$PGDATA表示/pgdata/15.4/poc/data/则文件内容为
# cp --preservetimestamps $1 /pgdata/15.4/poc/data/arch_log/$2 ; find /pgdata/15.4/poc/data/arch_log -type f -mtime 30 | xargs rm -fr;修改配置文件postgresql.conf和pg_hba.conf
[postgreslocalhost ~]$ cd /pgdata/15.4/poc/data/[postgreslocalhost data]$ vim pg_hba.conf
#最后一行加上
host replication all 0.0.0.0/0 md5[postgreslocalhost data]$ vim postgresql.conf
listen_addresses * # 监听备库们的地址这个很重要
max_wal_senders 10 # 必须设置为非零值且比备库数量多
wal_level replica # 参数设置为“replica”或“logical”。
min_wal_size 2GB # 默认值太小备库容易失效增大该值这里相应的max_wal_size记得改成比min大的值
full_page_writes on # 必须打开
archive_mode on
archive_command /bin/bash archive.sh %p %f # 这里刚刚新建了bash文件就写文件没有的话把文件里的命令直接写上去是一样的
archive_timeout 1800# restart重启使以上配置生效
[postgreslocalhost data]$ pg_ctl -D /pgdata/15.4/poc/data/ restart创建”流复制“用户
[postgreslocalhost data]$ psql -p 5432 -d postgres
psql (15.4)
Type help for help.postgres# create user replicator1 replication login connection limit 5 password cc;
CREATE ROLEsudo关闭防火墙响应端口的限制因为备库通过 端口要访问主库的内容
[postgreslocalhost ~]$ su - root
密码
上一次登录三 1月 3 15:12:51 CST 2024pts/0 上
# 注意这个是临时关闭主库所在主机重启后防火墙又会自动打开
[rootlocalhost ~]# systemctl stop firewalld.service
# 永久性措施到root下设置防火墙放行端口这里注意如果主备库在同一台主机要修改其中一个端口号为非5432不然会冲突设置完后重新加载防火墙
[rootlocalhost ~]# firewall-cmd --permanent --zonepublic --add-port5432/tcp
success
[rootlocalhost ~]# firewall-cmd --reload
success记住primary的ip地址、刚刚创建的”流复制“用户的名字和密码到备库去继续操作
第二步备库standby端
新建备库路径、并pg_basebackup备份主库数据
[postgreslocalhost ~]$ mkdir /pgdata/15.4/poc/data_standby/# 递归修改路径所有者
[postgreslocalhost ~]$ chown -R postgres /pgdata/15.4/poc/data_standby# 备份主库数据pg_basebackup -h 主库的ip地址 -U 主库上的”流复制“用户的名字
# 然后输入主库上的”流复制“用户的密码
[postgreslocalhost ~]$ pg_basebackup -h 192.168.44.129 -U replicator1 -F p -P -X stream -R -D /pgdata/15.4/poc/data_standby/ -l backup20240103
Password:
31799/31799 kB (100%), 1/1 tablespace
# 同一台虚拟机同时做主备份的备份命令pg_basebackup -R -X stream -F p -U usera -D /pgdata/15.3/poc/data_standby/ -h 127.0.0.1 -p 5432 -P -v
# pg_basebackup选项的相关含义见第一个参考链接# 必须要chmod递归修改备库下所有文件权限均为0700或者0750不然启动pg_ctl启动备库时会报如下错
# 2024-01-03 15:39:41.440 CST [7704] FATAL: data directory /pgdata/15.4/poc/data_standby has invalid permissions
# 2024-01-03 15:39:41.440 CST [7704] DETAIL: Permissions should be urwx (0700) or urwx,grx (0750).
# stopped waiting
# pg_ctl: could not start server
[postgreslocalhost ~]$ chmod -R 0700 /pgdata/15.4/poc/data_standby修改配置文件postgresql.conf
[postgreslocalhost ~]$ vim /pgdata/15.4/poc/data_standby/postgresql.conf
# 仅仅修改hot_standby on之后:wq保存退出vim执行启动备库pg_ctl -D /pgdata/15.4/poc/data_standby start回到主库psql执行select * from pg_stat_replication;就可以看到已经搭建好的异步流复制
hot_standby on# 修改完记得restart重启使其生效
[postgreslocalhost data_standby]$ pg_ctl -D /pgdata/15.4/poc/data_standby restart异步流复制到这里就完成了
修改配置文件postgresql.auto.conf
[postgreslocalhost data_standby]$ vim postgresql.auto.conf
# 修改主库连接的信息注意application_name这个名字不要和其他备库重复了
# user和password分别填主库创建的”流复制“用户的名字和密码
# sslcompression是0或者1都行
primary_conninfo application_namepostgresql2 userreplicator1 passwordcc host10.10.100.54 port5432 sslmodedisable sslcompression1# 修改完记得restart重启使其生效第三步主库primary端
修改配置文件postgresql.conf
[postgreslocalhost ~]$ vim /pgdata/15.4/poc/data/postgresql.conf# ANY 1表示有任意一台备库进行同步之后即可返回可根据需要修改目前只有一个备库所以这么写
# 括号里写备库刚刚在postgresql.auto.conf配置的 application_name
synchronous_standby_names ANY 1 (postgresql2)
# 如果有多个备库备库的application_name分别叫 postgresql1postgresql2 …可以写成FIRST格式
# synchronous_standby_names postgresql1,postgresql2
# FIRST语法下放在第一个的备库是同步主库其他为同步备库同步的节点值为sync异步的节点值为asyn被匹配为同步的节点但是被个数限制的值为 potential
# ANY语法下值为quorum表现上没有同步和异步一说一个写事务主节点收到指定数量的standy节点的反馈接着就会给客户端返回事务执行成功。
wal_level hot_standby
synchronous_commit on
hot_standby_feedback true
# hot_standby on # 保持默认on就行# 修改完记得restart重启使其生效
[postgreslocalhost ~]$ pg_ctl -D /pgdata/15.4/poc/data/ restart回去重启一下备库主库这边应该就会提示
2024-01-03 16:15:31.677 CST [11550] LOG: standby postgresql2 is now a candidate for quorum synchronous standby验证“同步”流复制是否开启成功备库开启成功时才会有相应的记录关闭备库查询不到
[postgreslocalhost ~]$ psql
psql (15.4)
Type help for help.postgres# \x
Expanded display is on.
postgres# select * from pg_stat_replication;
-[ RECORD 1 ]----------------------------------
pid | 11550
usesysid | 78253
usename | replicator1
application_name | postgresql2
client_addr | 192.168.44.128
client_hostname |
client_port | 50736
backend_start | 2024-01-03 16:15:31.65528908
backend_xmin |
state | streaming
sent_lsn | 0/240004B8
write_lsn | 0/240004B8
flush_lsn | 0/240004B8
replay_lsn | 0/240004B8
write_lag | 00:00:00.000643
flush_lag | 00:00:00.001356
replay_lag | 00:00:00.002426
sync_priority | 1
sync_state | quorum
reply_time | 2024-01-03 16:15:31.6982408# 关于sync_state这里的呈现与主库配置文件postgresql.conf中的synchronous_standby_names其他
1.主库IP变更
修改备库的配置文件postgresql.conf把配置项primary_conninfo中的host地址修改为主库最新IP地址即可记得restart重新加载conf文件。
2.主库上做回归测试时会卡住并出现以下提示
2024-01-05 11:21:45.754 CST [3969] WARNING: canceling wait for synchronous replication due to user request
2024-01-05 11:21:45.754 CST [3969] DETAIL: The transaction has already committed locally, but might not have been replicated to the standby.开启任一备库即可