postgresql主从备份_PostgresSQL主从备份

PostgresSQL主从备份

tags:PostgresSQL 主从备份 创建时间:2016-10-31 08:56:47

老李

一直只写些VoIP方面的,但很少写其他 方面的,开完PG 2016 Conference后,有做通信的哥们问我,说不知道你一直用PG啊,我们想实现PG数据库的实时热备,按网上找到的材料,总不成功。也许是平时我们整理的文档真的是从cd 到make 到vi全写的太细致,以致于换个稍粗的文档就搞不来了 .

我在之前就发过一个使用PostgreSQL和FreeSwitch结合,用于使用FreeSwitch的原生的PG支持。可以参考: http://freeswitch.net.cn/27.html .实际如果只是实时数据热备,前期的方式还是这样,这是前两天用9.6.1搭建的流程,为了更直白明了,所以尽可能重复,让很多步骤看上去即使一致,也尽可能写清楚,避免很多人架不起来。

# 一、 测试硬件环境

thinkpad t440p 笔记本,16G内存,128ssd + 1T机械,测试环境中不用愁空间了

Oracle Virtual Box 虚拟机

由虚拟机安装的Debian 8操作系统,ip地址为: 192.168.1.203 ------主

由虚拟机安装的Centos 7操作系统,ip地址为:192.168.1.210 ------从

由于测试且虚拟环境下,把iptables之类关掉,或者把相应的资源放开,这里就不多说了

# 二、安装主PG

# 新增用户组

groupadd postgres

# 新增用户

useradd postgres -g postgres

# 新建数据库执行文件目录

mkdir -p /usr/local/pgsql

# 新建数据库数据文件目录

mkdir -p /db/pgsql/data

# 修改目录拥有者

chown -R postgres /usr/local/pgsql/.

chown -R postgres /db/pgsql/data

chown -R postgres /db/pgsql/data/.

# 编辑PATH搜索路径

vi /etc/profile

Append these 2 lines to the end of the file:

PATH=/usr/local/pgsql/bin:$PATH

export PATH

# 生效PATH搜索路径

source /etc/profile

# 安装编译源码所需的工具和库

#Centos 下

#yum -y install wget gcc readline-devel zlib-devel make

#debian

apt-get install zlibc libghc-zlib-dev libzlcore-dev gcc make git automake libreadline-dev

# 进入源码压缩包下载目录

cd /usr/src

# 下载源码压缩包

wget http://ftp.postgresql.org/pub/source/v9.6.1/postgresql-9.6.1.tar.gz

# 解压缩源码包

tar zxvf ./postgresql-9.6.1.tar.gz

# 进入解压缩源码目录

cd ./postgresql-9.6.1

# 执行源码编译配置脚本

./configure

# 编译源码

make

# 安装

make install

# 变更登录用户

su - postgres

# 执行数据库初始化脚本

/usr/local/pgsql/bin/initdb --encoding=utf8 -D /db/pgsql/data

# 退出变更登录

exit

# 复制PostgreSQL执行脚本

cp /usr/src/postgresql-9.3.5/contrib/start-scripts/linux /etc/init.d/postgresql

# 增加执行权限

chmod +x /etc/init.d/postgresql

# 编辑PostgreSQL执行脚本,指定数据库文件目录

vi /etc/init.d/postgresql

PGDATA="/db/pgsql/data"

# 编辑配置文件,配置可访问数据库的网络地址

