1. 构架图
本文档由 postgreSQL 专业群 深圳-GS 初稿, PostgreSQL 群 beta 2015-01-18 日修订
主要工作有 GS 完成
2. 主机宕机后构架图
3. 恢复完成后构架图
4. 实际部署图
5. 操作步骤
1. 安装 pg
apt-get install postgresql-9.1
a)
b) :apt-get install postgresql-contrib-9.1
c) :apt-get install libpq-dev
d) :apt-get install postgresql-server-dev-9.1
e) :配置系统用户 postgres 密码:pg
f) :使用 root 用户,创建目录用来做后面的归档目录
g) :进入 postgres 的 home 目录,vim .bash_profile 添加环境变量,修改完成后使用
source .bash_profile 激活环境变量
h) :配置数据库超级用户 postgres 密码:pgdb,并使用\q 推出 SQL 命令模式
i) 进入 postgres 配置目录(下面目录只针对 pg 在 ubuntu 上的 apt-get 默认安装)
j) 修改:pg_hba.conf: 添加行:
host
host
host
replication
replication
replication
postgres
postgres
postgres
192.168.141.142/32
192.168.141.140/32
192.168.141.141/32
trust
trust
trust
k) 修改 postgresql.conf
i.
ii.
iii.
iv.
v.
vi.
启用参数:listen_addresses
配置端口:port = 5432
启用参数:wal_level = hot_standby
启用参数:archive_mode = on
启用参数:hot_standby = on
启用参数:max_wal_senders = 2
archive_command = 'cp %p /opt/archivedir/%f'
l) 推出当前 shell 连接,重新登录系统用户 postgres,确保环境变量生效
m) 创建配置文件 postgres.conf 软连接文件到$PGDATA 目录:
ln /etc/postgresql/9.1/main/postgresql.conf /var/lib/postgresql/9.1/main/
否则在使用 pg_ctl start 启动数据库是出现如下错误:
n) 启动数据库(系统用户 postgres 下执行 pg_ctl restart)
2. 配置 ssh 无密码连接(postgres)
把 B 主机的公钥文件拷贝到 A 主机的 authorized_keys ,这样 B 主机可以 ssh 免密码登录 A
可以通过查看 /var/log/secure 来查看登录信息,这种方式为 publickey
a)安装 ssh 服务:apt-get install ssh
b)切换到系统用户 postgres,执行 ssh-keygen -t rsa 命令,后续默认回车,并生成类似二维
码的东西。
c)进入用户的 home 目录,用 ls 可以看到.ssh 的文件夹,进入.ssh 文件夹,查看文件:
a) 使用 cat id_rsa.pub >> authorized_keys (####名称必须是 authorized_keys)
b) 使用 scp authorized_keys node2_ip:~/.ssh/node1 将当前的 authorized_keys 发送到
node2 和 node3 的 postgres 主目录下面的.ssh 文件夹下,并命名为 node1
c) 使用同样的方法,在 node2,node3 上面将 authorized_keys 传送给其他的 2 个节点
上面,并使用 cat node* >> authorized_keys 追加到 authorized_keys 里面
d) 测试无密码连接是否生效:在第一次连接输入密码后,以后的连接都不用输入密
码
3. 配置 pg 流复制模式(@slave1,@slave2)
a) 使用 pg_ctl 命令,停止 slave1,slave2 的 PG 服务(@slave)
b) 返回 master 服务器,执行如下命令
postgres@xelg-linux:~/.ssh$ psql
psql (9.1.13)
Type "help" for help.
postgres=# select pg_start_backup('stream_bak');
pg_start_backup
-----------------
0/2000020
(1 row)
postgres=# \q
c) 使用命令 scp -r 9.1/ 192.168.141.140: 和 scp -r 9.1/ 192.168.141.141: 将备份文件分
别传送给 slave1 slave2(@master)
d) 在 master 上面执行如下命令(@master)
postgres@xelg-linux:~$ psql
psql (9.1.13)
Type "help" for help.
postgres=# select pg_stop_backup();
NOTICE:
pg_stop_backup complete, all required WAL segments have been
archived
pg_stop_backup
----------------
0/2000168
(1 row)
postgres=#
e) 切 换 终 端 到 slave1 和 slave2 , 进 入 ~/9.1/main 目 录 , 并 执 行 vi recovery.conf
(@slave1 slave2)
f) 添加行:
编辑文件 $PGDATA/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=192.168.141.142 port=5432 user=postgres password=pgdb'
restore_command = 'scp 192.168.141.142:/opt/archive/%f %p'
recovery_target_timeline='latest'
trigger_file=/tmp/trigger_file0
g) 使用 pg_ctl 启动 slave1,slave2 数据库,并出现流复制成功连接到主节点,表示
已经成功配置了 pg 的复制模式。
h) 测试:返回 master 节点,执行创建数据库命令,并在 slave1,slave2 上查看,是否
已经同时创建该数据库
i) 测试:返回 slave1,slave,执行创建数据库命令,出现如下提示:到现在 PG 流复
制已经成功配置
4. 安装 pgpool(执行 pgpool 的系统用户必须有 ssh 无密码
连接的权利,建议使用 postgres 用户安装 pgpool)
在 master 执行命令
./configure --with-pgsql=/var/lib/postgresql --with-pgsql-libdir=/usr/lib/postgresql/9.1/lib --with-
pgsql-includedir=/usr/include/postgresql
安装 pgpool
5. 配置 pgpool,实现主备自动切换(原 master 宕机,以
下统称 M-1)
a) 使用 Root 用户进入目录:/usr/local/etc
b) 用户命令:pg_md5 获取数据库用户 postgres 密码 pgdb 的 MD5 值
c) 执行修改 pcp.conf
d) 执行修改 pgpool.conf
e) 执行修改 poo_hba.conf
f) 按照 pgpool.conf 里面配置的 failover_command 参数,在对应的目录下创建脚本文
件
g) 参考下面内容:
h)
pgpool.conf
pcp.conf
mkdir /var/run/pgpool
pool_hba.conf 配置完成后,使用 root 用户创建文件夹:
i) 使用 pgpool 命令启动 pgpool
j) 切换系统用户到 postgrs,执行命令 psql –p 9999,看到如下界面是表示 pgpool 已
经安装 OK
6. 恢复并挂载宕机服务器
a) 返回 master 服务器,切换到系统用户 postgres,执行 pg_ctl-m fast stop
b) 切换到 slave1,出现如下提示:首先提示主连接失去连接,然后开始启动本地编
辑
c) 切换到 slave2,出现如下提示