一、安装postgresql、postgis(有9.6/11.6/13/14各版本的离线安装包)
以下例子安装的版本为postgresql13、postgis30_13,因已提前准备好安装所需的RPM包,所以使用RPM形式安装。
安装包链接:https://pan.baidu.com/s/1lFL6tmK5KBUkJAPSV3r9iA
提取码:1012
1、rpm包安装:
mkdir /tmp/pgsql && cd /tmp/pgsql
将13版本的RPM包传到/tmp/pgsql中
rpm -ivh *.rpm --nodeps --force
2、查看安装结果:rpm -qa | grep postg
#输出结果
postgresql13-server-13.6-1PGDG.rhel7.x86_64
postgresql13-contrib-13.6-1PGDG.rhel7.x86_64
postgresql-libs-9.2.24-7.el7_9.x86_64
postgis30_13-3.0.5-1.rhel7.x86_64
postgresql13-libs-13.6-1PGDG.rhel7.x86_64
postgresql13-13.6-1PGDG.rhel7.x86_64
postgis30_13-client-3.0.5-1.rhel7.x86_64
3、配置:
# 初始化数据库 #
/usr/pgsql-13/bin/postgresql-13-setup initdb
# 启动pg #
systemctl start postgresql-13
# 设置开机启动#
systemctl enable postgresql-13
4、修改pg配置文件(此次安装的服务器数据盘是/data/)
vi /var/lib/pgsql/13/data/postgresql.conf
#取消data_directory注释,修改data_directory = 'ConfigDir'为data_directory = '/data/pgsql_data/'
data_directory = '/data/pgsql_data/'
#修改最大连接数
max_connections
#将监听地址修改为*
#默认listen_addresses配置是注释掉的,所以可以直接在配置文件开头加入该行
listen_addresses='*'
#修改配置文件
vi /var/lib/pgsql/13/data/pg_hba.conf
#在问价尾部加入,如果出现其他数据库连不上pgsql,就将md5修改为trust。修改为trust后会导致连接数据库时不需要密码
host all all 0.0.0.0/0 md5
创建pgsql数据存储路径:mkdir -p /data/pgsql_data/
cp -r /var/lib/pgsql/13/data/* /data/pgsql_data/
chown -R postgres:postgres /data/pgsql_data/
mv /var/lib/pgsql/13/data /tmp/data
vi /usr/lib/systemd/system/postgresql-13.service
# 将Environment=PGDATA=/var/lib/pgsql/13/data/修改为Environment=PGDATA=/data/pgsql_data/
Environment=PGDATA=/data/pgsql_data/
#重启PostgreSQL服务
chmod 700 /data/pgsql_data
systemctl daemon-reload
systemctl restart postgresql-13
5、修改postgres账号密码:
1、进入PostgreSQL命令行:su postgres
2、启动SQL Shell:psql
3、修改密码:ALTER USER postgres WITH PASSWORD 'Psql@135';
4、\q用于退出psql命令行
然后使用navicat连接pgsql,能连接表示安装成功。也可以使用命令行连接pgsql。
二、postgresql13主从配置:
1、主库设置:
1.1、创建同步账号:
登陆Master库,创建具有用于传递数据的具有replication权限的用户【也可以直接用Super user当作replication用户,但不推荐】
CREATE ROLE repl login replication password 'Psql!@135';
1.2、修改Master库的pg_hba.conf,把Master库和Standby库的IP地址添加进Master库网络策略白名单中,使Standby库可以连上 Master库,同时便于主备切换:
host replication repl 从库IP/32 trust
host replication repl 主库IP/32 trust
修改master库postgresql.conf文件:vi postgresql.conf
wal_level = replica # 开启wal日志归档
max_wal_senders = 10 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 1000 # 这个设置要注意下,从库的max_connections必须要大于主库的
shared_buffers = 8GB #推荐内存的1/4
synchronous_standby_names = ''
hot_standby = on
work_mem = 128MB
maintenance_work_mem = 64MB
archive_mode = on
archive_command = 'cp %p /data/pgsql_data/arch_dir/%f; find /data/pgsql_data/arch_dir -type f -mtime +7 |xargs rm -f'
1.3、新建归档目录,赋予权限,重启主库:
mkdir -p /data/pgsql_data/arch_dir
chown -R postgres:postgres /data/pgsql_data
systemctl restart postgresql-13
2、从库配置:
2.1、停止postgres服务:systemctl stop postgresql-13
2.2、删除从库数据文件:rm -rf /data/pgsql_data/*
2.3、从主库拉取数据文件:/usr/pgsql-13/bin/pg_basebackup -h 主库IP -U repl -F p -P -R -D /data/pgsql_data
2.4、修改所属组:chown -R postgres:postgres /data/pgsql_data
2.5、修改postgresql.conf:vi postgresql.conf
hot_standby = on
max_connections = 1200
2.6、启动从库,并在主库中查看流复制的信息可以使用主库上的视图:systemctl start postgresql-13(从库中运行)
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;(主库中运行)
pid | state | client_addr | sync_priority | sync_state
-------+-----------+--------------+---------------+------------
58243 | streaming | 35.80.151.13 | 0 | async
(如看到从库IP35.80.151.13,则表明主从已同步)
2.7、再次测试主动同步:
在主库创建数据库test:进入数据库,运行create database test;
去从库查看是否出现test:SELECT datname FROM pg_database;
在主库删除test数据库:drop database test;
对比主从数据库大小:select pg_size_pretty(pg_database_size('DB_name'));
三、主备切换步骤(12.0以上版本切换步骤。以下为切换演练,停止主库pgsql,模拟主库故障):
1、在主库操作:systemctl stop postgresql-13
2、在备库操作:su - postgres
psql
select pg_promote(true,60);
3、验证(在主库和备库上运行以下一条命令查看输出结果):
/usr/pgsql-13/bin/pg_controldata /data/pgsql_data
主备库英文显示如下:
Database cluster state: in production(表示此为主库)
Database cluster state: in archive recovery(表示此为备库)
主备库中文显示如下:
数据库簇状态: 在运行中(表示此为主库)
数据库簇状态: 正在归档恢复(表示此为备库)
4、如果原来的主库因为宕机,将备库切换为主库后。原主库经修复后恢复正常,此时启动原主库后,原主库也会显示为in production,因此需要将原主库降为备库,操作与建立备库时一样。
# 12.0以下版本切换步骤
1、在主库操作:systemctl stop postgresql-11
2、在备库操作:su postgres
2.1、检查状态:/usr/pgsql-11/bin/pg_controldata -D /data/pgsql_data
# 显示in archive recovery说明为备库
Database cluster state: in archive recovery
2.2、 激活备库为可读写:/usr/pgsql-11/bin/pg_ctl promote -D /data/pgsql_data/
2.3、检查备库上的数据库角色:/usr/pgsql-11/bin/pg_controldata -D /data/pgsql_data
如果:Database cluster state: 显示in production说明已经提升为主库。
2.4、此时原主库也是in production状态,需要将其转换成备库(主库降为备库的操作见如上从库的配置步骤):
停止postgres服务:systemctl stop postgresql-11
删除数据文件:rm -rf /data/pgsql_data/*
从主库拉取数据文件:/usr/pgsql-11/bin/pg_basebackup -h 主节点ip -U repl -F p -P -R -D /data/pgsql_data
修改所属组:chown -R postgres:postgres /data/pgsql_data
修改postgresql.conf:vi postgresql.conf
max_connections = 1200
启动pgsql服务:systemctl start postgresql-11
查看数据库角色是否变为备库:/usr/pgsql-11/bin/pg_ctl promote -D /data/pgsql_data/(是否显示为in archive recovery)