(注意别忘了去掉#listen_addresses=前面的#)

vi /db/pgsql/data/postgresql.conf

//

//注意

/

listen_addresses = '*'

wal_level = hot_standby

synchronous_commit = on

max_wal_senders = 2

wal_keep_segments = 32

synchronous_standby_names = '*'

# 启动PostgreSQL服务

service postgresql start

#或用 su - postgres 后, pg_ctl -D /db/pgsql/data start,后续的类似的问题都可以适用

# 以postgres用户登录数据库,创建replication 用户

psql -U postgres

postgres=# Create user repl superuser password ‘123456’;

postgres=# \q

#退出pg登录

exit

# 编辑配置文件,设置密码md5验证

//

//注意

//真正用,不用要host all all 0.0.0.0/0,毕竟不安全

/

vi /db/pgsql/data/pg_hba.conf

# "local" is for Unix domain socket connections only

local all all trust

# IPv4 local connections:

#host all all 127.0.0.1/32 trust

host all all 0.0.0.0/0 md5

host replication repl 192.168.1.0/24 md5

# 重启数据库服务

service postgresql restart

#debian下需要安装 chkconfig工具

# 设置开机自动启动服务

chkconfig postgresql on

#配置LD_LIBRARY_PATH

vi /etc/profile

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib

export LD_LIBRARY_PATH

C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/pgsql/include

export C_INCLUDE_PATH

source /etc/profile

三、 从库

安装和主库类似,还是写全些

# 新增用户组

groupadd postgres

# 新增用户

useradd postgres -g postgres

# 新建数据库执行文件目录

mkdir -p /usr/local/pgsql

# 新建数据库数据文件目录

mkdir -p /db/pgsql/data

# 修改目录拥有者

chown -R postgres /usr/local/pgsql/.

chown -R postgres /db/pgsql/data

chown -R postgres /db/pgsql/data/.

# 编辑PATH搜索路径

vi /etc/profile

Append these 2 lines to the end of the file:

PATH=/usr/local/pgsql/bin:$PATH

export PATH

# 生效PATH搜索路径

source /etc/profile

# 安装编译源码所需的工具和库

#Centos 下

#yum -y install wget gcc readline-devel zlib-devel make

#debian

apt-get install zlibc libghc-zlib-dev libzlcore-dev gcc make git automake libreadline-dev

# 进入源码压缩包下载目录

cd /usr/src

# 下载源码压缩包

wget http://ftp.postgresql.org/pub/source/v9.6.1/postgresql-9.6.1.tar.gz

# 解压缩源码包

tar zxvf ./postgresql-9.6.1.tar.gz

# 进入解压缩源码目录

cd ./postgresql-9.6.1

# 执行源码编译配置脚本

./configure

# 编译源码

make

# 安装

make install

#接下来就和主库的有区别了

su - postgres

#使用pg_basebackup从主库获取配置文件

pg_basebackup -F p --progress -D /db/pgsql/data -h 192.168.1.203 -p 5432 -U repl --password

#复制recovery文件并进行配置

cp /usr/local/postgres94/share/recovery.conf.sample /db/pgsql/data/recovery.conf

vim /db/pgsql/data/recovery.conf

standby_mode = on

primary_conninfo = 'host=192.168.1.203 port=5432 user=repl password=123456'

recovery_target_timeline = 'latest'

#配置postgresql.conf

vim postgresql.conf

max_connections = 1000

hot_standby = on

max_standby_streaming_delay = 30s

wal_receiver_status_interval = 1s

hot_standby_feedback = on

pg_hba.conf 同主库一样配置

#在这里需要注意,由于这里算是从主库强拉过来的配置,所以一定要修改一下它的mod,否则它会出现不是700的错误

su - postgres

chmod 700 /db/pgsql/data

pgctl -D /db/pgsql/data

这时,主库启动,从库也启动的话,就会源源不断地把一些write的数据由主实时同步到从库了。

按时说,到了这里的时候,我们应结束了,可是还有一个东西没结束,就是当主库宕机了后,要让从库自动转为可读写状态,怎么办?

在recovery.conf中配置一个触发文件

trigger_file = ‘/db/pgsql/data/trigger.ping’

touch /db/pgsql/data/trigger.ping

重启从库

su - postgres

pg_ctl -D /db/pgsql/data restart

这样当主库宕机时,从库会迅速地转为主库

这次的文档先整理到这,以后再进一步完善,毕竟从成主,主也得成从

上海老李,QQ:1354608370,FreeSWITCH QQ群:


版权声明:本文为weixin_33328904原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。