Postgresql流复制安装
- 版本
Centos6.9+postgresql9.6
- 单机安装
- 下载yum源(不同版本请到官网找对应的yum源https://www.postgresql.org/download/linux/redhat/)
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6.9-x86_64/pgdg-centos96-9.6-3.noarch.rpm
- 安装PostgreSQL客户端
yum install postgresql96
- 安装PostgreSQL服务端
yum install postgresql96-server
- 安装PostgreSQL拓展包(可选)
yum install postgresql96-devel.x86_64
- 安装PostgreSQL的附加模块(可选)
$ yum install postgresql96-contrib.x86_64
#安装目录默认在/usr/pgsql9.6/
- 初始化数据库并开启服务(centos版本不同,所用的命令也不同,请参照官网文档)
service postgresql-9.6 initdb
chkconfig postgresql-9.6 on
service postgresql-9.6 start
#数据及配置文件在/var/lib/pgsql/9.6/data/
- 安装完成后,操作系统会自动创建一个postgres用户用来管理数据库,为其初始化密码
passwd postgres
123456
- 使用postgres用户登录数据库,查看数据库
[[email protected] bin]# su postgres
bash-4.1$ psql
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
(3 rows)
- 创建一个数据库,查看
postgres=# CREATE DATABASE mytestdb OWNER postgres;
postgres=# \l
- 查看当前使用的数据库
postgres=# select current_database();
current_database
------------------
postgres
- 切换所连接的数据库
postgres=# \c mytestdb;
You are now connected to database "mytestdb" as user "postgres".
mytestdb=# select current_database();
current_database
------------------
mytestdb
(1 row)
- 创建表
mytestdb=# create table my_tb(name varchar(6),birth DATE);
CREATE TABLE
mytestdb=# \d
List of relations
Schema | Name | Type | Owner
--------+-------+-------+----------
public | my_tb | table | postgres
(1 row)
- 插入数据,查询数据
mytestdb=# insert into my_tb(name,birth) Values('lisi','1996-11-11');
INSERT 0 1
mytestdb=# select * from my_tb;
name | birth
------+------------
lisi | 1996-11-11
(1 row)
- 主备流复制-主节点
- 主备ip
主:192.168.111.129(上面已经安装了postgresql)
从:192.168.111.130(安装postgresql,)
- 在主库中创建复制用户
mytestdb=# CREATE USER repuser REPLICATION LOGIN CONNECTION LIMIT 2 ENCRYPTED PASSWORD '123456';
CREATE ROLE
mytestdb=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
repuser | Replication +| {}
| 2 connections |
- 在主节点的配置
配置/var/lib/pgsql/9.6/data/pg_hba.conf,添加以下配置项
host replication repuser 192.168.111.129/32 md5
#md5表示从库basebackup操作时需要repuser的输入密码,trust不用密码
- 设置主库/var/lib/pgsql/9.6/data/postgresql.conf添加内容如下
#监听
listen_addresses = '*'
#主从设置为热备模式,流复制必选参数
wal_level = hot_standby
#流复制允许的连接进程,一般同standby数量一致
max_wal_senders = 2
#流复制在没有基于文件的连续归档时,主服务器可能在备机收到WAL日志前回收这些旧的WAL,此时备机需要重新从一个新的基础备份初始化;可设置wal_keep_segments为一个足够高的值来确保旧的WAL段不会被太早重用;1个WAL日志为16MB,所以在设置wal_keep_segments时,在满足空间的前提下可以尽量设置大一些
wal_keep_segments = 64
#默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库
max_connections = 100
- 重启主服务
service postgresql-9.6 restart
- 主备流复制-从节点(先停止服务)
- 需要确认备库是否有与主库相同的数据目录,如果有移除
[[email protected] /]# cd /var/lib/pgsql/9.6/
[[email protected] 9.6]# ls
backups data pgstartup.log
[[email protected] 9.6]# mv data data_bk
[[email protected] 9.6]# mkdir data
[[email protected] 9.6]# ls
backups data data_bk pgstartup.log
[[email protected] 9.6]# chown -R postgres data
[[email protected] 9.6]# chmod 700 data
- 基础备份
[[email protected] ~]# su postgres
bash-4.1$ pg_basebackup -h 192.168.111.129 -p 5432 -U repuser -F p -P -D /var/lib/pgsql/9.6/data/
#-h,主库主机,-p,主库服务端口;
#-U,复制用户;
#-F,p是默认输出格式,输出数据目录和表空间相同的布局,t表示tar格式输出;
#-P,同--progress,显示进度;
#-D,输出到指定目录;
#因为主库采用的是md5认证,这里需要密码认证。
- 从库配置文件postgresql.conf
#在基础备份时,初始化文件是从主库复制来的,所以配置文件一致,可将wal_level,max_wal_senders与wal_keep_segments等参数注释,以下是新增或修改的参数
[[email protected]_standby ~]# vim /var/lib/pgsql/9.6/data/postgresql.conf
#在备份的同时允许查询
hot_standby = on
#可选,流复制最大延迟
max_standby_streaming_delay = 30s
#可选,从向主报告状态的最大间隔时间
wal_receiver_status_interval = 10s
#可选,查询冲突时向主反馈
hot_standby_feedback = on
#默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库
max_connections = 1000
- 恢复文件recovery.conf并配置
cp /usr/pgsql-9.6/share/recovery.conf.sample /var/lib/pgsql/9.6/data/recovery.conf
chown postgres:postgres /var/lib/pgsql/9.6/data/recovery.conf
vim /var/lib/pgsql/9.6/data/recovery.conf
#指明从库身份
standby_mode = on
#连接到主库信息
primary_conninfo = 'host=192.168.111.129 port=5432 user=repuser password=123456'
#同步到最新数据
recovery_target_timeline = 'latest'
#指定触发文件,文件存在时,将触发从库提升为主库,前提是必须设置”standby_mode = on”;如果不设置此参数,也可采用”pg_ctl promote“触发从库切换成主库
#trigger_file = ‘/var/lib/pgsql/9.6/data/trigger_activestandby’
- 启动从库
[[email protected] ~]# service postgresql-9.6 start
- 测试
- 测试查看主从进程
- 数据同步测试
主
从
- 从节点插入数据
从节点只能读
- 分别查看主从状态./pg_controldata /var/lib/pgsql/9.6/data/
- 干掉主su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl stop -m fast"
- **从su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl promote"
参考:https://www.cnblogs.com/netonline/archive/2017/10/13/7660767.html