centos6.5下postgresql9.4.3同步流复制的standby安装与配置

一、同步流复制的架构

PostgreSQL从9.1版本之后提供了同步复制的架构。同步复制要求在数据写入Standby数据库后,事务的commit才返回,所以Standby库出现问题时,会导致主库被hang住。解决这个问题的方法是启动两个Standby数据库,这两个standby数据库只要有一个是正常的,就不会让主库hang住。所以在实际应用中,同步流复制,总是有1个主库和2个以上的Standby库。

二、同步复制的配置

实现同步复制功能主要是在主库上配置参数"synchronous_standby_names",这个参数指定多个Standby的名称,各个名称通过逗号分隔,而Standby名称是在Standby连接到主库时,由连接参数"application_name"指定的。要使用同步复制,在Standby数据库中,recovery.conf

里的primary_conninfo一定要指定连接参数"application_name"。recovery.conf的示例如下:

standby_mode = ‘on‘

primary_conninfo = ‘application_name=standby01 user=repluesr password=XXXXXX host=172.16.0.111 port=5432 sslmode=disable sslcompression=1‘

三、系统环境

系统平台:centos6.5

PostgreSQL版本:postgresql9.4.3

防火墙关闭/iptables

selinux设置成

SELINUX=disabled


主机名


IP地址


角色


数据目录


postgresql01


172.16.0.111


主库


/home/postgres/pgsql/data


postgresql02


172.16.0.112


Standby


/home/postgres/pgsql/data


postgresql03


172.16.0.113


Standby


/home/postgres/pgsql/data

四、源码包安装

1、在三台安装依赖包

yum -y install gcc*

yum -y install readline-devel

2、在三台增加用户

# adduser postgres

# passwd postgres

Changing password for user postgres.

New password:

BAD PASSWORD: it is too simplistic/systematic

BAD PASSWORD: is too simple

Retype new password:

passwd: all authentication tokens updated successfully.

注意:主库安装与配置好后,在把全部的文件拷备到standby中。

以下是主库操作

3. 下载PostgreSQL 源码包

# wget http://ftp.postgresql.org/pub/source/v9.4.3/postgresql-9.4.3.tar.bz2

4. 解压源码包

# tar xjf postgresql-9.4.3.tar.bz2

5. 进入解压后的目录

# cd postgresql-9.4.3

6.开始编译安装PostgreSQL 数据库。

[[email protected] postgresql-9.4.3]# ./configure --prefix=/home/postgres/pgsql

[[email protected] postgresql-9.4.3]#gmake

[[email protected] postgresql-9.4.3]# gmake install

7.设置环境

[[email protected] postgresql-9.4.3]# cd /home/postgres/

[[email protected] postgres]# ls

pgsql

[[email protected] postgres]# vi .bash_profile

把 PATH=$PATH:$HOME/bin

改成 PATH=$PATH:$HOME/bin:/home/postgres/pgsql/bin

保存退出。

让环境变量生效

[[email protected] postgres]# source .bash_profile

8.初始化数据库

8.1新建数据目录

[[email protected] postgres]# mkdir /home/postgres/pgsql/data

8.2更改权限

[[email protected] postgres]# chown postgres:postgres /home/postgres/pgsql/data

8.3切换到postgres用户

[[email protected] postgres]# su - postgres

8.4init db

[[email protected] ~]$ /home/postgres/pgsql/bin/initdb -D /home/postgres/pgsql/data

到这里数据的初始化就完成

9.系统服务

9.1回到root用户

[[email protected] ~]$ exit

9.2复制安装目录下的linux文件/etc/init.d/

进入postgresql的安装目录

[[email protected] postgres]# cd /root/postgresql-9.4.3/

[[email protected] postgresql-9.4.3]# cp contrib/start-scripts/linux /etc/init.d/postgresql

9.3修改/etc/init.d/postgresql  注意:红色是修改部分

[[email protected] postgresql-9.4.3]# vi /etc/init.d/postgresql

#! /bin/sh

# chkconfig: 2345 98 02

# description: PostgreSQL RDBMS

# This is an example of a start/stop script for SysV-style init, such

# as is used on Linux systems.  You should edit some of the variables

# and maybe the ‘echo‘ commands.

#

# Place this file at /etc/init.d/postgresql (or

# /etc/rc.d/init.d/postgresql) and make symlinks to

#   /etc/rc.d/rc0.d/K02postgresql

#   /etc/rc.d/rc1.d/K02postgresql

#   /etc/rc.d/rc2.d/K02postgresql

