在centos7.0中安装postgresql9.5下的主从流(streaming replication)模式

我们直接进入主题。

一、安装postgresql9.5

有一点需要特别注意,在初始化数据库时的目录要特别重要,如:

./initdb -E UTF8 -D /data/data/postgresql/data

/data/data/postgresql/data 这个目录在从节点时要被手动清空(也可在安装从节点时不初始化)

二、主从模式的配置

1、主服务器(master_IP:192.168.20.93)

1.1、 先创建一个新目录:

mkdir /opt/pgsql/pg_archive

1.2 、首先需要创建一个数据库用户进行主从同步。创建用户replica,并赋予登录和复制的权限。

postgres# CREATE ROLE replica login replication encrypted password 'replica';

1.3、 修改pg_hba.conf,允许replica用户来同步。
在pg_hba.conf里增加两行:

host      all            all         192.168.20.93/32      trust   #允许slave(从)连接到主服务器
host   replication      replica      192.168.20.93/32       md5    #允许slave(从)使用replica用户来复制

这样,就设置了replica这个用户可以master(主服务器)进行复制请求。
注:第二个字段必须是replication

1.4 、修改postgressql.conf

vim /data/data/postgresql/data/postgresql.conf

修改如下:

listen_addresses = '*'   # 监听所有IP
archive_mode = on  # 允许归档
archive_command = 'cp %p /opt/pgsql/pg_archive/%f'  # 用该命令来归档logfile segment
wal_level = hot_standby 
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的

配置完两个文件后重启服务器。

pg_ctl stop -D /opt/pgsql/data
pg_ctl start -D /opt/pgsql/data

1.5、测试slave能否连接到master数据库上。在slave上运行如下命令:

./psql -h 192.168.20.93 -U postgres

看看是否能进入数据库。若可以,则正常。

2、从服务器(slave_IP:192.168.20.94)

2.1、从主节点拷贝数据到从节点

su - postgres
rm -rf /data/data/postgresql/data/* #先将data目录下的数据都清空

pg_basebackup -h 192.168.20.93 -U replica -D /opt/pgsql/data -X stream -P # 从master拷贝数据到slave(基础备份)
这个命令不推荐了。下面的命令比较省事。
切换到安装目录/data/program/postgres/bin(要和数据库初始化目录/data/data/postgresql/data 区分开来) :

./pg_basebackup -h 192.168.20.93 -U replica -F p -x -P -R -D /data/data/postgresql/data -l replbackup20161122

下面对参数继续说明:
-h:指定连接的数据库的主机库IP地址
-F:指定连接的用户名,此处是我们专门创建的用户负责复制流的用户replica用户
-p
-x:表示备份开始后,启动另一个流复制从主库接收WAL日志
-P:表示允许在备份过程中实时的打印备份的速度
-R:表示在备份结束后自动生成recovery.conf文件,这样也避免了手动创建或复制
-D:指定把备份写到那个目录,这里尤其要注意一点就是在做基础备份之前从库的数据目录(/data/data/postgresql/data) 目录需要手动清理空 我在安装postgresql时强调了这个目录
-l:表示指定一个备份的标识,运行命令后看到...complete说明生成备份成功

mkdir /opt/pgsql/pg_archive

2.2、配置recovery.conf(如果你用了上面的那个用删除线的命令的话,这一步需要加上。否则这一步省略)
复制安装目录/data/program/postgres/share/recovery.conf.sample数据库初始化目录/data/data/postgresql/data/recovery.conf

cp /data/program/postgres/share/recovery.conf.sample  /data/data/postgresql/data/recovery.conf

修改recovery.conf

vim /data/data/postgresql/data/recovery.conf

修改如下:

standby_mode = on    # 说明该节点是从服务器
primary_conninfo = 'host=192.168.20.93 port=5432 user=replica password=replica'  # 主服务器的信息以及连接的用户
recovery_target_timeline = 'latest'

2.3、配置postgresql.conf

vim /data/data/postgresql/data/postgresql.conf

修改如下:

wal_level = hot_standby
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 10s # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈

配置完后重启服务器

pg_ctl stop -D /opt/pgsql/data
pg_ctl start -D /opt/pgsql/data

3、验证是否部署成功

3.1、在主节点上执行:

postgres=# select client_addr,sync_state from pg_stat_replication;

结果如下:
client_addr | sync_state
—————+————
192.168.20.94 | async
(1 行记录)

说明IP_address_of_slave是从服务器,在接收流。而且是异步流复制。

3.2、此外,还可以分别在主、从节点上运行 ps aux|grep postgres ,进行验证。
3.3、最后,可以在主库中用如下命令创建表来验证从库中是否也生成了相应的库和表:

create table test(id BIGSERIAL PRIMARY KEY,name VARCHAR(255),age INT);
insert into test(name,age) values('小马',25),('张',26);
select * from test;

3.4、在pg库中常用命令:
\c dbname:切换dbname数据库
\l:列出数据库名
\dt:列出当前数据库所有表
\d 数据库: 得到所有表的名字
\d 表名:得到表结构

猜你喜欢

转载自blog.csdn.net/wanliguodu/article/details/80377880