金钱(警告)
** 状态:** 被贬值
如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:
** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。
** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。
介绍
PostreSQL,或postgres,是一个流行的数据库管理系统,可以组织和管理与网站或应用程序相关的数据。
在本教程中,我们将涵盖如何使用热待机配置复制,这具有相对简单的配置的优点。
要做到这一点,我们需要两个Ubuntu 12.04 VPS实例,一个将作为主数据库服务器,另一个将作为一个奴隶,它将复制。
安装 PostgreSQL 软件
本节中的步骤应在主和奴隶服务器上执行。
postgres 软件在 Ubuntu 的默认存储库中可用. 使用这些命令安装相应的包。
1sudo apt-get update
2sudo apt-get install postgresql postgresql-contrib postgresql-client
PostgreSQL创建了一个名为postgres
的用户,以便处理其初始数据库。
我们将需要为postgres用户设置密码,以便我们可以首先传输关键文件. 如果您愿意,您可以稍后删除密码:
1sudo passwd postgres
转到 postgres 用户如下:
1sudo su - postgres
為 postgres 使用者生成 ssh 鍵:
1ssh-keygen
按一下ENTER
来跟随的所有提示。
将密钥转移到另一个服务器,键入:
ssh-copy-id IP_address_of_opposite_server
你现在应该能够作为postgres用户在你的两个服务器之间自由地 ssh。
配置主服务器
我们将从配置我们的主服务器开始,所有这些命令都应该与postgres用户一起执行。
首先,我们将创建一个名为rep
的用户,只能用于复制:
psql -c "CREATE USER rep REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD 'yourpassword';"
将密码更改为您想要使用的任何东西。
接下来,我们将移动到postgres配置目录:
1cd /etc/postgresql/9.1/main
我们将修改我们刚刚创建的用户的访问文件:
1nano pg_hba.conf
在文件底部的任何地方,添加一条行,让新用户可以访问该服务器:
host replication rep IP_address_of_slave/32 md5
保存并关闭文件。
接下来,我们将打开主要的 postgres 配置文件:
1nano postgresql.conf
查找这些参数. 如果他们被评论,不评论它们,并根据我们下面列出的值修改它们:
listen_addresses = 'localhost,IP_address_of_THIS_host'
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = on
保存并关闭文件。
重新启动主服务器以实现更改:
1service postgresql restart
配置奴隶服务器
在奴隶服务器上开始关闭postgres数据库软件:
1service postgresql stop
我们将对postgres文件做一些类似的配置更改,所以更改到配置目录:
1cd /etc/postgresql/9.1/main
调整访问文件,以允许其他服务器连接到这个。
1nano pg_hba.conf
再次,添加这个行在某个地方,而不是文件的末尾:
host replication rep IP_address_of_master/32 md5
保存并关闭文件。
接下来,打开 postgres 配置文件:
1nano postgresql.conf
您可以使用您为主服务器设置的相同的配置选项,只修改 IP 地址以反映奴隶服务器的地址:
listen_addresses = 'localhost,IP_address_of_THIS_host'
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = on
保存并关闭文件。
复制初始数据库:
在奴隶能够复制主人之前,我们需要给它构建的初始数据库,这是因为它读取主服务器的日志,并将更改应用到自己的数据库。
在主服务器上,我们可以使用内部postgres备份开始命令创建备份标签命令,然后将数据库数据传输给我们的奴隶,然后发出内部备份停止命令来清理:
psql -c "select pg_start_backup('initial_backup');"
rsync -cva --inplace --exclude=*pg_xlog* /var/lib/postgresql/9.1/main/ slave_IP_address:/var/lib/postgresql/9.1/main/
psql -c "select pg_stop_backup();"
rsync 命令可能在修改证书文件时出现了错误,但这对我们的使用是好的。
我们现在必须在我们的奴隶上配置一个恢复文件. 在奴隶上导航到数据目录:
1cd /var/lib/postgresql/9.1/main
在这里,我们需要创建一个名为recovery.conf
的恢复文件:
1nano recovery.conf
请确保更改主服务器的IP地址和您创建的rep
用户的密码:
standby_mode = 'on' primary_conninfo = 'host=master_IP_address port=5432 user=rep password=yourpassword' trigger_file = '/tmp/postgresql.trigger.5432'
文件的最后一行,‘trigger_file’,是整个配置中最有趣的部分之一. 如果你在你的奴隶机器上在那个位置创建一个文件,你的奴隶会重新配置自己作为一个主人。
这会破坏当前的复制,特别是如果主服务器仍在运行,但如果主服务器崩溃,您需要做的事情。
您现在应该有部件的位置来启动你的奴隶服务器。
1service postgresql start
你想检查日志,看看是否有任何问题. 它们位于这两个机器上:
1less /var/log/postgresql/postgresql-9.1-main.log
您应该看到它正在成功连接到主服务器。
测试复制
我们将从第一手看到我们的服务器是否正确地复制,通过对主服务器进行一些更改,然后查询奴隶。
在主服务器上,作为postgres用户,通过键入登录postgres系统:
1psql
您的提示将更改,表示您现在正在与数据库软件进行通信。
我们将创建一个测试表来创建一些更改:
1CREATE TABLE rep_test (test varchar(40));
现在,我们可以使用以下命令将一些值插入表中:
1INSERT INTO rep_test VALUES ('data one');
2INSERT INTO rep_test VALUES ('some more words');
3INSERT INTO rep_test VALUES ('lalala');
4INSERT INTO rep_test VALUES ('hello there');
5INSERT INTO rep_test VALUES ('blahblah');
您现在可以通过键入离开这个界面:
1\q
现在,在奴隶上,以相同的方式输入数据库界面:
1psql
现在,我们可以看到我们在主数据库中输入的数据是否已在奴隶上复制:
1SELECT * FROM rep_test;
1test
2-----------------
3 data one
4 some more words
5 lalala
6 hello there
7 blahblah
8(5 rows)
我们的数据已被写到主和奴隶服务器。
让我们看看我们是否可以将更多数据插入我们的奴隶表中:
1INSERT INTO rep_test VALUES ('oops');
1ERROR: cannot execute INSERT in a read-only transaction
正如你所看到的,我们无法将数据插入到奴隶中,这是因为数据只向一个方向传输,以保持数据库的一致性,后者必须使奴隶只读。
结论
你现在应该有一个主和奴隶 PostgreSQL 服务器配置,以便有效地通信. 如果你有一个应用程序,将写入和查询数据库,你可以设置一个负载平衡方案,总是写给主,但在主和奴隶之间分割读取。