#   /etc/rc.d/rc3.d/S98postgresql

#   /etc/rc.d/rc4.d/S98postgresql

#   /etc/rc.d/rc5.d/S98postgresql

# Or, if you have chkconfig, simply:

# chkconfig --add postgresql

#

# Proper init scripts on Linux systems normally require setting lock

# and pid files under /var/run as well as reacting to network

# settings, so you should treat this with care.

# Original author:  Ryan Kirkpatrick <[email protected]>

# contrib/start-scripts/linux

## EDIT FROM HERE

# Installation prefix

prefix=/home/postgres /pgsql

# Data directory

PGDATA="/home/postgres/pgsql/data"

# Who to run the postmaster as, usually "postgres".  (NOT "root")

PGUSER=postgres

# Where to keep a log file

PGLOG="$PGDATA/serverlog"

# It‘s often a good idea to protect the postmaster from being killed by the

# OOM killer (which will tend to preferentially kill the postmaster because

# of the way it accounts for shared memory).  Setting the OOM_SCORE_ADJ value

# to -1000 will disable OOM kill altogether.  If you enable this, you probably

# want to compile PostgreSQL with "-DLINUX_OOM_SCORE_ADJ=0", so that

# individual backends can still be killed by the OOM killer.

#OOM_SCORE_ADJ=-1000

# Older Linux kernels may not have /proc/self/oom_score_adj, but instead

# /proc/self/oom_adj, which works similarly except the disable value is -17.

# For such a system, enable this and compile with "-DLINUX_OOM_ADJ=0".

#OOM_ADJ=-17

## STOP EDITING HERE

# The path that is to be used for the script

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# What to use to start up the postmaster.  (If you want the script to wait

# until the server has started, you could use "pg_ctl start -w" here.

# But without -w, pg_ctl adds no value.)

DAEMON="$prefix/bin/postmaster"

# What to use to shut down the postmaster

PGCTL="$prefix/bin/pg_ctl"

set -e

# Only start if we can find the postmaster.

test -x $DAEMON ||

{

echo "$DAEMON not found"

if [ "$1" = "stop" ]

then exit 0

else exit 5

fi

}

# Parse command line parameters.

case $1 in

start)

echo -n "Starting PostgreSQL: "

test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj

test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj

su - $PGUSER -c "$DAEMON -D ‘$PGDATA‘ &" >>$PGLOG 2>&1

echo "ok"

;;

stop)

echo -n "Stopping PostgreSQL: "

su - $PGUSER -c "$PGCTL stop -D ‘$PGDATA‘ -s -m fast"

echo "ok"

;;

restart)

echo -n "Restarting PostgreSQL: "

su - $PGUSER -c "$PGCTL stop -D ‘$PGDATA‘ -s -m fast -w"

test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj

test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj

su - $PGUSER -c "$DAEMON -D ‘$PGDATA‘ &" >>$PGLOG 2>&1

echo "ok"

;;

reload)

echo -n "Reload PostgreSQL: "

su - $PGUSER -c "$PGCTL reload -D ‘$PGDATA‘ -s"

echo "ok"

;;

status)

su - $PGUSER -c "$PGCTL status -D ‘$PGDATA‘"

;;

*)

# Print help

echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2

exit 1

;;

esac

exit 0

9.4启动数据库

[[email protected] postgresql-9.4.3]# /etc/init.d/postgresql start

9.5让数据库开机启动

[[email protected] postgresql-9.4.3]# chkconfig --add postgresql

[[email protected] postgresql-9.4.3]# chkconfig postgresql on

9.6创建数据操作历史记录文件

[[email protected] postgresql-9.4.3]# touch /home/postgres/pgsql/.pgsql_history

[[email protected] postgresql-9.4.3]# chown postgres:postgres /home/postgres/pgsql/.pgsql_history

10.测试使用

[[email protected] ~]$ createdb test

[[email protected] ~]$ psql test

psql (9.4.3)

Type "help" for help.

test=#

源码编译安装成功

五、配置同步流复制

配置如下:

1.在主库增加同步的用户名与密码

[[email protected] ~]$ psql -d postgres

psql (9.4.3)

Type "help" for help.

postgres=# CREATE ROLE repluser REPLICATION LOGIN PASSWORD ‘zhf#2015‘;

CREATE ROLE

postgres=#

2.在主库postgresql01上进行配置

修改以下参数

在主库的/home/postgres/pgsql/data/pg_hba.conf中做如下配置:

