本文章以rpm包方式安装,版本为9.3.4

一、postgresql安装

postgresql93-9.3.4-1PGDG.rhel6.x86_64.rpm

postgresql93-libs-9.3.4-1PGDG.rhel6.x86_64.rpm test.sneaky.bak

postgresql93-devel-9.3.4-1PGDG.rhel6.x86_64.rpm

postgresql93-server-9.3.4-1PGDG.rhel6.x86_64.rpm

步骤:

1、rpm -ihv postgresql93-*

2、修改postgres用户密码:echo "peiwo" | passwd --stdin postgres

3、修改环境变量:echo 'export PATH=$PATH:/usr/pgsql-9.3/bin' >> /var/lib/pgsql/.bash_profile

4、用postgres用户运行 su – postgres,执行数据库初始化

initdb --encoding=UTF8 --no-locale --auth=ident   -D  /data/pg_data1

-D:为自定义指定的目录

5、修改安全配置,修改/var/lib/pgsql/9.3/data/pg_hba.conf(访问权限控制,根据实际情况配置):

# "local" is for Unix domain socket connections only

# TYPE  DATABASE        USER            ADDRESS                 METHOD

#配置用户访问权限

local   all              all                                     trust                                 #所有用户通过本地(本主机)均信任,即可无密码验证登录

host    all             all         127.0.0.1/32          md5                                  #所有用户使用md5密码通过localhost均可访问

host    all             all         0.0.0.0/0          md5                                        #所有用户使用md5密码通过ipv4地址均可访问

host    all             all         ::1/128               md5                                     #所有用户使用md5密码通过ipv6地址均可访问

host    sneaky         sneaky         172.16.10.193/32               md5               #sneaky用户使用md5密码通过172.16.10.193地址可访问sneaky数据库

host    sneaky         sneaky         172.16.10.194/32               md5               #neaky用户使用md5密码通过172.16.10.194地址可访问sneaky数据库

#配置从库数据同步权限

host    replication     replication      172.16.10.194/32               md5           #replication用户使用md5密码通过172.16.10.194地址可访问replication数据库

#以最后一段字段意思解释:允许172.16.10.194此台主机使用replication通过md5加密的密码访问replication数据库(主从复制用)

6、启动postgresql,切换到postgres用户:su postgres(数据库路径自定义)

pg_ctl -D /data/pg_data1/ start

7、登陆数据库,创建角色与数据库:psql -U postgres postgres

create user sneaky with password '123456';

create database sneaky with owner sneaky;

8、退出数据库(Ctrl+d)导入初始化数据:

psql -d sneaky -U postgres -f   /data/pg_data/test.sneaky

二、postgresql主数据库配置

172.16.10.193 主数据库地址

1.首先需要配置一个账号进行主从同步,有多个从库则可以配置多条安全规则。

修改pg_hba.conf,增加replication用户,进行同步。

host    replication     replication     172.16.10.194/32                 md5

五个字段的条目:类型    指定数据库    授权用户    授权主机    认证方式

这样,就设置了replication这个用户可以从172.16.10.194对应的机器(也可以设置网段)进行流复制请求。

2、给replication设置密码,登录和备份权限。

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

3、修改postgresql.conf,注意设置下下面几个地方:

listen_addresses = '172.16.10.193,localhost'

wal_level = hot_standby      #这个是设置主为wal的主机

max_wal_senders = 32         #这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个

wal_keep_segments = 256      #设置流复制保留的最多的xlog数目

wal_sender_timeout = 60s     #设置流复制主机发送数据的超时时间

max_connections = 100        #这个设置要注意下,从库的max_connections必须要大于主库的

4、重启主库

pg_ctl -D /data/pg_data1/ restart

三、postgresql从数据库配置

172.16.10.194 从数据库地址

1、创建的目录为 /data/pg_data2并通过pg_basebackup从主库同步

pg_basebackup -h 172.16.10.193 -U replication -F p -P -x -R  -D /data/pg_data2

#这里使用了pg_basebackup这个命令,/data/pg_data2这个目录是空的

