在Percona Distribution for PostgreSQL中部署备份和容灾解决方案雷竞技下载官网PostgreSQL的Percona发行版中的备份和灾难恢复雷竞技下载官网。
部署设置主机名
Cat /etc/hostname pg-primary
Cat /etc/hostname pg-primary
Cat /etc/hostname pg-primary
Cat /etc/hostname pg-repo
Cat /etc/hostname pg-secondary
节点要在网络中无缝通信,需要将它们的主机名解析为它们的IP地址设置文件。(或者,您可以在您的内部DNS服务器中进行适当的条目)
的设置申请pg-primary节点看起来是这样的:
127.0.1.1 pg-primary pg-primary 127.0.0.1 localhost 10.104.0.5 pg-repo ' ' '
的设置在pg-repoNode看起来是这样的:
' ' ' 127.0.1.1 pg-repo pg-repo 127.0.0.1 localhost 10.104.0.3 pg-primary 10.104.0.4 pg-secondary ' ' '
的设置在pg-secondary节点如下图所示:
127.0.1.1 pg-secondary pg-secondary 127.0.0.1 localhost 10.104.0.3 pg-primary 10.104.0.5 pg-repo ' ' '
美元passwdpostgres
输入新密码并确认。
设置密码后,编辑/etc/ssh/sshd_config存档并确保PasswordAuthentication变量设置为是的。
PasswordAuthentication是的
在pg-repo节点,重新启动sshd服务。如果不重新启动,SSH服务器将不允许您在添加密钥时使用密码连接到它。
美元sudo服务sshd重新启动
在pg-primary节点,生成SSH密钥对,并将公钥添加到pg-repo节点。
重要的
运行命令postgres用户。
生成SSH密钥:
美元ssh - keygen- trsa生成公共/私人rsa关键对。输入文件在哪一个来保存的关键(/root/.ssh/id_rsa):输入密码(空为没有密码):输入相同密码再次:你的识别有被保存在/root/.ssh/id_rsa你的公共关键有被保存在/root/.ssh/id_rsa.酒吧的关键指纹是:……
将公钥复制到pg-repo节点:
美元ssh-copy-id-我~ / . ssh / id_rsa . pubpostgres@pg-repo /usr/bin/ssh-copy-id:信息:源的关键(年代)来是安装:“/ root / . ssh / id_rsa . pub”/usr/bin/ssh-copy-id:信息:尝试来日志在与的新关键(年代),来过滤器出任何那是已经安装/usr/bin/ssh-copy-id:信息:1关键(年代)保持来是安装--如果你是提示现在它是来安装的新键postgres@pg-repo的密码:添加的键数:1现在尝试登录到机器,使用:"ssh 'postgres@pg-repo'”并检查以确保只添加了您想要的键。
命令中运行以下命令,以验证一切都按预期工作pg-primary节点。
美元sshpostgres@pg-repo
您应该能够连接到pg-repo终端没有密码。
重复开始的SSH连接pg-repo来pg-primary以确保无密码SSH正常工作。
pg-repo和pg-secondary用同样的方法。这将允许pg-repo将备份恢复到pg-secondary。雷竞技下载官网percona-release。
启用存储库:
美元sudo雷竞技下载官网percona-release设置ppg14
为Postgre雷竞技下载官网SQL包安装Percona发行版
美元sudo恰当的安装雷竞技下载官网percona-postgresql-14可能是
美元sudo百胜安装雷竞技下载官网percona-postgresql14-server
请注意
在Debian和Ubuntu上,配置文件的路径为/etc/postgresql/14/main/postgresql.conf。
RHEL和CentOS操作系统的配置文件路径为/var/lib/pgsql/14/data/。
编辑postgresql.conf配置文件包括以下更改:
Archive_command = 'pgbackrest——stanza=prod_backup archive-push %p' archive_mode = on listen_addresses = '*' log_line_prefix = " max_wal_sender = 3 wal_level =副本
保存更改后,重新启动PostgreSQL。
美元sudosystemctl重新启动postgresql
美元sudoapt-get安装雷竞技下载官网percona-pgbackrest
美元sudo百胜安装雷竞技下载官网percona-pgbackrest
pgBackRest配置文件
美元sudomkdir- p- m770/var/log/pgbackrest美元sudo乔恩postgres: postgres/var/log/pgbackrest
属性的位置和权限pgBackRest配置文件:
美元sudomkdir- p/etc/pgbackrest美元sudomkdir- p/etc/pgbackrest/conf.d $sudo触摸/etc/pgbackrest/pgbackrest.conf美元sudo修改文件权限640/etc/pgbackrest/pgbackrest.conf美元sudo乔恩postgres: postgres/etc/pgbackrest/pgbackrest.conf美元sudomkdir- p/home/pgbackrest美元sudo修改文件权限postgres: postgres/home/pgbackrest
pgBackRest主节点的配置文件
[global] repo1-host=pg-repo repo1-host-user=postgres process-max=2 log-level-console=info log-level-file=debug [prod_backup] pg1-path=/var/lib/postgresql/14/main
你可以看到pg1-path属性的prod_backup节已设置为PostgreSQL数据文件夹。
pgBackRest远程备份存储库节点中的配置文件
[global] repo1-path=/home/pgbackrest/pg_backup repo1-retention-full=2 process-max=2 log-level-console=info log-level-file=debug start-fast=y stop-auto=y [prod_backup] pg1-path=/var/lib/postgresql/14/main pg1-host=pg-primary pg1-host-user=postgres pg1-port = 5432
pgBackRest节中的备份存储库节点
美元sudo- upostgrespgbackrest——节=prod_backupstanza-create202111-0711: 08:18.157P00信息:stanza-create命令开始236:——exec-id=155883-2277年a3e7——log-level-console=信息——log-level-file=从——pg1-host=pg-primary——pg1-host-user=postgres——pg1-path=/var/lib/postgresql/14/main——pg1-port=5432——repo1-path=/home/pgbackrest/pg_backup——节=prod_backup202111-0711: 08:19.453P00信息:stanza-create为节“prod_backup”在repo1202111-0711: 08:19.566P00信息:stanza-create命令结束:完成成功(1412毫秒)
成功创建节之后,您可以尝试用于灾难恢复的不同用例。
pgBackRest用例1:创建备份pgBackRest
创建表格客户(id整数,名字文本);插入成客户值(1,“约翰。”);插入成客户值(2,“玛莎”);插入成客户值(3.,“玛丽”);
对数据库实例进行完全备份。运行以下命令pg-repo节点:
美元pgbackrest- upostgres——节=prod_backup备份——类型=完整的
如果需要增量备份,可以省略类型属性。默认情况下,pgBackRest除了集群的第一个备份始终是完全备份之外,始终采用增量备份。
如果需要差异备份,请使用diff为类型字段:
美元pgbackrest- upostgres——节=prod_backup备份——类型=diff
美元rm射频/var/lib/postgresql/14/main/*
执行以下命令恢复备份。
postgresql实例美元sudosystemctl停止postgresql
美元pgbackrest- upostgres——节=prod_backup恢复
postgresql实例美元sudosystemctl开始postgresql
该命令执行成功后,可以从psql命令行工具,检查表和数据行是否已恢复。
选择CURRENT_TIMESTAMP;current_timestamp-------------------------------2021-11-0711:55:47。952405+00(1行)
记下上面的时间戳,因为我们将在恢复命令中使用这个时间。请注意,在现实场景中,找到数据库无错误的正确时间点可能需要进行广泛的调查。同样重要的是要注意,在所选点之后的所有更改都将在回滚后丢失。
删除之前添加的一条客户记录。
删除从客户在哪里ID=3.;
要恢复数据,运行一个命令,并将记录的时间戳作为参数。运行下面的命令来恢复到当时为止的数据库。
postgresql实例美元sudosystemctl停止postgresql
美元pgbackrest- upostgres——节=prod_backup——三角洲\——类型=时间——target= 2021-11-07 11:55:47.952405+00"\- - -目标-操作=促进恢复
postgresql实例美元sudosystemctl开始postgresql
检查数据库表,查看记录是否已恢复。
选择*从客户;id|名字----+--------1|约翰2|玛莎3.|玛丽(3.行)
[global] repo1-host=pg-repo repo1-host-user=postgres process-max=2 log-level-console=info log-level-file=debug [prod_backup] pg1-path=/var/lib/postgresql/14/main
SSH之间应该有双向无密码通信pg-repo和pg-secondary。请参阅设置SSH无密码如果您还没有配置它,则为步骤配置。
停止PostgreSQL实例
美元sudosystemctl停止postgresql
从恢复数据库备份pg-repo来pg-secondary。
美元pgbackrest- upostgres——节=prod_backup——三角洲恢复202111-0713: 34:08.897P00信息:恢复命令开始236:——三角洲——exec-id=109728-d81c7b0b——log-level-console=信息——log-level-file=调试——pg1-path=/var/lib/postgresql/14/main——process-max=2——repo1-host=pg-repo——repo1-host-user=postgres——节=prod_backup202111-0713: 34:09.784P00信息:repo1:恢复备份集20211107-111534 f_20211107——131807——我,复苏将开始在202111-0713: 18:07202111-0713: 34:09.786P00信息:删除无效的文件/链接/路径从' / var / lib / postgresql / 14 /主要的202111-0713: 34:11.803P00信息:写更新/var/lib/postgresql/14/main/postgresql.auto.conf202111-0713: 34:11.819P00信息:恢复全球/ pg_control(执行最后的来确保流产恢复不能是开始)202111-0713: 34:11.819P00信息:恢复大小=23.2MB,文件总计=937202111-0713: 34:11.820P00信息:恢复命令结束:完成成功(2924毫秒)
恢复成功后,重启PostgreSQL:
美元sudosystemctl开始postgresql
从本地检查数据库内容psql壳。
选择*从客户;id|名字----+--------1|约翰2|玛莎3.|玛丽(3.行)