pgpool-II读写分离
IP 角色 端口 192.168.0.31 master 5432 pgpool-II 9999 192.168.0.32 slave 5432
一、基础环境配置
host设置修改名称,如果在下面的配置中无法使用主机名称,则使用IP地址
hostnamectl set-hostname master hostnamectl set-hostname slave 192.168.0.31 master 192.168.0.32 slave
安装
PostgreSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
# 添加源 rpm -Uvh https://yum.postgresql.org/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm # 下载 yum install postgresql10-server postgresql10 # 安装 /usr/pgsql-10/bin/postgresql-10-setup initdb# 启动 systemctl enable postgresql-10.service systemctl start postgresql-10.service# 验证 su - postgres -c "psql" # 出现以下信息则成功 psql (10.0) Type "help" for help. postgres=## 创建密码 postgres=# ALTER USER postgres WITH PASSWORD 'postgres';# 查看路径(/var/lib/pgsql/10/data) postgres=# show data_directory;# 编辑文件 (vi /var/lib/pgsql/10/data/pg_hba.conf) # host all all 127.0.0.1/32 ident 修改为允许所有网络登录,并使用md5方式进行认证: # host all all 0.0.0.0/0 md5# 编辑文件 (vi /var/lib/pgsql/10/data/postgresql.conf) listen_addresses = '*' # 表示开放外网访问# 打开防火墙,或者禁用防火墙 sudo firewall-cmd --add-service=postgresql --permanent sudo firewall-cmd --reload # 重启 systemctl restart postgresql-10.service
pgpool-II
1 2 3 4 5 6 7 8 9 10 11
# 安装 yum install https://www.pgpool.net/yum/rpms/4.2/redhat/rhel-7-x86_64/pgpool-II-pg10-4.2.4-1pgdg.rhel7.x86_64.rpm yum install https://www.pgpool.net/yum/rpms/4.2/redhat/rhel-7-x86_64/pgpool-II-pg10-debuginfo-4.2.4-1pgdg.rhel7.x86_64.rpm # 可选 yum install pgpool-II-https://www.pgpool.net/yum/rpms/4.2/redhat/rhel-7-x86_64/pgpool-II-pg10-devel-4.2.4-1pgdg.rhel7.x86_64.rpm yum install pgpool-II-https://www.pgpool.net/yum/rpms/4.2/redhat/rhel-7-x86_64/pgpool-II-pg10-extensions-4.2.4-1pgdg.rhel7.x86_64.rpm#启动 systemctl enable pgpool.service systemctl start pgpool.service
二、流复制
Master
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 创建用于复制的用户 su - postgres psql postgres=# CREATE ROLE pgrepuser REPLICATION LOGIN PASSWORD 'pgreppass'; # 编辑文件 (vi /var/lib/pgsql/10/data/pg_hba.conf) # host replication pgrepuser 0.0.0.0/0 md5# 编辑文件 (vi /var/lib/pgsql/10/data/postgresql.conf),修改配置(根据实际情况填写) wal_level = hot_standby archive_mode = on max_wal_sender = 4 wal_keep_segments = 10# 重启数据库 systemctl restart postgresql-10.service
Slave
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# 停止服务 systemctl stop postgresql-10.servicesu - postgres # 使用 pg_basebackup 生成备库 #1. 清空 $PGDATA 目录 rm -rf /var/lib/pgsql/10/data# pg_basebackup 命令生成备库 pg_basebackup -D /var/lib/pgsql/10/data -Fp -Xs -v -P -h master -U pgrepuser# 编辑文件 (vi /var/lib/pgsql/10/data/postgresql.conf) hot_standby = on# 新建文件 (vi /var/lib/pgsql/10/data/recovery.conf) #注意PGSQL-12的版本似乎不支持这个文件,直接改到postgresql.conf standby_mode = 'on' primary_conninfo = 'host=master port=5432 user=pgrepuser password=pgreppass' trigger_file = 'failover.now' recovery_target_timeline = 'latest'# 重启数据库 systemctl restart postgresql-10.service#验证:在master新增数据slave节点可以看到数据。
三、读写分离
pgpool配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
cd /etc/pgpool-II cp -pv pgpool.conf.sample-stream pgpool.conf# 修改 vi pgpool.conf listen_addresses = '*'# 外网访问 # 0为主库 backend_hostname0 = 'master backend_port0 = 5432 backend_weight0 = 0 # 分配比例 backend_data_directory0 = '/var/lib/pgsql/10/data' backend_flag0 = 'ALLOW_TO_FAILOVER' backend_hostname1 = 'slave' backend_port1 = 5432 backend_weight1 = 1 backend_data_directory1 = '/var/lib/pgsql/10/data' backend_flag1 = 'ALLOW_TO_FAILOVER' #hba认证 enable_pool_hba = on # 执行log log_statement = on log_per_node_statement = on # 流复制 sr_check_user = 'replicator' # 流复制账号 sr_check_password = '123456' # 流复制密码 # 函数默认分发到从节点,过滤如下 black_function_list = 'currval,lastval,nextval,setval,funcw_.*'# 修改 vi pool_hba.conf host all all 0.0.0.0/0 md5# 修改 vi pcp.conf pcp:e10adc3949ba59abbe56e057f20f883e # 密码为123456# 生成pool_passwd pg_md5 123456# 与 postgresql 用户密码一致 pg_md5 -m -u postgres postgres# 启动pgpool # systemctl restart pgpool.service pgpool -n -d > /etc/pgpool-II/pgpool.log 2>&1 &# 连接 su - postgres psql postgres -h master -p 9999 -U postgres# 节点信息 postgres=# show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+----------+------+--------+-----------+---------+------------+-------------------+------------------- 0 | master | 5432 | up | 0.000000 | primary | 28 | false | 0 1 | slave | 5432 | up | 1.000000 | standby | 6 | true | 0# 查看日志 tail -f /etc/pgpool-II/pgpool.log # 下面是测试情况: # select 1; 2017-10-30 06:38:25: pid 3637: LOG: DB node id: 1 backend pid: 3658 statement: select * from test where id = 1;# update test set name = 'test' where id = 2; DB node id: 0 backend pid: 8032 statement: update test set name = 'test' where id = 2; #/*REPLICATION*/select 1; # 强制master节点执行 DB node id: 0 backend pid: 8032 statement: /*REPLICATION*/select 1; # DB node id,0表示主节点执行,1表示从节点
四、错误解决
端口占用
1 2 3 4 5 6
2017-10-30 01:50:21: pid 3790: FATAL: failed to bind a socket: "/tmp/.s.PGSQL.9998" 2017-10-30 01:50:21: pid 3790: DETAIL: bind socket failed with error: "Address already in use"# 非正常结束导致的,删除以下目录即可 rm -f /tmp/.s.PGSQL.9999 rm -f /tmp/.s.PGSQL.9898
五、后续优化
宕机主从切换
1 2
# 修改 vi pgpool.conf follow_master_command = '/etc/pgpool-II/failover_stream.sh'
新建切换脚本
1 2 3 4 5 6 7 8 9 10 11
#! /bin/sh # Failover command for streaming replication. # Arguments: $1: new master hostname. new_master=$1 trigger_command="$PGHOME/bin/pg_ctl promote -D $PGDATA" # Prompte standby database. /usr/bin/ssh -T $new_master $trigger_command exit 0;
pgpool集群
配置虚拟ip(delegate_IP),使用WATCHDOG监控,服务A宕机时,服务B自动接管虚拟IP对外提供服务。
pgpool-II读写分离相关推荐
- pgpool读写分离,配置设置及调研
pgpool基于官方版本4.2. pgpool读写分离适用的集群管理模式 先了解一下pgpool支持的几种模式. Clustering modehttps://www.pgpool.net/docs/ ...
- hibernate oracle 读写分离_利用FDW进行ORACLE到Postgresql的数据迁移
随着开源数据库技术的发展和去"O"工作的推进,越来越多企业生产系统选择使用Postgresql数据库.Pgsql采用多进程结构,其存储过程.函数的支持好于mysql.个人认为pgs ...
- PostgreSQL高可用(二)使用pgpool实现主从切换+读写分离
文章目录 1主从流复制 1.1 主机分配 2主从切换 2.1 手动切换 2.2 pgpool 自动切换 2.2.1 解压编译安装 2.2.2 添加环境变量 2.2.3 配置pool_hba.conf ...
- PG基于pgpool-II实现读写分离和负载均衡
PG基于pgpool-II实现读写分离和负载均衡 PG:12 pgpool-II:4.2.2 OS:CentOS7.6 IP 主机名 作用 port 类型 备注 172.72.6.2 mambapg6 ...
- mysql5.6主从复制与基于amoeba实现读写分离
Mysql5.6主从复制 1.特性分析说明: mysql 5.6支持多线程复制的机制并且mysql 5.6还引用了GTID的概念,使得其复制功能的配置.监控及管理变得更加易于实现,且更加健壮. TID ...
- Linux随笔19-MySQL主从复制、Percona XtraBackup实现全量和增量备份、ProxySQL实现读写分离
Contents 1. MySQL5.7实现主从复制 1.1 基础环境 1.2. 配置主从复制 1.2.1. master节点上的配置 1.2.2. slave节点上的配置 1.2.3. 中继日志问题 ...
- 基于pgpool-II读写分离+postgresql10主从从流复制高可用部署方案
一.环境准备 1.准备3台centos服务器: pgpool-II版本:pgpool-II-pg10-4.2.0-1pgdg postgresql版本:postgresql10 Server01:10 ...
- sqlserver AlwaysOn实现读写分离配置及java/net代码实现
1.用读写分离的原因: O.读写量很大,为了提升数据库读写性能,将读写进行分离: O.如果多机房下写少读多,同时基于数据一致性考虑,只有一个主库存入所有的数据写入,本地再做从库提供读取,减少多机房间直 ...
- Lightdb Pgpool-II 读写分离使用
目录 一.介绍 二.pgpool-II下载 三.pgpool-II 安装 1.源码安装前提 2.解压编译安装 3.添加环境变量 4.配置pool_hba.conf 5.配置pcp.conf 6.配置p ...
最新文章
- 基于CNN的图像缺陷分类
- 受显微镜下线虫启发,MIT人工智能实验室推出“液态”神经网络
- Pulsar集群搭建部署
- 在html使用a标签 直接下载图片 不通过后台实现直接下载
- Vue.js 极简小例:读值、样式调用、if判断、a 标签、点击事件、管道
- Java多线程的使用
- 如何安装Linux操作系统
- /proc/sys/net/ipv4/目录介绍
- python68个内置函数_直接在python中检索68个内置函数?
- 433MHz LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)
- 自定义IE地址栏图标
- python系统学习:第三周之文件操作
- DDS产生波形及AM 调制解调原理
- Mac部分按键失灵问题解决
- wireshark打开cap抓包文件不能显示中文
- 从0到1构建基于Springboot+SpringCloud的微信点餐系统
- 手机dlna到linux,linux dlna服务器
- python解二元一次方程组
- Beats:使用 Heartbeat 来检查 TLS 证书是否将要过期
- Android--打造流行的无数据空布局页面
热门文章
- iphone4s刷机
- iptables详解(转)
- python获取汉字拼音查询翻译器_Python 返回汉字的汉语拼音
- C语言编程题—N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,
- NAT技术的简要概述
- Oracle APEX 系列文章5:在阿里云上打造属于你自己的APEX完整开发环境 (进一步优化)
- C语言的历史和起源是什么?
- 前端工程师的摸鱼日常(18)
- 1577_AURIX_TC275_MTU中检测控制相关寄存器
- 漫长的告别读后感 - 说一声再见,就是死去一点点