数据库 - PostgreSql - 双机热备技术:使用pgpool搭建高可用PostgreSQL HA的步骤

本文主要是介绍数据库 - PostgreSql - 双机热备技术:使用pgpool搭建高可用PostgreSQL HA的步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://blog.csdn.net/zhousenshan/article/details/52084097?utm_source=blogkpcl4

pgpool,功能比较多,具有连接池,复制,负载均衡,并行查询,和HA等。今天博主测试下HA配置。环境信息:两台虚拟机,ip分别由192 168 56  

双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即Active-Standby和Standby-Active状态)。

pgpool,功能不较多,具有连接池,复制,负载均衡,并行查询,和HA等。今天博主测试下HA配置

环境信息:

两台虚拟机,ip分别由192.168.56.101和192.168.56.102 。

PostgreSQL版本:9.3.5

PGHOME:/opt/PostgreSQL/93

PGDATA:/data/pgsql

PGPORT:5432

实验架构:

只有一个pgpool,只测试PostgreSQL热备自动切换功能。

pgpool1

实验步骤

1、准备PostgreSQL环境

在操作之前,需要安装好PostgreSQL,然后配置流复制环境。

这个步骤不明白的朋友可以参考之前的文章。

编译安装PostgreSQL:http://www.sijitao.net/1535.html

PostgreSQL流复制搭建:http://www.sijitao.net/1764.html

2、安装pgpool

pgpool的下载地址:http://www.pgpool.net/download.php?f=pgpool-II-3.3.4.tar.gz 。

 

tar zxvf pgpool-II-3.3.4.tar.gz

cd pgpool-II-3.3.4

mkdir -p /opt/pgpool

./configure –prefix=/opt/pgpool -with-pgsql=path -with-pgsql=/opt/PostgreSQL/93

make

make install

3、安装pgpool相关函数

pgpool 函数不是必需安装,但建议安装pgpool_regclass,pgpool_recovery 函数。

 

cd /root/pgpool-II-3.3.4/sql

make

make install

安装完成后可以在/opt/PostgreSQL/93/share/postgresql/extension/看到pgpool相关文件。

 

root@ubuntu:~/pgpool-II-3.3.4/sql# ls -l /opt/PostgreSQL/93/share/postgresql/extension/

total 36

-rw-r–r– 1 root root 791 Nov 11 11:44 pgpool_recovery–1.0.sql

-rw-r–r– 1 root root 160 Nov 11 11:44 pgpool_recovery.control

-rw-r–r– 1 root root 551 Nov 11 11:44 pgpool-recovery.sql

-rw-r–r– 1 root root 283 Nov 11 11:44 pgpool_regclass–1.0.sql

-rw-r–r– 1 root root 152 Nov 11 11:44 pgpool_regclass.control

-rw-r–r– 1 root root 142 Nov 11 11:44 pgpool-regclass.sql

-rw-r–r– 1 root root 332 Aug 22 11:52 plpgsql–1.0.sql

-rw-r–r– 1 root root 179 Aug 22 11:52 plpgsql.control

-rw-r–r– 1 root root 381 Aug 22 11:52 plpgsql–unpackaged–1.0.sql

登陆需要安装的库中,和安装插件一样执行以下两条命令。

 

create extension pgpool_regclass;create extension pgpool_recovery;

4、配置两台数据库之间的信任关系

下面这些在两台机器上分别执行,互相登陆不需要密码。

 

postgres@ubuntu:~$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/postgres/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/postgres/.ssh/id_rsa.

Your public key has been saved in /home/postgres/.ssh/id_rsa.pub.

The key fingerprint is:

3d:47:a9:3e:9e:36:5b:ef:2e:0e:21:66:0b:12:76:cd postgres@ubuntu

The key’s randomart image is:

+–[ RSA 2048]—-+

|                 |

|       o     .   |

|    o . E   o    |

|   . o   . o     |

|    . . S = .    |

|     . + + +     |

|        . + .    |

|         .o=..   |

|         .++.++  |

+—————–+

postgres@ubuntu:~$ ssh-copy-id postgres@192.168.56.102

The authenticity of host ’192.168.56.102 (192.168.56.102)’ can’t be established.

ECDSA key fingerprint is 8c:f2:97:55:b4:1f:e4:81:1d:55:fd:42:77:3e:c7:c2.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ’192.168.56.102′ (ECDSA) to the list of known hosts.

postgres@192.168.56.102′s password:

Now try logging into the machine, with “ssh ‘postgres@192.168.56.102′”, and check in:

~/.ssh/authorized_keys

to make sure we haven’t added extra keys that you weren’t expecting.

5、配置pgpool

 

root@ubuntu:/opt/pgpool# chown -R postgres:postgres etc/

root@ubuntu:/opt/pgpool# su – postgres

