搭建PostgreSQL主从架构
PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS),被业界誉为“先进的开源数据库”,支持NoSQL数据类型,主要面向企业复杂查询SQL的OLTP业务场景。
并且提供PostGIS地理信息引擎,也是我本次使用它的原因。经常在网上看到“PostgreSQL —— 世界上最流行的数据库”
这一次 从零开始 搭建PG主从架构,做读写分离。
1. 配置PostgreSQL下载源
首先准备两台服务器,安装PostgreSQL主从。版本选择这块,选了中间版本13
(详细版本是:13.12)。各版本信息可以在官网查看:https://www.postgresql.org/docs/
1 | // 首先下载PostgreSQL的RPM文件包 |
2. 安装PostgreSQL
根据自己业务需要,除了sever包之外,这里我还会多安装两个包。(如果不需要可以不装)
- postgresql13-server:数据库
- postgresql13-contrib:自定义函数需要通过contrib模块进行扩展
- pg_cron_13:PostgreSQL定时任务插件
1 | // 安装 |
自定义数据存储目录
默认的存储目录是/var/lib/pgsql/13/data
。可以修改为自定义
1 | vim /usr/lib/systemd/system/postgresql-13.service |
修改默认的存储目录,然后重新加载一次服务
1 | systemctl daemon-reload |
配置服务器postgres用户密码
因为安装PG数据库之后 会自动创建postgres用户,可以设置一下密码
1 | // 设置postgres用户密码,回车之后输入密码确认即可 |
至此 在两台机器上 都执行完成这些命令之后,准备工作就差不多完成了。
主库搭建
首先初始化数据库,并配置启动
1 | // 初始化数据库 |
修改配置文件
配置文件有很多选项需要优化,优化放到最后说,搭建我们只需要注意三个配置即可
1 | // 编辑postgresql.conf |
listen_addresses为*,max_connections调大到500,wal_level决定多少信息写入到 WAL中。默认值是replica
1 | listen_addresses = '*' |
创建主从复制账号
登录到PG,并创建用于主从复制的账号
1 | // 登录postgres用户 |
在pg_hba.conf 中增加一行从库节点机器IP段。自己查看服务器IP和内网网段。方法配置trust表示直接信任
1 | vim /var/lib/pgsql/13/data/pg_hba.conf |
1 | host replication slavereplica 192.168.0.0/16 trust |
1 | // 全部配置完成之后重新启动 |
主库的配置就全部完成了,接下来是从库的操作了
从库搭建
从库的配置比较简单了,迁移主库数据就可以了
1 | // 初始化数据库 |
备份完成,会在数据库实例目录下自动生成standby.signal“信号”文件,并在postgresql.auto.conf文件写入了主库的连接信息
1 | // 启动从库 |
1 | pg_is_in_recovery |
同时在主库机器执行以下命令 可以查看到集群状态
1 | sudo -u postgres /usr/pgsql-13/bin/psql -c "select * from pg_stat_replication" |
用户访问权限配置
如果需要外网访问,需要配置权限。
编辑pg_hba.conf文件,新增一行 允许所有用户所有库所有IP访问
1 | host all all 0.0.0.0/0 scram-sha-256 |
这是最省事的方法,但是不太安全,建议是单个用户单个配置
- 第一列:类型 (host固定)
- 第二列:数据库 (all表示所有数据库,可以单独设置库名)
- 第三列:用户 (all表示所有用户,可以单独设置用户)
- 第四列:IP-CIDR表达式 (0.0.0.0/0表示不限制)
- 第五列:认证方式 (scram-sha-256=密码认证;trust=直接信任)
postgresql.conf配置优化
数据库的配置,需要根据服务器性能合理配置。这里推荐一个参考项目:填入机器配置,可以自动生成对于的数据库配置信息(可以参考)
项目地址:https://pgtune.leopard.in.ua
配置信息说明
持续完善中。。。
1 | max_connections = 1000 # 最大连接数 |
pgadmin管理端
数据库管理工具这一块,可以使用pgadmin。用docker可以快速搭建好,这样就可以通过web端在游览器管理数据库了
https://www.pgadmin.org/download/pgadmin-4-container/
Docker命令如下:配置了管理员的登录邮箱和密码
1 | docker run --name "pgadmin4" \ |
启动成功之后,登录pgadmin并配置数据库的连接信息之后,就可以在WEB端对数据库进行监控和管理了。