pg+pgpool+Ubuntu 实现分布式流复制模式.docx
- 文档编号:1423796
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:16
- 大小:1.33MB
pg+pgpool+Ubuntu 实现分布式流复制模式.docx
《pg+pgpool+Ubuntu 实现分布式流复制模式.docx》由会员分享,可在线阅读,更多相关《pg+pgpool+Ubuntu 实现分布式流复制模式.docx(16页珍藏版)》请在冰点文库上搜索。
pg+pgpool+Ubuntu实现分布式流复制模式
1.构架图
本文档由postgreSQL专业群深圳-GS初稿,PostgreSQL群beta2015-01-18日修订
主要工作有GS完成
2.主机宕机后构架图
3.恢复完成后构架图
4.实际部署图
5.操作步骤
1.安装pg
a)apt-getinstallpostgresql-9.1
b):
apt-getinstallpostgresql-contrib-9.1
c):
apt-getinstalllibpq-dev
d):
apt-getinstallpostgresql-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:
添加行:
hostreplicationpostgres192.168.141.142/32trust
hostreplicationpostgres192.168.141.140/32trust
hostreplicationpostgres192.168.141.141/32trust
k)修改postgresql.conf
i.启用参数:
listen_addresses
ii.配置端口:
port=5432
iii.启用参数:
wal_level=hot_standby
iv.启用参数:
archive_mode=on
archive_command='cp%p/opt/archivedir/%f'
v.启用参数:
hot_standby=on
vi.启用参数:
max_wal_senders=2
l)推出当前shell连接,重新登录系统用户postgres,确保环境变量生效
m)创建配置文件postgres.conf软连接文件到$PGDATA目录:
ln/etc/postgresql/9.1/main/postgresql.conf/var/lib/postgresql/9.1/main/
否则在使用pg_ctlstart启动数据库是出现如下错误:
n)启动数据库(系统用户postgres下执行pg_ctlrestart)
2.配置ssh无密码连接(postgres)
把B主机的公钥文件拷贝到A主机的authorized_keys,这样B主机可以ssh免密码登录A
可以通过查看/var/log/secure来查看登录信息,这种方式为publickey
a)安装ssh服务:
apt-getinstallssh
b)切换到系统用户postgres,执行ssh-keygen-trsa命令,后续默认回车,并生成类似二维码的东西。
c)进入用户的home目录,用ls可以看到.ssh的文件夹,进入.ssh文件夹,查看文件:
a)使用catid_rsa.pub>>authorized_keys(####名称必须是authorized_keys)
b)使用scpauthorized_keysnode2_ip:
~/.ssh/node1将当前的authorized_keys发送到node2和node3的postgres主目录下面的.ssh文件夹下,并命名为node1
c)使用同样的方法,在node2,node3上面将authorized_keys传送给其他的2个节点上面,并使用catnode*>>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"forhelp.
postgres=#selectpg_start_backup('stream_bak');
pg_start_backup
-----------------
0/2000020
(1row)
postgres=#\q
c)使用命令scp-r9.1/192.168.141.140:
和scp-r9.1/192.168.141.141:
将备份文件分别传送给slave1slave2(@master)
d)在master上面执行如下命令(@master)
postgres@xelg-linux:
~$psql
psql(9.1.13)
Type"help"forhelp.
postgres=#selectpg_stop_backup();
NOTICE:
pg_stop_backupcomplete,allrequiredWALsegmentshavebeenarchived
pg_stop_backup
----------------
0/2000168
(1row)
postgres=#
e)切换终端到slave1和slave2,进入~/9.1/main目录,并执行virecovery.conf(@slave1slave2)
f)添加行:
编辑文件$PGDATA/recovery.conf
standby_mode='on'
primary_conninfo='host=192.168.141.142port=5432user=postgrespassword=pgdb'
restore_command='scp192.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)
配置完成后,使用root用户创建文件夹:
mkdir/var/run/pgpool
i)使用pgpool命令启动pgpool
j)切换系统用户到postgrs,执行命令psql–p9999,看到如下界面是表示pgpool已经安装OK
6.恢复并挂载宕机服务器
a)返回master服务器,切换到系统用户postgres,执行pg_ctl-mfaststop
b)切换到slave1,出现如下提示:
首先提示主连接失去连接,然后开始启动本地编辑
c)切换到slave2,出现如下提示
d)回到master服务器,执行psql-p9999,并创建table:
test1,如下提示已经成功创建
e)到目前位置,已经完成主备机切换,以下步骤开始挂载原master为slave21
f)进入postgres的data目录:
/var/lib/postgresql/9.1/main,vimrecovery.conf,内容如下:
standby_mode='on'
primary_conninfo='host=192.168.141.140port=5432user=postgrespassword=pgdb'
restore_command='scp192.168.141.140:
/opt/archive/%f%p'
recovery_target_timeline='latest'
trigger_file='/tmp/trigger_file0'
g)执行pg_ctlstart,启动数据库,并执行psql,select*fromtest1,查看在原master停止后创建的表test1是否恢复到该数据库上面,如下图所示:
test1已经成功出现在原master(现slave21)上面
h)执行创建表语句,出现当期数据库为读模式的警告:
i)在原主节点上执行命令:
/usr/local/bin/pcp_attach_node5localhost9898postgrespgdb0重新将丢失的节点添加到pgpool上面。
(必须步骤,否则以下步骤会出错)
5:
超时时间
Localhost:
安装pgpool的服务器ip或名称
9898:
pcp端口号
Postgres:
数据库超级管理员
Pgdb:
数据库超级管理员密码
0:
需要重新加载服务器在pgpool.conf中对应的backend0的0(就是id)
7.新master宕机后,主备机切换(新master宕机,以下统称M-2,slave21重新升级为master)
a)准备工作:
切换到slave21的服务器(原master)上面,修改/var/lib/postgresql的failover.sh文件。
修改如下:
b)切换到M-2服务器(原slave1),执行命令:
pg_ctl–mfaststop
c)切换到slave21服务器,出现如下提示
d)在slave21上执行psql-p9999,并执行:
insertintotest1values
(1);如下图,我们就胜利的完成了第二次的主备切换,这个步骤和第一次的主板切换步骤差不多,但是关键是将M-2重新挂载为slave2
e)检查slave2,中是否有数据插入:
f)移动data目录文件recovery.done为recovery.conf
g)使用root用户执行命令:
rm/tmp/trigger_file0,或者重启服务器,重启后系统将自动删除该文件,如果不执行该动作,我们在启动数据库的时候,就会出现错误(具体情况在J步骤中说明)
h)执行命令pg_ctlstart
i)成功竟然流复制模式,查看slave2中是否有数据插入:
j)忽略f步骤中,在M-2上不执行删除/tmp/trigger_file0的动作,数据库启动,完成恢复后,直接进入可以读写模式,这不是我们想要的流模式,因为流模式只能进行读操作。
具体的大家可以去试试,这里就不做了。
因为这个问题,纠结了我2天。
。
。
。
囧
好了,到这里,我们已经完整的配置好了pgpool的流复制模式。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pg+pgpool+Ubuntu 实现分布式流复制模式 pg pgpool Ubuntu 实现 分布式 复制 模式