[[email protected] ~]$ vi /home/postgres/pgsql/data/pg_hba.conf

增加以下:

host    replication     repluser        172.16.0.0/24           md5

2.在主库postgreso1的/home/postgres/pgsql/data/postgresql.conf中设置如下三个参数

[[email protected] ~]$ vi /home/postgres/pgsql/data/postgresql.conf

isten_addresses = ‘*‘

max_wal_senders = 5

wal_level = hot_standby

3.在主数据上指定同步复制的Standby名称,在postgresql01的/home/postgres/pgsql/data/postgresql.conf增加如下一行:

synchronous_standby_names = ‘standby01,standby02‘

4.停止主库postgresql

[[email protected] ~]# /etc/init.d/postgresql stop

5.把主库安装文件拷备到两台standby中

[[email protected] ~]# scp -r /home/postgres/pgsql 172.16.0.112:/home/postgres/

[[email protected] ~]# scp -r /home/postgres/pgsql 172.16.0.113:/home/postgres/

[[email protected] ~]# scp -r /etc/init.d/postgresql 172.16.0.112:/etc/init.d/

[[email protected] ~]# scp -r /etc/init.d/postgresql 172.16.0.113:/etc/init.d/

6.在两台standby中设置权限两台都操作如下:

[[email protected] ~]# cd /home/postgres/pgsql/

[[email protected] pgsql]# chown -R postgres:postgres data

[[email protected] pgsql]# chmod +x /etc/init.d/postgresql

[[email protected] postgres]# chkconfig --add postgresql

[[email protected] postgres]# chkconfig postgresql on

[[email protected] ~]# cd /home/postgres/pgsql/

[[email protected] pgsql]# chown -R postgres:postgres data

[[email protected] pgsql]# chmod +x /etc/init.d/postgresql

[[email protected] postgres]# chkconfig --add postgresql

[[email protected] postgres]# chkconfig postgresql on

7. 在两台standby中设置环境变量两台都操作如下:

[[email protected] pgsql]# cd /home/postgres/

把 PATH=$PATH:$HOME/bin

改成 PATH=$PATH:$HOME/bin:/home/postgres/pgsql/bin

保存退出。

让环境变量生效:

[[email protected] postgres]# source .bash_profile

[[email protected] pgsql]# cd /home/postgres/

把 PATH=$PATH:$HOME/bin

改成 PATH=$PATH:$HOME/bin:/home/postgres/pgsql/bin

保存退出。

让环境变量生效:

[[email protected] postgres]# source .bash_profile

8.在备库postgresql02上进行配置

把配置文件拷过来

[[email protected] postgres]# su - postgres

[[email protected] ~]$ cd pgsql/data/

[[email protected] data]$ cp /home/postgres/pgsql/share/recovery.conf.sample  ./recovery.conf

在postgresql02的/home/postgres/pgsql/data/recovery.conf中的配置“primary_conninfo”里增加 连接参数“appliction_name”,如下:

standby_mode = on

primary_conninfo = ‘application_name=standby01 user=repluser password=zhf#2015 host=172.16.0.111 port=5432 sslmode=disable sslcompression=1‘

在postgresql02的/home/postgres/pgsql/data/postgresql.conf中的配置参数

hot_standby = on

完成配置后,启动数据库,如下:

[[email protected] postgres]# /etc/init.d/postgresql start

9.在备库postgresql03上进行配置

把配置文件拷过来

[[email protected] postgres]# su - postgres

[[email protected] ~]$ cd pgsql/data/

[[email protected] data]$ cp /home/postgres/pgsql/share/recovery.conf.sample  ./recovery.conf

在postgresql03的/home/postgres/pgsql/data/recovery.conf中的配置“primary_conninfo”里增加 连接参数“appliction_name”,如下:

standby_mode = on

primary_conninfo = ‘application_name=standby02 user=repluser password=zhf#2015 host=172.16.0.111 port=5432 sslmode=disable sslcompression=1‘

在postgresql03的/home/postgres/pgsql/data/postgresql.conf中的配置参数

hot_standby = on

完成配置后,启动数据库,如下:

[[email protected] postgres]# /etc/init.d/postgresql start

10.启动主库 postgresql01

11.测试在主库中

[[email protected] data]$ psql test

psql (9.4.3)

Type "help" for help.

test=# create table test01(id int primary key,note text);

CREATE TABLE

test=# insert into test01 values(1,‘1111111‘);

INSERT 0 1

test=# insert into test01 values(2,‘2222222‘);

INSERT 0 1

在备库查询数据

