postgresql集群搭建

基于pgpool中间件实现postgresql一主多从集群部署,这里用两台服务器作一主一从示例

虚拟机名 IP 主从划分
THApps 192.168.1.31 主节点
YY-Test-01 192.168.1.36 从节点
vip 192.168.1.100 虚拟ip

1.软件版本

系统版本 CentOS Linux release 7.9.2009 (Core)
PostgreSQL 10
pgpool-II 4.0.1

2.整体架构

3.安装postgresql

postgresql 安装步骤请查看IOT私有化部署文档,两台服务器都需要安装

3.1主节点配置

(1)创建用于主从访问的用户, 修改postgres用户的密码,用于远程登录。(切换到postgres用户操作)

su - postgres
psql
create role actorcloud login replication encrypted password 'public';
alter role postgres with password 'postgres';

(2)修改pg_hba.conf和postgresql.conf配置:

vim /var/lib/pgsql/10/data/pg_hba.conf在最后一行添加下面内容:

host    replication    actorcloud    192.168.1.31/32    trust
host replication actorcloud 192.168.1.36/32 trust
host all all 192.168.1.0/24 md5
host all all 0.0.0.0/0 md5

修改postgresql.conf配置:

vim /var/lib/pgsql/10/data/postgresql.conf

listen_addresses = '*'
port = 5432
wal_level = replica
max_wal_senders= 10
wal_keep_segments = 10240
max_connections = 512

(3)重启主节点

建议先停止,再启动,而不是重启。之后再验证一下是否启动成功

systemctl stop postgresql-10
systemctl start postgresql-10

3.2从节点配置

从节点的操作建议全部在postgres用户下进行。

(1)切换postgres用户

su - postgres

(2)对主节点的数据进行备份到从节点,其中192.168.1.31为主节点IP,actorcloud是上一节主节点创建的用户。

