postgresSQL主从流复制安装

  准备

yum -y install readline-devel zlib-devel

下载postgresql-9.6.9.tar.gz到两台机器上解压后进入并:

./configure --prefix=/main/postgresql

然后make  make install就ok,接着改一下属主:

chown -R postgres:postgres /main/postgresql

创建数据文件目录

mkdir /main/postgresql/data

创建log文件

mkdir /main/postgresql/logs
touch /main/postgresql/logs/postgresql.log

初始化数据库:

bin/initdb -D /main/postgresql/data

可以看到data下多出来一堆文件

[postgres@iz2zej5nlztmm1frnyl4wxz postgresql]$ ll data/
总用量 112
drwx------ 5 postgres postgres  4096 7月  30 15:16 base
drwx------ 2 postgres postgres  4096 7月  30 15:16 global
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_clog
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_commit_ts
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_dynshmem
-rw------- 1 postgres postgres  4468 7月  30 15:16 pg_hba.conf
-rw------- 1 postgres postgres  1636 7月  30 15:16 pg_ident.conf
drwx------ 4 postgres postgres  4096 7月  30 15:16 pg_logical
drwx------ 4 postgres postgres  4096 7月  30 15:16 pg_multixact
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_notify
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_replslot
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_serial
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_snapshots
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_stat
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_stat_tmp
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_subtrans
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_tblspc
drwx------ 2 postgres postgres  4096 7月  30 15:16 pg_twophase
-rw------- 1 postgres postgres     4 7月  30 15:16 PG_VERSION
drwx------ 3 postgres postgres  4096 7月  30 15:16 pg_xlog
-rw------- 1 postgres postgres    88 7月  30 15:16 postgresql.auto.conf
-rw------- 1 postgres postgres 22300 7月  30 15:16 postgresql.conf

设置环境变量:

export PGDATA=/main/postgresql/data 
export PATH=${JAVA_HOME}/bin:/main/mysql5.6.41/bin:/main/postgresql/bin:$PATH

source一下生效之

启动下测试下:

pg_ctl -D /main/postgresql/data/ -l /main/postgresql/logs/postgresql.log start

看看日志:

cat postgresql.log 
LOG:  could not bind IPv6 socket: 无法指定被请求的地址
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
LOG:  database system was shut down at 2018-07-30 15:16:13 CST
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

连一下:

psql
psql (9.6.9)
Type "help" for help.

postgres=# 

ok

接下来可以开始配置主从---------------------------------

主库创建同步用户:

psql
psql (9.6.9)
Type "help" for help.

postgres=# create role repl login replication encrypted password 'xxxxx';

可以查到用户:

postgres=# select usename from pg_user;
 usename  
----------
 postgres
 repl
(2 rows)

vim pg_hba.conf设置访问权限,开放从节点密码读取:

xx.xx.xx.xx是从节点的ip

host    replication     repl        xx.xx.xx.xx/32            md5

同时开放其他局域网内的应用节点密码访问:

host    all             all             yy.yy.yy.00/24            md5

修改核心配置文件:

Listen_adresses = ‘*’
wal_level = hot_standby                主从设置为热血模式,流复制必选
max_wal_senders=2    流复制允许连接进程
wal_keep_segments =64    
max_connections = 100    默认参数,非主从配置相关参数,表示到数据库的连接数

从节点:

从库安装完成后,不初始化,若已经初始化,删除其data目录

从节点从主节点去读取:

pg_basebackup -h 172.17.222.161 -p 5432 -U repl -F p -P -D /main/postgresql/data
Password: 输入密码
22824/22824 kB (100%), 1/1 tablespace
NOTICE:  WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup

在基础备份时,初始化文件是从主库复制来的,所以配置文件一致,注释掉
wal_level,
max_wal_senders 
wal_keep_segments等参数
打开如下参数:
vi /postgres/data/postgresql.conf
hot_standby = on   #在备份的同时允许查询
max_standby_streaming_delay = 30s #可选,流复制最大延迟
wal_receiver_status_interval = 10s #可选,从向主报告状态的最大间隔时间
hot_standby_feedback = on #可选,查询冲突时向主反馈
max_connections = 1000 #默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库

创建恢复文件recovery.conf

cp ../share/recovery.conf.sample recovery.conf
调整参数:
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=172.17.222.161 port=5432 user=repl password=xxxxx'      

备注:
recovery.conf    #在做基础备份时,也可通过-R参数在备份结束后自动生产一个recovery.conf文件
standby_mode = on  #指明从库身份
primary_conninfo = 'host=10.0.120.150 port=5432 user=repl password=repl1234'  #连接到主库信息
recovery_target_timeline = 'latest'     #同步到最新数据
指定触发文件,文件存在时,将触发从库提升为主库,前提是必须设置”standby_mode = on”;如果不设置此参数,也可采用”pg_ctl promote“触发从库切换成主库

#trigger_file = ‘/main/postgres/data/trigger_activestandby’

 从库启动

pg_ctl -D /main/postgresql/data/ -l /main/postgresql/logs/postgresql.log start

主库看看状态 

主库进程:

从库进程:

 测试:

create table test(id int primary key, name varchar(20));

从库只能读取------写入执行报错:

主库执行读写都ok,不过一般用来写:

主从分别查看同步状态:

pg_controldata /main/postgresql/data/

主节点:

从节点:

 到此主从复制建立完成。

测试自动主从切换:

1)主库上执行:
su - postgres
pg_ctl stop -m fast         #停主库日志
pg_controldata /postgres/data/ #此时Database cluster state: shutdown
(2)从库切换为主库:
su - postgres
pg_ctl promote
pg_controldata /postgres/data #此时Database cluster state: Inproduction

 

猜你喜欢

转载自www.cnblogs.com/radio/p/9391902.html
今日推荐