在备库postgresql02中查看

[[email protected] ~]$ psql test

psql (9.4.3)

Type "help" for help.

test=# select * from test01;

id |  note

----+---------

1 | 1111111

2 | 2222222

(2 rows)

test=#

在备库postgresql03中查看

[[email protected] postgres]# su - postgres

[[email protected] ~]$ psql test

psql (9.4.3)

Type "help" for help.

test=# select * from test01;

id |  note

----+---------

1 | 1111111

2 | 2222222

(2 rows)

test=#

时间: 2024-12-26 21:20:54

centos6.5下postgresql9.4.3同步流复制的standby安装与配置的相关文章

postgresql同步流复制搭建

节点 IP 角色 master 10.10.100.1 master standby1 10.10.100.2 standby1 standby2 10.10.100.3 standby2 master上创建流复制所需要的用户. CREATE ROLE replication WITH REPLICATION PASSWORD 'replication' LOGIN; 修改master的pg_hba.conf文件,设置replication用户远程访问权限 ## vim /data/pgsql/

PostgreSQL12同步流复制搭建-同步不生效的问题

PostgreSQL12的流复制配置不再放到recovery.conf文件中,但是基本配置还是一样的,过年了也没心情工作,就来搭一下试试. 官方文档: https://www.postgresql.org/docs/12/runtime-config-replication.html 开始: 1)下载安装包: https://www.postgresql.org/docs/12/runtime-config-replication.html 2)解压并安装 tar xzvf postgresql

centos6.5下postgresql9.4.3安装与配置

一.简介 PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统.有些特性甚至连商业数据库都不具备.这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目,并且有非常广泛的用户. 二.系统环境 系统平台:CentOS release 6.5 (Final) PostgreSQL 版本:PostgreSQL 9.4.3 防火墙已关闭/iptables: Firewall is not runni

Mac之OS系统下搭建JavaEE环境 &lt;五&gt; 之Mysql数据库的安装及配置

这里将推荐两款 集成的Mysql环境 十分轻便好用,MAMP 和 XAMPP MAMP XAMPP 1.MAMP下载 官网: https://www.mamp.info/en/ 下载安装即可使用 MAMP PRO的 序列号:MP-DED4-0A88-3A11-F9FDE 2.Mysql启动 十分简单 .配置你需要的端口 和 密码 即可. 3.XAMPP下载 官网:https://www.apachefriends.org/index.html 由于最新版本的XAMPP都是 配置的 MariaDB

PostgreSQL 9.5.5主从实现之异步流复制(Hot Standby)

前言 简单记录一下postgresql主从的实现方式之一--基于Standby的异步流复制,这是PostgreSQL9.x版本(2010.9)之后提供的一个很nice的功能,类似的功能在Oracle中是11g之后才提供的active dataguard和SQL Server 2012版本之后才提供的日志传送,此处再次为pg鼓掌,确实是一个很棒的开源数据库.废话不多说,本篇blog就详细记录一下在pg9.5中实现Hot Standby异步流复制的完整配置过程和注意事项. Standby数据库原理

pg流复制

同步流复制应用场景:金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本,例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本.另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法. 还有一种场景,在主备切换时,要求备库快速激活成和主库一样的状态,也需要remote_apply级别的复制. 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库apply,虽然APPLY通常都很快,可能也在毫秒级别完成,但是以前没有apply级

Windows Azure+Windows+Linux多环境下Tomcat服务的安装及配置集合

Windows Azure+Windows+Linux多环境下的Tomcat服务的安装及配置集合 说到Tomcat服务,相信大家都很熟悉了,当然也这包括安装及配置:我们都知道Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求.实际上To

【原】centos6.5下hadoop cdh4.6 安装

1.架构准备: namenode 10.0.0.2 secondnamenode 10.0.0.3 datanode1 10.0.0.4 datanode2 10.0.0.6 datanode3 10.0.0.11 2.安装用户:cloud-user 3.[namenode]namenode到其他节点ssh无密码登录: ssh-keygen     (一路回车) ssh-copy-id [email protected]3 ssh-copy-id [email protected]4 ssh-c

centos6.5下搭建fastdfs分布式存储

← 使用iftop监控linux网络流量 分布式文件系统FastDFS原理介绍 → centos6.5下搭建fastdfs分布式存储 2014-04-24 Venus FastDFSGo to comment fastDFS下载地址:http://code.google.com/p/fastdfs/downloads/listlibevent官网: http://libevent.org/ 目前最新版:https://github.com/downloads/libevent/libevent/