postgresql主从复制的文档
注意注意:
如何虚拟机中已安装有postgresql ,删除如下:
yumerase postgresql*
rm-rf /var/lib/pgsql
a.准备两个ip,如下:
(主库)192.168.1.40,(从库)192.168.1.41
b.安装postgresql(主从)
1.添加RPM
yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm
若安装过,则显示不更新,不影响。
2.安装PostgreSQL 9.5
yum install postgresql95-serverpostgresql95-contrib
3.初始化数据库
/usr/pgsql-9.5/bin/postgresql95-setup initdb
4.设置开机自启动
systemctl enablepostgresql-9.5.service
5.启动服务
systemctl startpostgresql-9.5.service systemctl statuspostgresql-9.5.service
Active(running)出现表示成功
c.主库的配置
1.mkdir /opt/pgsql/pg_archive
若存在就不需要在创建了。
2.创建用户 replica 密码是replica
su - postgres 切换用户,执行后提示符会变为 '-bash-4.2$'
psql -U postgres 登录数据库,执行后提示符变为 'postgres=#'
首先需要创建一个数据库用户进行主从同步。创建用户replica,并赋予登录和复制的权限。postgres# CREATE ROLE replica loginreplication encrypted password 'replica'
\du 可以查看角色,和他的功能。
3.修改pg_hba.conf,允许replica用户来同步。(可以进入xftp5,复制到桌面进行更改 /var/lib/pgsql/9.5/data/pg_hba.conf’)
注:(去掉其前#)/var/lib/pgsql/9.5/data/pg_hba.conf 可通过xftp5中进行修改
4.修改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必须要大于主库的
注:(去掉其前#)/var/lib/pgsql/9.5/data/postgresql.conf 可通过xftp5中进行修改
5.重启数据库
systemctlrestart postgresql-9.5.service
6.测试41能否连接40数据库。在41上运行如下命令:
psql -h 192.168.1.40 -U postgres
(表示已经连上主库,显示信息和主库一样)
d.从库的配置
1. su - postgres
手动进入xftp5 删除 /var/lib/pgsql/data/下的数据
pg_basebackup -h 192.168.1.40 -U replica -D /var/lib/pgsql/9.5/data -X stream -P # 从40拷贝数据到41(基础备份)
(这是个大坑,是先进入postgres 在进行复制的,不然是root权限)
mkdir /opt/pgsql/pg_archive
2.配置recovery.conf
复制/usr/pgsql-9.5/share/recovery.conf.sample 到 /var/lib/pgsql/9.5/data/recovery.conf
cp /usr/pgsql-9.5/share/recovery.conf.sample /var/lib/pgsql/9.5/data/recovery.conf
3.修改配置recovery.conf
standby_mode = on # 说明该节点是从服务器
primary_conninfo = 'host=192.168.1.40 port=5432 user=replica password=replica' # 主服务器的信息以及连接的用户
recovery_target_timeline = 'latest'
注:(去掉其前#)/var/lib/pgsql/9.5/data/recovery.conf 可通过xftp5中进行修改
4.配置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 # 如果有错误的数据复制,是否向主进行反馈
注:(去掉其前#)/var/lib/pgsql/9.5/data/postgresql.conf 可通过xftp5中进行修改
5.重启数据库
systemctl restart postgresql-9.5.service
Ok
e.验证是否成功
主节点:select client_addr,sync_state from pg_stat_replication;(;一定要加)
还可以在主从节点中分别用ps aux | grep postgres 进行查看
主节点:
从节点:
你还可以验证通过在主库中创建表,添加,删除数据,在从库中查看,会发现是同步的,但是从库中只能查看数据,不能对数据进行删除和添加,修改,例子如下:
主库:
从库:
主从复制配置完成,撒花嗷嗷嗷嗷嗷!!!!!!!!!