说明:本系列文章仅用于共享我的学习成果,未经过生产系统考验,对于知识点和一些组件的使用会不定时更新,仅供参考,如有错误的地方,欢迎留言共同学习。
本高可用系列测试不说理论知识,如有需要自行百度,因生产环境大多数是内网环境,无法连接互联网,为模拟生产环境安装,PostgreSQL高可用测试均采用离线部署。
所需软件包均以打包上传百度网盘,如有需要自行下载:https://pan.baidu.com/s/1Tb7GPMvj4kfKEIh8iyvdbA 提取码:n9w2 文件名:PostgreSQL_HA.tar.gz
第一章: 介绍测试环境
第二章: PostgreSQL + replication 部署
第三章: Etcd 部署和管理
第四章: Patroni 部署和管理
第五章: HAProxy + Keepalived 部署和管理
第六章: 高可用模拟故障测试用例
第七章: Prometheus + Grafana 监控部署
第八章: 高可用管理
第一章: 介绍测试环境
1. 自制的测试环境架构图
2. 节点信息
主机名 | IP地址 | 系统版本 | PostgreSQL | Etcd | Patroni | HAProxy | Keepalived | Grafana | Prometheus |
---|---|---|---|---|---|---|---|---|---|
pgtest1 | 192.168.58.10 | CentOS 7.4.1708 | Primary | √ | √ | √ | √ | - | - |
pgtest2 | 192.168.58.11 | CentOS 7.4.1708 | Standby | √ | √ | √ | √ | - | - |
pgtest3 | 192.168.58.12 | CentOS 7.4.1708 | Standby | √ | √ | - | - | √ | √ |
3. 所需软件版本和下载地址
- PostgreSQL: 版本:13.3 下载地址: https://ftp.postgresql.org/pub/source/v13.3/postgresql-13.3.tar.gz
- Python: 版本:3.6.8 因源码安装耗时较长,在阿里开源镜像站下载rpm包做成YUM仓库,如有需要可在百度网盘下载:https://pan.baidu.com/s/1Tb7GPMvj4kfKEIh8iyvdbA 提取码:n9w2 文件名:python3-rpm.tar.gz
- Etcd: 版本:3.5.1 下载地址: https://github.com/etcd-io/etcd 文件名: etcd-v3.5.1-linux-amd64.tar.gz
- Patroni: 版本:2.1.1 在阿里开源镜像站下载,如有需要可在百度网盘下载:https://pan.baidu.com/s/1Tb7GPMvj4kfKEIh8iyvdbA 提取码:n9w2 文件名:patroni_etcd_2.1.1.tar.gz
- HAProxy: 版本:2.4.7 下载地址: https://www.haproxy.org/#down 文件名:haproxy-2.4.7.tar.gz
- Keepalived: 版本:2.2.4 下载地址: https://www.keepalived.org/download.html 文件名: keepalived-2.2.4.tar.gz
- Grafana: 版本:8.2.2 下载地址: https://grafana.com/grafana/download 文件名: grafana-enterprise-8.2.2.linux-amd64.tar.gz
- Prometheus: 版本:2.30.3 下载地址: https://github.com/prometheus/prometheus 文件名:prometheus-2.30.3.linux-amd64.tar.gz
4. 其他会用到的小工具
- benchmarksql: 用途:PostgreSQL压力测试 下载地址:https://udomain.dl.sourceforge.net/project/benchmarksql/benchmarksql-5.0.zip
- etcd-browser: 用途:etcd的web可视化界面 下载地址:https://github.com/henszey/etcd-browser
- nodejs: 用途:启动etcd-browser 下载地址:https://nodejs.org/zh-cn/download/
- jq: 用途:格式化命令行显示结果为JSON格式 下载地址:https://stedolan.github.io/jq/download/
- JsonView: 用途:格式化谷歌浏览器显示结果为JSON格式 下载地址:https://github.com/gildas-lormeau/JSONView-for-Chrome
以上所需软件包均以打包上传百度网盘,如有需要自行下载:https://pan.baidu.com/s/1Tb7GPMvj4kfKEIh8iyvdbA 提取码:n9w2 文件名:PostgreSQL_HA.tar.gz
5. 如果配置防火墙,需要开放的端口
程序 | 端口 | 用途 |
---|---|---|
PostgreSQL | 5432 | 数据库监听端口 |
Patroni | 8008 | restapi监听端口 |
etcd | 2379/2380 | 客户端访问端口和服务监听端口 |
haproxy | 1080/5000/5001 | WEB访问端口和数据库对外服务端口 |
grafana | 3000 | WEB登录端口 |
prometheus | 9090 | WEB登录端口 |
node_exporter | 9100 | 对外服务端口 |
postgres_exporter | 9187 | 对外服务端口 |
haproxy_exporter | 9101 | 对外服务端口 |
linux 查看端口使用的命令:
[root@pgtest3 data]# netstat -lntup
复制
防火墙的使用参考文档:https://blog.csdn.net/s_p_j/article/details/80979450
6. python3、python3-devel 和 patroni[etcd] 的打包
在一个可以连接互联网的Linux主机上下载 python3 和 python3-devel 以及所需要的依赖包。
有两种方式,一种是yum命令的–downloadonly(我使用的这个),另一种是yumdownloader。
对于第一种方式,如果当前系统已经安装了需要的下载的软件包,则不会进行下载,需要先卸载再下载,不知道是否有参数能控制。
[root@yum ~]# yum remove python3 python3-devel --只能卸载当前包。不能卸载依赖包
[root@yum ~]# yum history list python3-devel
Loaded plugins: fastestmirror
ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
6 | remove python3 python3-d | 2021-10-16 14:48 | Erase | 6
5 | install python3-devel | 2021-10-16 14:31 | Install | 34
history list
[root@yum ~]# yum history undo 5 --完全卸载,包括依赖包
复制
下载安装包及其依赖包到指定目录下
[root@yum ~]# mkdir /root/python3-rpm
[root@yum ~]# yum install python3 python3-devel --downloadonly --downloaddir=/root/python3-rpm
复制
对于第二种方式,不用管当前系统是否安装了需要的下载的软件包,但是需要先安装yum-utils,而且这种方式会把i686架构的软件包也下载下来,参数中提示–archlist可是控制架构,但是不好使。
[root@yum ~]# yum -y install yum-utils
[root@yum ~]# yumdownloader python3 python3-devel --resolve --destdir=/root/python3-rpm
复制
使用 createrepo 命令创建yum源(软件仓库)
# 安装createrepo
[root@yum ~]# yum install http://createrepo.baseurl.org/download/createrepo-0.4.4-1.noarch.rpm -y
# 创建yum源
[root@yum /]# cd /root/python3-rpm/
[root@yum python3-rpm]# createrepo -v ./
# 打包
[root@yum python3-rpm]# cd /root
[root@yum ~]# tar -zcvf /root/python3-rpm.tar.gz python3-rpm
复制
打包 patroni[etcd]
[root@yum ~]# yum install python3 python3-devel -y
[root@yum ~]# mkdir /root/patroni_etcd_2.1.1
# --download 只下载不安装
[root@yum ~]# pip3 install patroni[etcd] -i https://mirrors.aliyun.com/pypi/simple/ --download /root/patroni_etcd_2.1.1
[root@yum ~]# pip3 install psycopg2-binary -i https://mirrors.aliyun.com/pypi/simple/ --download /root/patroni_etcd_2.1.1
[root@yum ~]# pip3 install psycopg2 -i https://mirrors.aliyun.com/pypi/simple/ --download /root/patroni_etcd_2.1.1
or
[root@yum ~]# wget -P /root/patroni_etcd_2.1.1 https://mirrors.aliyun.com/pypi/packages/14/65/223a5b4146b1d5d5ab66f16ef194916a1ed9720da1f118d7bfb60b8f2bea/psycopg2-binary-2.9.1.tar.gz
[root@yum ~]# wget -P /root/patroni_etcd_2.1.1 https://mirrors.aliyun.com/pypi/packages/aa/8a/7c80e7e44fb1b4277e89bd9ca509aefdd4dd1b2c547c6f293afe9f7ffd04/psycopg2-2.9.1.tar.gz
[root@yum ~]# ll /root/patroni_etcd_2.1.1
total 3308
-rw-r--r-- 1 root root 97516 Nov 1 05:13 click-8.0.3-py3-none-any.whl
-rw-r--r-- 1 root root 241997 Nov 1 05:13 dnspython-2.1.0-py3-none-any.whl
-rw-r--r-- 1 root root 17798 Nov 1 05:13 importlib_metadata-4.8.1-py3-none-any.whl
-rw-r--r-- 1 root root 219752 Nov 1 05:13 patroni-2.1.1-py3-none-any.whl
-rw-r--r-- 1 root root 23591 Nov 1 05:13 prettytable-2.2.1-py3-none-any.whl
-rw-r--r-- 1 root root 470886 Nov 1 05:13 psutil-5.8.0.tar.gz
-rw-r--r-- 1 root root 379972 Nov 1 05:19 psycopg2-2.9.1.tar.gz
-rw-r--r-- 1 root root 380033 Nov 1 05:17 psycopg2-binary-2.9.1.tar.gz
-rw-r--r-- 1 root root 247702 Nov 1 05:13 python_dateutil-2.8.2-py2.py3-none-any.whl
-rw-r--r-- 1 root root 37270 Nov 1 05:13 python-etcd-0.4.5.tar.gz
-rw-r--r-- 1 root root 603963 Nov 1 05:13 PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
-rw-r--r-- 1 root root 11053 Nov 1 05:13 six-1.16.0-py2.py3-none-any.whl
-rw-r--r-- 1 root root 26288 Nov 1 05:13 typing_extensions-3.10.0.2-py3-none-any.whl
-rw-r--r-- 1 root root 138764 Nov 1 05:13 urllib3-1.26.7-py2.py3-none-any.whl
-rw-r--r-- 1 root root 30763 Nov 1 05:13 wcwidth-0.2.5-py2.py3-none-any.whl
-rw-r--r-- 1 root root 42808 Nov 1 05:13 ydiff-1.2.tar.gz
-rw-r--r-- 1 root root 5313 Nov 1 05:13 zipp-3.6.0-py3-none-any.whl
# 打包
[root@yum ~]# tar -zcvf patroni_etcd_2.1.1.tar.gz patroni_etcd_2.1.1
复制
最后修改时间:2021-11-04 02:32:09
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
很不错,用心写了,非常全
3年前

