FreeSWITCH及VOIP,Openser,电话机器人等产品中文技术资讯、交流、沟通、培训、咨询、服务一体化网络。QQ群:293697898
老李
一直只写些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
这样当主库宕机时,从库会迅速地转为主库
这次的文档先整理到这,以后再进一步完善,毕竟从成主,主也得成从