rm -rf /var/lib/pgsql/10/data/*
pg_basebackup -h 192.168.1.31 -U actorcloud -D /var/lib/pgsql/10/data -X stream -P

(3)拷贝recovery.conf,编辑recovery.conf内容,其中192.168.1.31对应主机IP,actorcloud是上一节主机创建的用户。

cp /usr/pgsql-10/share/recovery.conf.sample /var/lib/pgsql/10/data/recovery.conf

vim /var/lib/pgsql/10/data/recovery.conf修改配置:

standby_mode = on
primary_conninfo = 'host=192.168.1.31 port=5432 user=actorcloud password=public'
recovery_target_timeline = 'latest'
trigger_file = '/tmp/trigger_file0'

(4)修改从节点的postgresql.conf,用于开启standby模式。

hot_standby = on

(5)退出postgres用户,重启PostgreSQL

4.验证主从

4.1查看从节点信息

在主节点切换至psql界面,输入命令:

select client_addr,sync_state from pg_stat_replication;

若从节点显示出来,如下图所示,则说明PostgreSQL集群搭建成功。

4.2读写测试

(1)在主节点写数据,从节点读数据。

create database test;
\l

在从节点上查看创建之后的数据库。可以看见,数据库同步了。

\l

5.postgres用户间免密登录

先关闭防火墙和SETLINUX,操作请查看IOT私有化部署文档

以下操作两台机器同时进行:

(1)给postgres用户更改密码:密码修改为postgres

passwd postgres

(2)生成并同步密钥

以192.168.1.31为例,想要免密登录另外一台机器。先切换到postgres用户执行,ssh-keygen时一路回车往下,提升输入y时输入y,ssh-copy-id时需要输入密码。

su postgres
ssh-keygen
ssh-copy-id 192.168.1.36

测试免密登录:

ssh 192.168.1.36
ip addr

同理在192.168.1.36机器上也是相同操作

6.安装pgpool

(1)安装(两台机器都需要安装)

# 添加源
yum install http://www.pgpool.net/yum/rpms/4.0/redhat/rhel-7-x86_64/pgpool-II-release-4.0-1.noarch.rpm # 安装
yum install pgpool-II-pg10-debuginfo pgpool-II-pg10-devel pgpool-II-pg10-extensions pgpool-II-pg10

安装完之后pgpool的配置文件在/etc/pgpool-II/下

(2)修改配置(两台机器都需要配置)

pool_hba.conf和之前配置的PostgreSQL中的配置时一样的

vim /etc/pgpool-II/pool_hba.conf
host replication actorcloud 192.168.1.31/32 trust
host replication actorcloud 192.168.1.36/32 trust
host all all 192.168.1.0/24 md5
host all all 0.0.0.0/0 md5

(3)对postgres的密码进行加密。本文将postgres的密码设置为和用户名相同,将加密结果复制,并粘贴到pcp.conf中相应的位置,取消掉该行的注释。

pg_md5 postgres

vim /etc/pgpool-II/pcp.conf
postgres:81dc9bdb52d04dc20036dbd8313ed055

(4)执行命令(先切换到postgres用户再执行然后输入密码):

pg_md5 -m -p -u postgres pool_passwd

7.修改集群配置

以192.168.1.31主节点为例

vim /etc/pgpool-II/pgpool.conf

(1)修改监听地址,将localhost改为*,即监听所有地址发来的请求。

修改前:listen_addresses = 'localhost'
修改后:listen_addresses = '*'

(2)修改backend相关参数,对应的是PostgreSQ两个节点的相关信息。

修改前:
backend_hostname0 = 'localhost'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/var/lib/pgsql/data'
backend_flag0 = 'ALLOW_TO_FAILOVER'
修改后:
backend_hostname0 = '192.168.1.31'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/var/lib/pgsql/10/data'
backend_flag0 = 'ALLOW_TO_FAILOVER' backend_hostname1 = '192.168.1.36'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/var/lib/pgsql/10/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'

(3)pg_hba.conf生效

修改前:enable_pool_hba = off
修改后:enable_pool_hba = on

(4)使负载均衡生效

修改前:load_balance_mode = off
修改后:load_balance_mode = on

(5)主从流复制生效,并配置用于检查的用户,这个用户就用上方创建的用于主从访问的用户。

修改前:
master_slave_mode = off
sr_check_period = 0
sr_check_user = 'nobody'
sr_check_password = ''
sr_check_database = 'postgres'
delay_threshold = 0
修改后:
master_slave_mode = on
sr_check_period = 6
sr_check_user = 'actorcloud'
sr_check_password = 'public'
sr_check_database = 'postgres'
delay_threshold = 10000000

(6)健康检查相关配置,并配置用于检查的用户,这个用户就用上方创建的用于主从访问的用户。

修改前:
health_check_period = 0
health_check_user = 'nobody'
health_check_password = ''
health_check_database = ''
修改后:
health_check_period = 10
health_check_user = 'actorcloud'
health_check_password = 'public'
health_check_database = 'postgres'

(7)配置主机故障触发执行的脚本。

修改前:failover_command = ''
修改后:failover_command = '/var/lib/pgsql/10/failover_stream.sh %d %H'

(8)开启开门狗,IP为本机IP

修改前:
use_watchdog = off
wd_hostname = ''
修改后:
use_watchdog = on
wd_hostname = '192.168.1.31'

(9)开启虚拟IP,并修改网卡信息。启动后直接使用虚拟IP进行数据库操作剧哦

修改前:
delegate_IP = ''
if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0'
if_down_cmd = 'ip addr del $_IP_$/24 dev eth0'
arping_cmd = 'arping -U $_IP_$ -w 1 -I eth0'
修改后:
delegate_IP = '192.168.1.100'
if_up_cmd = 'ip addr add $_IP_$/24 dev ens192 label ens192:0'
if_down_cmd = 'ip addr del $_IP_$/24 dev ens192'
arping_cmd = 'arping -U $_IP_$ -w 1 -I ens192'

上方把所有eth0改为了ens192,ens192是该主机的网卡设备名称,可通过命令ip addr查看

(10)心跳检查的配置与看门狗配置。IP为从节点的IP

修改前:
heartbeat_destination0 = 'host0_ip1'
heartbeat_device0 = ''
#other_pgpool_hostname0 = 'host0'
#other_pgpool_port0 = 5432
#other_wd_port0 = 9000
修改后:
heartbeat_destination0 = '192.168.1.36'
heartbeat_device0 = 'ens192'
other_pgpool_hostname0 = '192.168.1.36'
other_pgpool_port0 = 9999
other_wd_port0 = 9000

以上,是主节点的配置。对于从节点,只有(8)和(10)的IP需要更改,其他的一致。

8.编写故障切换脚本

vim /var/lib/pgsql/10/failover_stream.sh

内容为:



9.文件权限更改

chmod u+s /sbin/ifconfig &&chmod u+s /usr/sbin

chown postgres:postgres /var/lib/pgsql/10/failover_stream.sh && chmod 777 /var/lib/pgsql/10/failover_stream.sh

chown -R postgres.postgres /etc/pgpool-II

mkdir /var/log/pgpool

chown -R postgres.postgres /var/log/pgpool

mkdir /var/run/pgpool

chown -R postgres.postgres /var/run/pgpool

10.运行pgpool

# 启动
systemctl start pgpool
# 开机自启
systemctl enable pgpool

登录虚拟ip查看集群节点。以后所有的操作均可通过连接虚拟IP操作数据库。

psql -p 9999 -h 192.168.1.100 -U postgres
show pool_nodes;

至此,基于 Pgpool-II 中间件的 PostgreSQL 集群搭建完成。

基于pgpool搭建postgresql集群的更多相关文章

  1. 基于pgpool搭建postgressql集群部署

    postgresql集群搭建 基于pgpool中间件实现postgresql一主多从集群部署,这里用两台服务器作一主一从示例 虚拟机名 IP 主从划分 THApps 192.168.1.31 主节点 ...

  2. 基于docker搭建elasticsearch集群

    es集群的搭建 - 基于单机搭建elasticsearch集群见官网 https://www.elastic.co/guide/en/elasticsearch/reference/current/d ...

  3. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

  4. 基于Dokcer搭建Redis集群搭建(主从集群)

    最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得之前写的这篇 <基于Docker的Redis集群搭建> 文章一定是有问题了,所以我花了几分钟浏览之前的文章总结了下面几 ...

  5. 基于 twemproxy 搭建 redis 集群

    概述 由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务.为了获取更好的缓存性能及扩展型,我们将需要搭建redis集群来满足需 ...

  6. 搭建postgresql集群的问题汇总

    问题一:如何配置pg远程访问          修改postgresql.conf-->listen_addresses = '*'          修改pg_hba.conf-->添加 ...

  7. 基于dns搭建eureka集群

    eureka集群方案: 1.通常我们部署的eureka节点多于两个,根据实际需求,只需要将相邻节点进行相互注册(eureka节点形成环状),就达到了高可用性集群,任何一个eureka节点挂掉不会受到影 ...

  8. Pacemaker+Corosync搭建PostgreSQL集群

    https://my.oschina.net/aven92/blog/518928 · PostgreSQL中国社区: http://postgres.cn/index.php/home · Post ...

  9. 基于Docker的redis集群搭建

    Redis集群官方介绍:http://www.redis.cn/topics/cluster-tutorial.html 基于Docker搭建Redis集群 环境:6个节点,三主三从 制作Redis镜 ...

随机推荐

  1. java8-stream常用操作(1)

    前言 java8的Stream 流式操作,用于对集合进行投影.转换.过滤.排序.去重等,更进一步地说,这些操作能链式串联在一起使用,类似于 SQL 语句,可以大大简化代码.下面我就将平时常用的一些st ...

  2. SpringBoot包扫描之多模块多包名扫描和同类名扫描冲突解决

    前言 我们在开发springboot项目时候,创建好SpringBoot项目就可以通过启动类直间启动,运行一个web项目,非常方便简单,不像我们之前通过Spring+SpringMvc要运行启动一个w ...

  3. taro小程序展示富文本

    在微信小程序下会用到wxParse这个东西来达到html转换wxml的效果, taro小程序官方也给出了示例,地址 这里封装成自己的组件: import Taro, { Component } fro ...

  4. mysql 数据库 分表后 怎么进行分页查询?Mysql分库分表方案?

    Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. m ...

  5. MVVMLight学习笔记(二)---MVVMLight框架初探

    一.MVVM分层概述 MVVM中,各个部分的职责如下: Model:负责数据实体的结构处理,与ViewModel进行交互: View:负责界面显示,与ViewModel进行数据和命令的交互: View ...

  6. 【gdal】创建GeoTiff栅格数据

    1 //定义转换参数 2 private readonly double[] d_transform = { 69.999999999999972, 0.01, 0.0, 44.99999999999 ...

  7. 网页前端video播放m3u8(HLS)

    网页前端video播放m3u8(HLS) HLS (HTTP Live Streaming)是Apple公司研发的流媒体传输技术,包括一个m3u8的索引文件.多个ts分片文件和key加密串文件.这项技 ...

  8. Oracle数据库 —— DDL

    时间:2016-10-5 14:55 逆风的方向更适合飞翔我不怕千万人阻挡只怕自己投降 --------------------------------------- 一.表的创建与管理1.表的基本操 ...

  9. 刷题-力扣-107. 二叉树的层序遍历 II

    107. 二叉树的层序遍历 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-level-order-tr ...

  10. 自建纯净谷歌搜索「GitHub 热点速览 v.21.35」

    作者:HelloGitHub-小鱼干 虽然 Google 搜索的结果不如百度搜索结果那般广告丛生,但是对于一心只想找到匹配结果的我们而言,推广的信息条目能免则免.whoogle-search 便是一个 ...