3
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
2031次阅读
2025-04-21 16:58:09
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
383次阅读
2025-04-15 14:48:05
QPlus V6.3 更新,新增PostgreSQL与PolarDB PG支持,OceanBase 容灾管理重磅上线
沃趣科技
261次阅读
2025-05-13 09:39:27
4月“墨力原创作者计划”获奖名单公布!
墨天轮编辑部
206次阅读
2025-05-13 16:21:59
中国PostgreSQL培训认证体系新增PGAI应用工程师方向
开源软件联盟PostgreSQL分会
192次阅读
2025-05-06 10:21:13
华象新闻 | PostgreSQL 18 Beta 1、17.5、16.9、15.13、14.18、13.21 发布
严少安
170次阅读
2025-05-09 11:34:10
PG生态赢得资本市场青睐:Databricks收购Neon,Supabase融资两亿美元,微软财报点名PG
老冯云数
170次阅读
2025-05-07 10:06:22
SQL 优化之 OR 子句改写
xiongcc
152次阅读
2025-04-21 00:08:06
告别老旧mysql_fdw,升级正当时
NickYoung
128次阅读
2025-04-29 11:15:18
PostgreSQL中文社区亮相于第八届数字中国峰会
PostgreSQL中文社区
119次阅读
2025-05-07 10:06:20
TA的专栏
目录