postgres@ubuntu:~$ echo “export PATH=\”\$PATH:/opt/pgpool/bin\”" >>/home/postgres/.bashrc

postgres@ubuntu:~$ source /home/postgres/.bashrc

postgres@ubuntu:~$ cd /opt/pgpool/etc/

a.配置  pcp.conf

pgpool 提供 pcp 接口,可以查看、管理pgpool 的状态,并且可以远程操作pgpool 。pcp.conf是用来对 pcp 相关命令认证的文件,格式为  USERID:MD5PASSWD。

 

postgres@ubuntu:/opt/pgpool/etc$ cp pcp.conf.sample pcp.conf

postgres@ubuntu:/opt/pgpool/etc$ pg_md5 -upgpool -p

password:

e6a52c828d56b46129fbf85c4cd164b3

在pcp.conf文件中末尾添加pgpool:e6a52c828d56b46129fbf85c4cd164b3 。

b.配置 pgpool.conf

 

listen_addresses = ‘*’

port = 9999

socket_dir = ‘/tmp’

pcp_port = 9898

pcp_socket_dir = ‘/tmp’

backend_hostname0 = ’192.168.56.101′        //配置数据节点192.168.56.101

backend_port0 = 5432

backend_weight0 = 1        //负载均衡中的权重值

backend_flag0 = ‘ALLOW_TO_FAILOVER’        //允许自动切换

backend_hostname1 = ’192.168.56.102′        //配置数据节点192.168.56.102

backend_port1 = 5432

backend_weight1 = 1

backend_flag1 = ‘ALLOW_TO_FAILOVER’

enable_pool_hba = on        //打开pool_passwd

pool_passwd = ‘pool_passwd’

authentication_timeout = 60

ssl = off

num_init_children = 32

max_pool = 4

child_life_time = 300

child_max_connections = 0

connection_life_time = 0

client_idle_limit = 0

log_destination = ‘stderr’

print_timestamp = on

log_connections = on

log_hostname = on

log_statement = on

log_per_node_statement = off

log_standby_delay = ‘none’

syslog_facility = ‘LOCAL0′

syslog_ident = ‘pgpool

debug_level = 0

pid_file_name = ‘/var/run/pgpool/pgpool.pid’

logdir = ‘/tmp’

connection_cache = on

reset_query_list = ‘ABORT; DISCARD ALL’

replication_mode = off

replicate_select = off

insert_lock = on

lobj_lock_table = ”

replication_stop_on_mismatch = off

failover_if_affected_tuples_mismatch = off

load_balance_mode = on

//负载均衡开关

ignore_leading_white_space = on

white_function_list = ”

black_function_list = ‘nextval,setval’

master_slave_mode = o

n        //主备模式开关

master_slave_sub_mode = ‘stream’

//设置流复制模式

sr_check_period = 5

sr_check_user = ‘repuser’

sr_check_password = ’123456′

delay_threshold = 0

follow_master_command = ”

parallel_mode = off

pgpool2_hostname = ”

system_db_hostname  = ‘localhost’

system_db_port = 5432

system_db_dbname = ‘pgpool

system_db_schema = ‘pgpool_catalog’

system_db_user = ‘pgpool

system_db_password = ”

health_check_period = 0

health_check_timeout = 20

health_check_user = ‘nobody’

health_check_password = ”

health_check_max_retries = 0

health_check_retry_delay = 1

failover_command = ‘/home/postgres/scripts/failover_stream.sh %d %H /data/pgsql/postgresql.trigger.5432′

failback_command = ”

fail_over_on_backend_error = on

search_primary_node_timeout = 10

recovery_user = ‘nobody’

recovery_password = ”

recovery_1st_stage_command = ”

recovery_2nd_stage_command = ”

recovery_timeout = 90

client_idle_limit_in_recovery = 0

use_watchdog = off

trusted_servers = ”

ping_path = ‘/bin’

wd_hostname = ”

wd_port = 9000

wd_authkey = ”

delegate_IP = ”

ifconfig_path = ‘/sbin’

if_up_cmd = ‘ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0′

if_down_cmd = ‘ifconfig eth0:0 down’

arping_path = ‘/usr/sbin’           # arping command path

arping_cmd = ‘arping -U $_IP_$ -w 1′

clear_memqcache_on_escalation = on

wd_escalation_command = ”

wd_lifecheck_method = ‘heartbeat’

wd_interval = 10

wd_heartbeat_port = 9694

wd_heartbeat_keepalive = 2

wd_heartbeat_deadtime = 30

heartbeat_destination0 = ‘host0_ip1′

heartbeat_destination_port0 = 9694

heartbeat_device0 = ”

wd_life_point = 3

wd_lifecheck_query = ‘SELECT 1′

wd_lifecheck_dbname = ‘template1′

wd_lifecheck_user = ‘nobody’

