postgresql 主从配置主从同步 有几种方法

postgresql主从分离问题
[问题点数:40分,结帖人wsimplej]
postgresql主从分离问题
[问题点数:40分,结帖人wsimplej]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年8月 其他数据库开发大版内专家分月排行榜第二2014年2月 其他数据库开发大版内专家分月排行榜第二2014年1月 其他数据库开发大版内专家分月排行榜第二2013年12月 其他数据库开发大版内专家分月排行榜第二2013年10月 其他数据库开发大版内专家分月排行榜第二2013年8月 其他数据库开发大版内专家分月排行榜第二2013年5月 其他数据库开发大版内专家分月排行榜第二2013年1月 其他数据库开发大版内专家分月排行榜第二2012年8月 其他数据库开发大版内专家分月排行榜第二2012年5月 其他数据库开发大版内专家分月排行榜第二2012年4月 其他数据库开发大版内专家分月排行榜第二2012年1月 其他数据库开发大版内专家分月排行榜第二
2014年11月 其他数据库开发大版内专家分月排行榜第三2014年7月 其他数据库开发大版内专家分月排行榜第三2014年6月 其他数据库开发大版内专家分月排行榜第三2014年5月 其他数据库开发大版内专家分月排行榜第三2013年7月 其他数据库开发大版内专家分月排行榜第三2013年3月 其他数据库开发大版内专家分月排行榜第三2012年7月 其他数据库开发大版内专家分月排行榜第三2012年6月 其他数据库开发大版内专家分月排行榜第三2011年12月 其他数据库开发大版内专家分月排行榜第三
2014年8月 其他数据库开发大版内专家分月排行榜第二2014年2月 其他数据库开发大版内专家分月排行榜第二2014年1月 其他数据库开发大版内专家分月排行榜第二2013年12月 其他数据库开发大版内专家分月排行榜第二2013年10月 其他数据库开发大版内专家分月排行榜第二2013年8月 其他数据库开发大版内专家分月排行榜第二2013年5月 其他数据库开发大版内专家分月排行榜第二2013年1月 其他数据库开发大版内专家分月排行榜第二2012年8月 其他数据库开发大版内专家分月排行榜第二2012年5月 其他数据库开发大版内专家分月排行榜第二2012年4月 其他数据库开发大版内专家分月排行榜第二2012年1月 其他数据库开发大版内专家分月排行榜第二
2014年11月 其他数据库开发大版内专家分月排行榜第三2014年7月 其他数据库开发大版内专家分月排行榜第三2014年6月 其他数据库开发大版内专家分月排行榜第三2014年5月 其他数据库开发大版内专家分月排行榜第三2013年7月 其他数据库开发大版内专家分月排行榜第三2013年3月 其他数据库开发大版内专家分月排行榜第三2012年7月 其他数据库开发大版内专家分月排行榜第三2012年6月 其他数据库开发大版内专家分月排行榜第三2011年12月 其他数据库开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。fshuanglan 的BLOG
用户名:fshuanglan
文章数:56
访问量:13485
注册日期:
阅读量:24883
阅读量:243005
阅读量:985904
阅读量:143112
51CTO推荐博文
PostgreSQL主从热备配置主服务器:从服务器:1、PostgreSQL安装2、主数据库服务器设置添加从服务器信息 vi /var/lib/pgsql/9.3/data/pg_hba.conf # IPv4 local connections:host & &all & & & & & & all & & & & & & 127.0.0.1/32 & & & & & &trusthost & &all & & & & & & all & & & & & & 192.168.0.0/24 & & & & &trust# 配置从数据库,host & &replication & & postgres & & & &192.168.0.27/32 & & & & trust#设置从数据库同步时使用的用户,以及从数据库的ip地址,此处直接用主数据库的postgres账户,可以自己在主数据上新建一个专用同步账号vi /var/lib/pgsql/9.3/data/postgresql.conf wal_level = hot_standby checkpoint_segments = 16archive_mode = on archive_command = 'cp %p /var/lib/pgsql/9.3/data/pg_archive/%f' max_wal_senders = 10 & & & & &wal_keep_segments = 32 log_destination = 'csvlog'logging_collector = onlog_directory = '/var/log/pgsql-log/' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'log_truncate_on_rotation = onlog_rotation_age = 1dlog_rotation_size = 10MBlog_min_duration_statement = 1000mslog_lock_waits = on log_statement = 'ddl'log_timezone = 'PRC'lc_messages = 'en_US.UTF-8'lc_monetary = 'en_US.UTF-8lc_numeric = 'en_US.UTF-8'lc_time = 'en_US.UTF-8'deadlock_timeout = 1sautovacuum = onlog_autovacuum_min_duration = 0check_function_bodies = on建立归档文件和日志文件mkdir /var/lib/pgsql/9.3/data/pg_archivechown -R postgres.postgres /var/lib/pgsql/9.3/data/pg_archivemkdir /var/log/pgsql-log chown -R postgres.postgres /var/log/pgsql-log 重启动服务service postgresql-9.3 restartStopping postgresql-9.3 service: & & & & & & & & & & & & & [ &OK &]Starting postgresql-9.3 service: & & & & & & & & & & & & & [ &OK &]psql -U postgrespsql (9.3.4)Type "help" for help.基础备份 psql -U postgrespostgres=# select pg_start_backup(''); pg_start_backup ----------------- 0/4000028(1 row)postgres=# \q 初始化并启动从数据库,并删除 data目录/etc/init.d/postgresql-9.3 initdbservice postgresql-9.3 startchkconfig postgresql-9.3 onrm -rf /var/lib/pgsql/9.3/data拷贝数据库至从服务器scp -rp /var/lib/pgsql/9.3/data root@:/var/lib/pgsql/9.3/修改从服务器目录权限chown -R postgres.postgres /var/lib/pgsql/9.3/data结束主数据库的备份状态,再拷贝主数据的存档文件到从数据库psql -U postgrespsql (9.3.4)Type "help" for help.postgres=# select pg_stop_backup();NOTICE: &pg_stop_backup complete, all required WAL segments have been archived pg_stop_backup ---------------- 0/4014C90(1 row)postgres=# \q查看归档信息cd /var/lib/pgsql/9.3/data/pg_archivels & &..backup复制存档文件夹至从服务器scp -rp /var/lib/pgsql/9.3/data/pg_archive root@:/var/lib/pgsql/9.3/data/修改从服务器目录权限chown -R postgres.postgres /var/lib/pgsql/9.3/data/pg_archive从数据库配置 mkdir /var/log/pgsql-log chown -R postgres.postgres /var/log/pgsql-logvi /var/lib/pgsql/9.3/data/postgresql.confhot_standby = on &新建recovery.conf文件,并录入以下内容vi /var/lib/pgsql/9.3/data/recovery.confrestore_command = 'cp /var/lib/pgsql/9.3/data/pg_archive/%f %p'standby_mode = 'on'primary_conninfo = 'host= port=5432 user=postgres password=postgres' 删除从数据库postmaster.pid文件以及pg_xlog下的文件,并重新启动服务rm /var/lib/pgsql/9.3/data/postmaster.pid rm -rf /var/lib/pgsql/9.3/data/pg_xlog/*service postgresql-9.3 restart登陆从服务器查看数据库psql -U postgres psql (9.3.4)Type "help" for help.postgres=# \l & & & & & & & & & & & & & & & & &List of databases & Name & &| &Owner & | Encoding | & Collate & | & &Ctype & &| & Access privileges &-----------+----------+----------+-------------+-------------+----------------------- postgres &| postgres | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 | =c/postgres & & & & &+ & & & & & | & & & & &| & & & & &| & & & & & & | & & & & & & | postgres=CTc/postgres template1 | postgres | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 | =c/postgres & & & & &+ & & & & & | & & & & &| & & & & &| & & & & & & | & & & & & & | postgres=CTc/postgres tigase & &| tigase & | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 | (4 rows)postgres=# 登陆主服务器创建测试数据库psql -U postgrespsql (9.3.4)Type "help" for help.postgres=# create databaCREATE DATABASE登陆从服务器查看数据库psql -U postgres psql (9.3.4)Type "help" for help.postgres=# \l & & & & & & & & & & & & & & & & &List of databases & Name & &| &Owner & | Encoding | & Collate & | & &Ctype & &| & Access privileges &-----------+----------+----------+-------------+-------------+----------------------- postgres &| postgres | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 | =c/postgres & & & & &+ & & & & & | & & & & &| & & & & &| & & & & & & | & & & & & & | postgres=CTc/postgres template1 | postgres | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 | =c/postgres & & & & &+ & & & & & | & & & & &| & & & & &| & & & & & & | & & & & & & | postgres=CTc/postgres test & & &| tigase & | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 |
tigase & &| tigase & | UTF8 & & | en_US.UTF-8 | en_US.UTF-8 | (5 rows)postgres=# 本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)PostgreSQL 9.1 实时主从复制配置
- 技术文章 - 爱看
PostgreSQL 9.1 实时主从复制配置
两台数据库服务器均为CentOS 5.3
一.安装Postgresql9.1
1.从http://ftp.postgresql.org/pub/source/v9.1.2/postgresql-9.1.2.tar.gz下载Postgresql9.1下载源码
2.在两个数据库服务器上执行以下操作安装Postgresql9.1
tar –zxvf &postgresql-9.1.2.tar.gz
cd postgresql-9.1.2
./configure –prefix /usr/local/pgsql
make install
useradd postgres & &#创建postgres用户
mkdir /data/pgsql9.1 &#创建数据文件目录
chown postgres:postgres /data/pgsql9.1
/usr/local/pgsql/bin/initdb –D &/data/pgsql9.1 &#初始化数据库
3.配置Master数据库
su – postgres
/usr/local/pgsql/bin/pg_ctl –D /data/pgsql9.1 &start &#启动数据库
#进入数据库创建repl用户
Psql –p 5432 –U postgres –h 127.0.0.1
Create user repl superuser password ‘密码’
#修改postgresql.conf文件
vi /data/pgsql9.1/postgresql.conf
listen_addresses = '*'
wal_level = hot_standby
synchronous_commit = on
max_wal_senders = 2
wal_keep_segments = 32
synchronous_standby_names = '*'
#修改pg_hba.conf文件
vi /data/pgsql9.1/pg_hba.conf
#允许局域网中md5密码认证连接
host & &all & & & & & & all & & & &192.168.100.0/24 & & & &md5
#用户数据同步,必须为replication数据库
host &replication & & & repl & & & & &192.168.100.0/24 & & & &md5
#用户在当前数据库服务器无密码连接
local & all & & & & &all & & & & & & & & & & & & & & & & & & trust
#重启数据库
Su – postgres
/usr/local/pgsql/bin/pg_ctl –D &/data/pgsql9.1 restart
4.配置Slave端数据库服务器
#进入Master数据库服务器,将Master数据库设置为备份状态
Psql –p 5432 –U postgres
Select pg_start_backup(‘/data/pgsql9.1’);
#将Master数据库数据文件备份到Slave端
scp –rp /data/pgsql9.1 root@slave急ip:/data/
#进入Master数据库服务器,将Master数据库恢复到正常状态
&Psql –p 5432 –U postgres
Select pg_stop_backup('');
#修改Slave数据库文件权限
chown –R postgres:postgres /data/pgsql9.1
#修改Slave数据库postgresl.conf
vi /data/pgsql9.1/postgresql.conf
wal_level = minimal
synchronous_commit = off
max_wal_senders = 0
wal_keep_segments = 0
synchronous_standby_names = ''
hot_standby = on
#编辑recovery.conf文件
cp /usr/local/pgsql/share/recovery.conf.sample /data/pgsql9.1/ recovery.conf
vi &/data/pgsql9.1/ recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=192.168.100.78 port=5432 user=repl password=replpwd'
trigger_file = '/data/pgsql9.1/trigger_activestb'
#启动Slave数据库
/usr/local/pgsql/bin/pg_ctl –D /data/pgsql9.1 &start
到此Master-Slave实时同步配置完成。
声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
你可能喜欢
你可能喜欢
向好友分享:
您可能喜欢
您可能喜欢Posts - 341,
Articles - 0,
Comments - 831
-正确的时间经历正确的事情
10:11 by 轩脉刃, ... 阅读,
postgres主从流复制
postgres在9.0之后引入了主从的流复制机制,所谓流复制,就是从库通过tcp流从主库中同步相应的数据。postgres的主从看过一个视频,大概效率为3w多事务qps。
postgres的主从主称之为primary,从称为stand_by。主从配置需要注意的一个是主从的postgres的版本,环境,等最好都需要一致,否则可能产生奇奇怪怪的问题。
postgres的主配置
主是10.12.12.10这台机器
首先需要配置一个账号进行主从同步。
修改pg_hba.conf,增加replica用户,进行同步。
replication
10.12.12.12/32
这样,就设置了replica这个用户可以从10.12.12.12 对应的网段进行流复制请求。
给postgres设置密码,登录和备份权限。
postgres# CREATE ROLE replica login replication encrypted password 'replica'
修改postgresql.conf,注意设置下下面几个地方:
wal_level = hot_standby
# 这个是设置主为wal的主机
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的
pg_ctl restart
postgres的从配置
从是10.12.12.12这台机器
创建的目录为 /data/pgsql/data2
pg_basebackup -F p --progress -D /data/pgsql/data2 -h 10.12.12.10 -p 5432 -U replica --password
这里使用了pg_basebackup这个命令,/data/pgsql/data2这个目录是空的
成功之后,就可以看到这个目录中现有的文件都是一样的了。
进入到/data/pgsql/data2目录,复制recovery.conf,这个文件可以从pg的安装目录的share文件夹中获取,比如
cp /usr/local/postgres94/share/recovery.conf.sample /data/pgsql/data2/recovery.conf
修改recovery.conf,只要修改几个地方就行了
standby_mode = on
# 这个说明这台机器为从库
primary_conninfo = 'host=10.12.12.10 port=5432 user=replica password=replica'
# 这个说明这台机器对应主库的信息
recovery_target_timeline = 'latest' # 这个说明这个流复制同步到最新的数据
postgresql.conf中也有几个地方要进行修改
max_connections = 1000 # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on
# 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
wal_receiver_status_interval = 1s
# 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
好了,现在启动从库
确认主库和从库都配置好了
查看进程,主库所在的机器中会看到sender进程
8467 postgres
0:00.66 postgres: wal sender process replica
从库所在的机器中会看到receiver进程
8466 postgres
0:06.88 postgres: wal receiver process
streaming 3/CF118C18
查看复制状态
主库中执行:
postgres=# select * from pg_stat_
-[ RECORD 1 ]----+------------------------------
# sender的进程
# 复制的用户id
# 复制的用户用户名
application_name | walreceiver
client_addr
| 10.12.12.12 # 复制的客户端地址
client_hostname
client_port
# 复制的客户端端口
backend_start
# 这个主从搭建的时间
backend_xmin
| streaming
# 同步状态 startup: 连接中、catchup: 同步中、streaming: 同步
sent_location
| 3/CF123560 # Master传送WAL的位置
write_location
| 3/CF123560 # Slave接收WAL的位置
flush_location
| 3/CF123560 # Slave同步到磁盘的WAL位置
replay_location
| 3/CF123560 # Slave同步到数据库的WAL位置
sync_priority
#同步Replication的优先度
0: 异步、1~?: 同步(数字越小优先度越高)
sync_state
# 有三个值,async: 异步、sync: 同步、potential: 虽然现在是异步模式,但是有可能升级到同步模式
看到上面的sync_state的状态有同步和异步的区别。
我们之前的概念都是异步备份,就是一个事务完成了之后,直接返回程序,然后纪录日志,由复制进程重放日志进行数据复制。同步备份的概念,就是一个事务只有当完成了数据复制之后,才返回到程序中。当然同步的性能一定会比异步的性能差一个量级。}

我要回帖

更多关于 postgresql 主从切换 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信