成功之后,就可以看到这个目录中现有的文件都是一样的了。

2、进入/data/pg_data2目录,修改recovery.conf,只要修改几个地方就行了

standby_mode = on                                               #这个说明这台机器为从库

primary_conninfo = 'host=172.16.10.193 port=5432 user=replication password=replication'  #这个说明这台机器对应主库的信息

recovery_target_timeline = 'latest'                             #这个说明这个流复制同步到最新的数据

trigger_file = ‘/data/pg_data2/trigger/trigger_file’       #标识触发器文件,指定一个触发文件让备服务器感觉到它的时候就会停止流复制(即:故障转移),不要创建这个文件。当你想主从切换的时候才需要创建它。

3.postgresql.conf中也有几个地方要进行修改

listen_addresses = '172.16.10.143,localhost'      #表示监听地址

#max_wal_senders = 32                             #注释掉此项

max_connections = 1000                            #一般查多于写的应用从库的最大连接数要比较大

hot_standby = on                                  #说明这台机器不仅仅是用于数据归档,也用于数据查询

max_standby_streaming_delay = 30s                 #数据流备份的最大延迟时间,默认30s

wal_receiver_status_interval = 1s                 #多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间

hot_standby_feedback = on                         #如果有错误的数据复制,是否向主进行反馈

4、重启从库

pg_ctl -D /data/pg_data2/ restart

四、确认主从是否配置完成情况

查看进程,主库所在的机器中会看到sender进程

postgres  4843  0.0  0.1 325316  3432 ?        Ss   07:45   0:00 postgres: wal sender process replica 172.16.10.194(43312) streaming 0/1101C9C0

从库所在的机器中会看到receiver进程

postgres  2147  0.0  0.1 371432  3316 ?        Ss   07:46   0:00 postgres: wal receiver process   streaming 0/1101C9C0

五、查看复制状态

主库中执行

postgres=# select * from pg_stat_replication;

-[ RECORD 1 ]----+------------------------------

pid              | 4843           # sender的进程

usesysid         | 17363          # 复制的用户id

usename          | replicatiion        # 复制的用户用户名

application_name | walreceiver

client_addr      | 172.16.10.194  # 复制的客户端地址

client_hostname  |

client_port      | 43312         # 复制的客户端端口

backend_start    | 2017-01-06 07:45:58.771604+08  # 这个主从搭建的时间

state            | streaming      # 同步状态 startup: 连接中、catchup: 同步中、streaming: 同步

sent_location    | 0/1101C9C0        # Master传送WAL的位置

write_location   | 0/1101C9C0     # Slave接收WAL的位置

flush_location   | 0/1101C9C0     # Slave同步到磁盘的WAL位置

replay_location  | 0/1101C9C0     # Slave同步到数据库的WAL位置

sync_priority    | 0              #同步Replication的优先度

0:          #异步、1~?: 同步(数字越小优先度越高)

sync_state       | async          # 有三个值,async: 异步、sync: 同步、potential: 虽然现在是异步模式,但是有可能升级到同步模式

六、查看主从同步状态

主数据库执行:

