master: 10.10.1.61
slaver: 10.10.1.62
yum源看官方文档https://www.postgresql.org/download/linux/redhat/
安装官方yum源(安装postgresql 10版yum源)
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
一、yum安装
yum install -y postgresql postgresql-server
安装完成后不能直接启动数据库,需要先手动初始化数据库:
service postgresql initdb
再启动数据库:
systemctl start postgresql
切换到操作系统下的“postgres”用户,登陆数据库:
su - postgres
-bash-4.2$psql
(安装的PostgreSQL的数据目录,默认在/var/lib/pgsql/data)
二、主从配置
1、主数据配置(10.10.1.61)
1.1 初始化
service postgresql initdb
1.2 启动postgresql
systemctl start postgresql
1.3 切换到postgres用户(安装好生成默认的用户)
su - postgres
-bash-4.2$psql
1.4 创建账号并授权
postgres=# create role 账户名 login replication encrypted password '密码';
1.5 修改/var/lib/pgsql/data/pg_hba.conf配置文件.
host replication repl 10.10.1.0/24 md5
host all repl 10.10.1.0/24 trust
1.6 修改postgresql.conf
-bash-4.2$ vim postgresql.conf
listen_addresses = '10.10.1.61'
wal_level = hot_standby #热备模式
max_wal_senders= 6 #可以设置最多几个流复制链接,差不多有几个从,就设置多少
wal_keep_segments = 10240 #重要配置
#wal_send_timeout = 60s 无效
max_connections = 512 #从库的 max_connections要大于主库
archive_mode = on #允许归档
archive_command = 'test ! -f /var/lib/pgsql/data/archivedir/%f && cp %p /var/lib/pgsql
/data/archivedir/%f' #根据实际情况设置
三、从数据库配置(10.10.1.62)
1、切换到postgres
[root@localhost data]# su - postgres
2、拷贝master配置相关文件。
-bash-4.2$ rm -rf /var/lib/pgsql/data/*
-bash-4.2$ pg_basebackup -h 10.10.1.61 -U repl -D /var/lib/pgsql/data -X stream -P
-bash-4.2$ cp /usr/share/pgsql/recovery.conf.sample /var/lib/pgsql/data/recovery.conf
3、修改recovery.conf文件
standby_mode = on
primary_conninfo = 'host=10.10.1.61 port=5432 user=repl password=123456'
#trigger_file = '/var/lib/pgsql/9.6/data/trigger.kenyon' #主从切换时后的触发文件 (没有配置,使用默认)
recovery_target_timeline = 'latest'
4、修改postgresql.conf文件
listen_addresses = 10.10.1.62
wal_level = hot_standby
max_connections = 1000 #一般从的最大链接要大于主的。
hot_standby = on #说明这台机器不仅仅用于数据归档,也用于查询
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s #多久向主报告一次从的状态。
hot_standby_feedback = on #如果有错误的数据复制,是否向主进行范例
四、检测
1、在master数据库中测试
postgres=# select client_addr,sync_state from pg_stat_replication;
client_addr | sync_state
-------------+------------
10.10.1.61 | async
(1 row)
2、在master数据库中创建test数据库
postgres=# create database test;
CREATE DATABASE
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 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)
postgres=#
3、在从数据库中查看数据库是否同步。
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 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)
安装postgis插件(postgis24_10)
安装时出现没有依赖包,解决(安装以下版本的epel源):
rpm -ivh ftp://bo.mirror.garr.it/1/slc/centos/7.0.1406/extras/x86_64/Packages/epel-release-7-5.noarch.rpm
yum install -y postgis24_10
psql -d ltpostgis -f /usr/share/postgresql/10/contrib/postgis-2.4/postgis.sql
psql -d chat -f /usr/share/postgresql/10/contrib/postgis-2.4/postgis.sql
psql -d chat -f /usr/share/postgresql/10/contrib/postgis-2.4/spatial_ref_sys.sql
psql -d chat -f /usr/share/postgresql/10/contrib/postgis-2.4/topology.sql
CREATE EXTENSION pg_trgm;
psql chat -c'CREATE EXTENSION pg_trgm;'
原文链接:http://www.chenxujiang.club/article/5