wd_lifecheck_password = ”

relcache_expire = 0

relcache_size = 256

check_temp_table = on

memory_cache_enabled = off

memqcache_method = ‘shmem’

memqcache_memcached_host = ‘localhost’

memqcache_memcached_port = 11211

memqcache_total_size = 67108864

memqcache_max_num_cache = 1000000

memqcache_expire = 0

memqcache_auto_cache_invalidation = on

memqcache_maxcache = 409600

memqcache_cache_block_size = 1048576

memqcache_oiddir = ‘/var/log/pgpool/oiddir’

white_memqcache_table_list = ”

black_memqcache_table_list = ”

c.failover脚本

 

/home/postgres/scripts/failover_stream.sh

#! /bin/sh

# Failover command for streaming replication.

# This script assumes that DB node 0 is primary, and 1 is standby.

#

# If standby goes down, do nothing. If primary goes down, create a

# trigger file so that standby takes over primary node.

#

# Arguments: $1: failed node id. $2: new master hostname. $3: path to

# trigger file.

failed_node=$1

new_master=$2

trigger_file=$3

# Do nothing if standby goes down.

if [ $failed_node = 1 ]; then

exit 0;

fi

# Create the trigger file./usr/bin/ssh -T $new_master /bin/touch $trigger_file

exit 0;

d.配置pool_hba.conf

postgres@ubuntu:/opt/pgpool/etc$ cppgpool.conf.samplepgpool.conf

这里我把认证权限都设置成md5,和PostgreSQL中的pg_hba.conf一样。

e.配置pool_passwd

配置哪些用户可以通过pgpool登陆数据库,格式user:md5 。

例如:postgres:md5cdf7c8e298f988acbc8d7b6b16cdd5f8 。

6、启动pgpool

启动之前创建两个目录。

 

mkdir /var/log/pgpool

chown postgres.postgres /var/log/pgpool

mkdir /var/run/pgpool

chown postgres.postgres /var/run/pgpool

启动:

 

postgres@ubuntu:/opt/pgpool/etc$pgpool -n >/var/log/pgpool/pgpool.log 2>&1 &

7、登陆pgpool、测试HA

 

postgres@ubuntu:/opt/pgpool/etc$ psql -p 9999 -U postgres -d postgres

psql (9.3.5)

Type “help” for help.

postgres=# show pool_nodes ;

node_id |    hostname    | port | status | lb_weight |  role

———+—————-+——+——–+———–+———

0       | 192.168.56.101 | 5432 | 2      | 0.500000  | primary

1       | 192.168.56.102 | 5432 | 2      | 0.500000  | standby

(2 rows)

热备和负载均衡这样就配置好了,接下来手动关掉主库。

再次登陆pgpool,查看node状态,可以发现192.168.56.102已经自动切换成primary。

 

#192.168.56.101

postgres@ubuntu:/opt/pgpool/etc$ psql -p 9999 -U postgres -d postgres

psql (9.3.5)

Type “help” for help.

postgres=# show pool_nodes ;

node_id |    hostname    | port | status | lb_weight |  role

———+—————-+——+——–+———–+———

0       | 192.168.56.101 | 5432 | 3      | 0.500000  | standby

1       | 192.168.56.102 | 5432 | 2      | 0.500000  | primary

(2 rows)

#192.168.56.102

postgres@ubuntu:/data/pgsql$ ls -l recovery.done-rw-r–r– 1 postgres postgres 4938 Nov 11 11:07 recovery.done

热备自动切换成功。

8、其他问题

如果192.168.56.101重新做了备库后再启动,输入以下命令,status状态变成2 。

/opt/pgpool/bin/pcp_attach_node -d 5 localhost 9898 postgres 123456 0

postgres和密码123456由之前pcp.conf中设置所得。

常见连接异常问题

pg_hba.confpool_hba.confpool_passwdresult
md5md5yesmd5 auth
md5md5no“MD5″ authentication withpgpool failed for user “XX”
md5trustyes/noMD5 authentication is unsupported in replication, master-slave and parallel mode
trustmd5yesno auth
trustmd5no“MD5″ authentication with pgpool failed for user “XX”
trusttrustyes/nono auth

备注: 这个表格很好地描述了各种连接异常问题,对照表格很容易找到原因。

实验总结

使用pgpool可以实现主备之间的自动切换,而且也可以有效实现负载均衡功能,个人觉得可以在生产中进行试用。

参考链接:

http://francs3.blog.163.com/blog/static/4057672720149285445881/

http://www.pgpool.net/docs/latest/pgpool-en.html

  • 本文来自:爱好Linux技术网
  • 本文链接:http://www.ahlinux.com/postgresql/9419.html

这篇关于数据库 - PostgreSql - 双机热备技术:使用pgpool搭建高可用PostgreSQL HA的步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/291831

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]