postgresql主从复制
本文章以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主从复制的更多相关文章
- 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 ...
- Gitlab 11.9.1 高可用教程
Gitlab 11.9.1 高可用教程 一. PostgreSQL数据迁移 由于默认Gitlab的安装会内置Postgres数据库,并且没有对外,所以我们需要通过设置对应的Gitlab的配置将其中的数 ...
- 生产环境搭建高可用Harbor(包括恢复演练实操)
生产环境搭建高可用Harbor(包括恢复演练实操) 前言 因资源成本问题,本Harbor高可用架构为最小开销方案,如果资源充足,可以将PG.Redis全部使用使用云厂商集群模式. 同时为了配置简单,并 ...
- postgresql 9.5 pgpool 主从复制 以及错误解决
PostgreSQL+pgpool-II复制方案 这里不做功能的描述,只写搭建的过程和遇到的一些问题 1 系统 [root@mysqlhq ~]# cat /etc/redhat-release Ky ...
- postgresql 10.5 主从复制--搭建测试
env: role master slave host pg1 pg2 ip 11 12 pg-version 10.5 10.5 1 初始化查看 [ceiec@localhost ~]$ df -h ...
- Mysql主从复制_模式之日志点复制
MySQL数据复制的原理 MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).因此,要进行复制,必须在主服务器上启用二进制日志. 每个从服务器从主服务器接收主服务器已经记 ...
- postgresql数据库备份
一.工具备份数据 打开windows下的命令窗口:开始->cmd->安装数据库的目录->进入bin目录: 导出命令:pg_dump –h localhost –U postgres ...
- Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
随机推荐
- MySQL<添加、更新与删除数据>
添加.更新与删除数据 添加数据 为表中所有字段添加数据 INSERT INTO 表名(字段名1,字段名2,……) VALUES(值1,值2,……); insert into 表名 values(值1, ...
- oracle数据库字符集
Oracle字符集的基本原理 1. Oracle服务器字符集 oracle以哪种字符编码存储字符,可以通过以下语句查出数据库字符集的设置. 方法1 SQL> select * from v$nl ...
- linux系统usb挂载
本次例程的环境是在FC6下,通过终端操作的. 注意要挂载U盘需要有管理员的权限. 切换成管理员,输入: su root 然后输入管理员密码,进行密码认证: 成功后,先在 /mnt 下建立一个名叫USB ...
- excel——之锁定表头不可编辑
前言: 设置excel表头不可编辑功能.效果如下: 这就意味着,不可随意更改表头数据,除非你有密码. 过程: 1.先随意右键打开一个单元格,查看其中的“设置单元格属性”,即 2.在选中想要编辑的那些数 ...
- 【java】将List中的实体按照某个字段进行分组的算法
如何将List中存放的实体按照某个字段进行分组呢?来看看下面的例子,假如实体中有个字段叫批次号,我们将具有相同批次号的实体放在一起,那么怎么实现呢?看下面的代码: 可以定义个Map,Map的key用于 ...
- poj_3580 伸展树
自己伸展树做的第一个题 poj 3580 supermemo. 题目大意 对一个数组进行维护,包含如下几个操作: ADD x, y, d 在 A[x]--A[y] 中的每个数都增加d REVERSE ...
- C++虚继承的概念[转]
C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类.这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数 ...
- {sharepoint} SetPermission
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsof ...
- js判断浏览器是否安装Flash插件,并提示安装或开启
var flashChecker = function() { var hasFlash = 0; //是否安装了flash var flashVersion = 0; //flash版本 if(do ...
- 解决Ubuntu14.04下vi编辑器不能使用方向键和退格键问题
参考:http://blog.sina.com.cn/s/blog_7d0c2fed01010zbi.html 系统:Ubuntu14.04 使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多 ...