postgres=> CREATE TABLE products (
postgres(> product_no integer,
postgres(> name text,
postgres(> price numeric
postgres(> );

在从数据库查看数据:

postgres=> select * from products ;
product_no | name | price
------------+--------+-------
1 | Cheese | 9.99
(1 行记录)

表示主从数据同步,流复制成功

在从库插入数据

postgres=> insert into products values(2,apple,7) ;

cannot execute INSERT in a read-only transaction

七、主从切换

1.模拟主机故障

-bash-4.1$ pg_ctl stop -D /data/pg_data/ -m fast

2、提升备库状态

pg_ctl promote -D /data/pgsql/data2

3、查看状态

postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 行记录)

注:主库返回f,备库返回t

postgresql主从复制的更多相关文章

  1. postgresql 主从复制并切换

    1 环境 192.168.19.145 Kylin 3.3 mysqlhq  9.5.2  psql_master192.168.19.227 Kylin 3.3 mysql3    9.5.2  p ...

  2. Gitlab 11.9.1 高可用教程

    Gitlab 11.9.1 高可用教程 一. PostgreSQL数据迁移 由于默认Gitlab的安装会内置Postgres数据库,并且没有对外,所以我们需要通过设置对应的Gitlab的配置将其中的数 ...

  3. 生产环境搭建高可用Harbor(包括恢复演练实操)

    生产环境搭建高可用Harbor(包括恢复演练实操) 前言 因资源成本问题,本Harbor高可用架构为最小开销方案,如果资源充足,可以将PG.Redis全部使用使用云厂商集群模式. 同时为了配置简单,并 ...

  4. postgresql 9.5 pgpool 主从复制 以及错误解决

    PostgreSQL+pgpool-II复制方案 这里不做功能的描述,只写搭建的过程和遇到的一些问题 1 系统 [root@mysqlhq ~]# cat /etc/redhat-release Ky ...

  5. postgresql 10.5 主从复制--搭建测试

    env: role master slave host pg1 pg2 ip 11 12 pg-version 10.5 10.5 1 初始化查看 [ceiec@localhost ~]$ df -h ...

  6. Mysql主从复制_模式之日志点复制

    MySQL数据复制的原理 MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).因此,要进行复制,必须在主服务器上启用二进制日志. 每个从服务器从主服务器接收主服务器已经记 ...

  7. postgresql数据库备份

    一.工具备份数据 打开windows下的命令窗口:开始->cmd->安装数据库的目录->进入bin目录: 导出命令:pg_dump –h localhost –U postgres ...

  8. Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)

    之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...

  9. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

随机推荐

  1. python2.0 s12 day8 _ socketserver学习

    Socket 概念 一个socket就是一个点对点的链接.当今,大多数的通信都是基于Internet Protocl,因此大多数的网络Socket都是Internet Protocl(互联网)的通信( ...

  2. ionic跳转(一)

    在ionic中可以用两个办法写中转链接(写模版地址或路由地址) 1)a 标签的 href <a class="button button-icon icon ion-android-h ...

  3. 免费在线的web性能测试网站

    由于需要测试网站并发,所以去百度搜了搜,最开始找了个webkaka结果告知,已下线,好像是个很好的在线网站.现在只有网站速度诊断的http://pagespeed.webkaka.com/

  4. Apktool源码解析——第二篇

    上一篇讲到ApkDecoder这个类,大部分调用到还是Androlib类,而且上次发现brutall的代码竟然不是最新的,遂去找iBotP.的代码了. 今天来看Androlib的代码: private ...

  5. poj_2315 最小费用最大流

    题目大意 一个图上有N个顶点,从1到N标号,顶点之间存在一些无向边,边有长度,要求从顶点1走到顶点N,再从顶点N走回顶点1,其中不必要经过每个顶点,但是要求走的路径上的边只能经过一次.求出从1---& ...

  6. LeetCode——Single Number III

    Description: Given an array of numbers nums, in which exactly two elements appear only once and all ...

  7. EUI组件之Button

    一.Button的常规使用 用到的按钮素材,分别为按钮的正常.按下.禁用图片 拖动一个Button到exml,并设置正常.按下.禁用.标签等属性 点击效果 其他: 1. 按钮的标签字体颜色大小怎么改变 ...

  8. 【BZOJ5099】[POI2018]Pionek 几何+双指针

    [BZOJ5099][POI2018]Pionek Description 在无限大的二维平面的原点(0,0)放置着一个棋子.你有n条可用的移动指令,每条指令可以用一个二维整数向量表示.每条指令最多只 ...

  9. 把 Activity 改成 ListActivity继续使用 setContentView

    ListActivity has a default layout that consists of a single, full-screen list in the center of the s ...

  10. onethink后台登陆修改验证码!

    验证码: $config = array( 'fontSize' => 30, // 验证码字体大小 'length' => 3, // 验证码位数 'useNoise' => fa ...