PostgreSQL高可用集群

一主两从+haproxy IP地址、端口、版本号根据自身的服务器和要求来改变
架构图
服务器配置
服务器四台 (192.168.0.78 192.168.0.79 192.168.0.80 192.168.0.81)
操作系统版本 Centos 7.6

CPU 192.168.0.78 192.168.0.79 192.168.0.81 | 2核 192.168.0.80 | 4核
内存 192.168.0.78 192.168.0.79 192.168.0.81 | 4G 192.168.0.80 | 8G
磁盘 四台都是200G

软件 etcd patroni python postgresql

etcd Version: 3.3.11
patroni Version : 2.1.1
python Version : 3.6
postgresql Version : 13.4

端口  :etcd  2379 2380    |    postgresql  5432    |    haproxy   7000 监听主节点端口5000   监听从节点端口5001   |    patroni   8008
etcd不仅是一个存储还是做一个数据强一致性和服务发现的作用,主要用于分布式集群当中
patroni是一个python代码的开源产品,通过DCS来对postgresql各个节点的状态进行判断

环境

 关闭防火墙  ()systemctl stop firewalld)      关闭沙盒  (setenforce 0)  永久关闭vim /etc/selinux/config   ----->   SELINUX=disabled

安装etcd

(三台都做 192.168.0.78,192.168.0.79,192.168.0.80)
yum -y install etcd
vim /etc/etcd/etcd.conf #IP地址和集群名称三台机器都不一样三台都要改
在这里插入图片描述
因为是三台机器所以三个etcd的配置文件需要修改标记的位置是修改的位置

开启etcd服务 并设置开机自启
vim /usr/lib/systemd/system/etcd.service
    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target
    [Service]
    Type=notify
    WorkingDirectory=/var/lib/etcd/
    EnvironmentFile=-/etc/etcd/etcd.conf
    User=etcd
    # set GOMAXPROCS to number of processors
    ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" --initial-advertise-peer-urls=\"${ETCD_INITIAL_ADVERTISE_PEER_URLS}\" --advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" --initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" --initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\" --initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\""
    Restart=on-failure
    LimitNOFILE=65536
    [Install]
    WantedBy=multi-user.target

查看etcd集群状态    etcdctl member list     etcdctl cluster-health  

在这里插入图片描述

因为是patroni控制postgresql,所以安装完postgresql-13之后不用启动
**

安装postgresql13

**

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum -y install postgresql13-server

**

安装patroni

** (三台都做 192.168.0.78,192.168.0.79,192.168.0.80)
因为postgresql用的是13版本,所以patroni要安装2.0.0以上的版本
python 环境要3以上的版本
安装python3.6版本
yum -y install python36
( 三台都做 192.168.0.78,192.168.0.79,192.168.0.80)

升级pip    wget https://bootstrap.pypa.io/get-pip.py     ----->   python3 get-pip.py
温馨提示  如果升级报错原因可能是下载的py文件版本不对   报错会提示你如何下载对应的版本   会给一个URL
安装patroni
    yum install -y gcc python-devel epel-release
    pip3 install psycopg2-binary
    pip3 install --upgrade setuptools
    pip3 install patroni[etcd]
编辑patroni的配置文件
mkdir  -p /usr/patroni/conf
cd /usr/patroni/conf
vim patroni_postgresql.yml
        scope: pgsql
        namespace: /service/
        name: pgcs-0002
        restapi:
          listen: 0.0.0.0:8008
          connect_address: 192.168.0.79:8008
        etcd:
          host: 192.168.0.79:2379
        bootstrap:
          dcs:
            ttl: 30
            loop_wait: 10
            retry_timeout: 10
            maximum_lag_on_failover: 1048576
            master_start_timeout: 300
            synchronous_mode: false
            postgresql:
              use_pg_rewind: true
              use_slots: true
              parameters:
                listen_addresses: "0.0.0.0"
                port: 5432
                wal_level: logical
                hot_standby: "on"
                wal_keep_segments: 100
                max_wal_senders: 10
                max_replication_slots: 10
                wal_log_hints: "on"
          initdb:
          - encoding: UTF8
          - locale: C
          - lc-ctype: zh_CN.UTF-8
          - data-checksums
          pg_hba:
          - host replication repl 0.0.0.0/0 md5
          - host all all 0.0.0.0/0 md5
        postgresql:
          listen: 0.0.0.0:5432
          connect_address: 192.168.0.79:5432
          data_dir: /var/lib/pgsql/13/data
          bin_dir: /usr/pgsql-13/bin
          authentication:
            replication:
              username: repl
              password: "repl91"
            superuser:
              username: postgres
              password: "postgres91"
          basebackup:
            max-rate: 100M
            checkpoint: fast
        tags:
            nofailover: false
            noloadbalance: false
            clonefrom: false
            nosync: false

因为是三台都安装所以配置文件需要修改 以下是需要修改的地方
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置完之后配置启动  vim /usr/lib/systemd/system/patroni.service   并设置开机自启systemctl enable patroni
    [Unit]
    Description=Runners to orchestrate a high-availability PostgreSQL
    After=syslog.target network.target
    [Service]
    Type=simple
    User=postgres
    Group=postgres
    #StandardOutput=syslog
    ExecStart=/usr/local/bin/patroni /usr/patroni/conf/patroni_postgresql.yml
    ExecReload=/bin/kill -s HUP $MAINPID
    KillMode=process
    TimeoutSec=30
    Restart=no
    [Install]
    WantedBy=multi-user.target

文件路径和etcd的路径相同

查看patroni集群     显示一下代表 安装成功

在这里插入图片描述

安装haproxy 192.168.0.81
yum -y install haproxy
cd /etc/haproxy
cp haproxy.cfg haproxy.cfg.bak
vim haproxy.conf
global
maxconn 100000
log 127.0.0.1 local3 info
defaults
mode tcp
log global
retries 2
timeout queue 5s
timeout connect 5s
timeout client 60m
timeout server 60m
timeout check 15s
listen stats
mode tcp
bind 192.168.0.81:7000
stats enable
stats refresh 30s
stats uri /stats
stats auth admin:123456
stats hide-version
listen master
log global
bind 192.168.0.81:5000
mode tcp
maxconn 2000
option tcplog
option httpchk OPTIONS /master
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 4 on-marked-down shutdown-sessions
server db78 192.168.0.78:5432 check port 8008
server db79 192.168.0.79:5432 check port 8008
server db80 192.168.0.80:5432 check port 8008
listen replicas
log global
bind 192.168.0.81:5001
mode tcp
maxconn 6000
option tcplog
option httpchk OPTIONS /replica
balance roundrobin
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 2 on-marked-down shutdown-sessions
server db78 192.168.0.78:5432 check port 8008
server db79 192.168.0.79:5432 check port 8008
server db80 192.168.0.80:5432 check port 8008
启动haproxy并设置开机自启
设置haproxy日志
vim /etc/rsyslog.conf
这两行取消注释
15 $ModLoad imudp
16 $UDPServerRun 514
然后在76行按照73行写
73 local7.* /var/log/boot.log
74
75
76 local2.* /var/log/haproxy.log
然后重启rsyslog和haproxy服务
haproxy页面监控

命令

手动切换   patronictl -c /usr/patroni/conf/patroni_postgresql.yml
patronictl -c /usr/patroni/conf/patroni_postgresql.yml restart pgsql  (patroni集群名字)
patronictl -c /usr/patroni/conf/patroni_postgresql.yml edit-config   进入修改配置界面   ----->将要更改的配置修改好
然后 重启集群   例如添加最大连接数  max_connections: 4000;  😊
数据库优化(常更新) 修改shared_buffers参数  使用patronictl -c /usr/patroni/conf/patroni_postgresql.yml edit-config   进入修改配置界面,然后加入shared_buffers: xGB  x为大小  通常设置为内存的25%   设置work_mem大小  添加work_mem: xMB  x为大小

pgsql备份和恢复

pgsql备份
    #####pg_dump -U postgres -h localhost -p 5432 -Fc -f  备份存放目录(/opt/xxxx.bak)   要备份的库   -Fc   压缩备份(例如tar.gz  zip  bak) -f  指定备份存放目录
    #####pg_dumpall -U postgres -h localhost -p 5432 -c -f 备份存放目录(/opt/xxxx.sql) 
    #####备份机器   192.168.0.80  备份存放目录  /opt/pg_back        (xxx.bak为当日压缩备份,xxx.sql为一周全量备份)
    pg_dump -h 127.0.0.1 -U postgres -d kjpt_test | gzip > /opt/kjpt_test.sql.gz  压缩备份
pgsql恢复
    #####pg_restore  -U postgres -h localhost -p 5432 -W  -d 数据库名字  -f  备份时的目录       pg_store 可以恢复自定义压缩的备份文件 
    #####pgsql  -h localhost -U postgres -p 5432  -f  备份存放目录   恢复sql的备份文件
    还原压缩备份     gunzip -c kjpt_test.sql.gz | psql -h 127.0.0.1 -U postgres -d kjpt

pgsql修改密码:alter user 用户名 with password ‘密码’;

看原文可以转到如下链接https://share.mubu.com/doc/1ECNDZoddnL

如有疑惑,可以留言。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: PostgreSQL是一种开源的关系型数据库管理系统,它支持高可用集群部署,可以提供数据的持久性和可用性。以下是关于PostgreSQL高可用集群的装指南简述: 1. 集群环境准备:首先需要准备一组具有相同操作系统和网络配置的物理或虚拟机。确保集群中的所有节点都可以互相通信。 2. 安装和配置PostgreSQL:在每个节点上安装PostgreSQL软件,并在配置文件中设置适当的参数。确保所有节点的配置文件保持一致。 3. 数据同步和复制:为实现高可用性,需要使用PostgreSQL内置的复制功能。使用流复制或逻辑复制将数据从主节点复制到备份节点。 4. 主备切换和故障恢复:在主节点发生故障时,需要手动或自动触发主备切换。保证备份节点可以接管主节点的功能,并尽快恢复服务。 5. 自动化监控和管理:为了更好地管理和监控集群,可以使用一些工具和脚本来自动化任务,例如监控节点状态、日志检查和备份。 6. 容灾和故障转移:为了应对更严重的故障,可以在不同的地理位置设置多个节点,以实现容灾和故障转移。在这种情况下,需要考虑数据同步的延迟和网络带宽等因素。 7. 安全性和权限管理:在配置高可用集群时,务必考虑数据的安全性。设置适当的访问权限并实施加密和身份验证措施。 总之,PostgreSQL高可用集群的装指南包括安装和配置PostgreSQL、数据同步和复制、主备切换和故障恢复、自动化监控和管理、容灾和故障转移以及安全性和权限管理等内容。通过合理地设置和管理,可以确保PostgreSQL数据库具备高可用性和可靠性。 ### 回答2: PostgreSQL是一个开源的关系型数据库管理系统,它支持高可用集群配置,以确保数据库系统的可用性和容错性。以下是一个关于PostgreSQL高可用集群配置的装指南。 1.选择合适的架构:在配置PostgreSQL高可用集群之前,首先需要选择适合你的架构。常见的架构包括主-从复制、主-主复制和基于分布式数据库架构。根据你的需求和资源预算选择适合的架构。 2.配置主-从复制:主-从复制是最简单和常见的PostgreSQL高可用架构。配置主-从复制需要设置一个主数据库和一个或多个从数据库。主数据库接收写入操作,并将更新传播给从数据库。配置主-从复制需要在主数据库和从数据库之间设置流复制。 3.配置主-主复制:主-主复制架构允许多个节点同时接收写入操作。这种架构可以提高系统的容错性和可用性。配置主-主复制需要设置多个相互同步的节点,并使用流复制来实现数据同步。需要注意的是,主-主复制可能导致数据冲突,因此需要进行一些额外的配置和管理。 4.配置自动故障转移:为了实现高可用性,当主节点遇到故障时,需要配置自动故障转移。自动故障转移可以自动将故障节点替换为备用节点,以确保数据库系统的连续性。可以使用软件工具或自定义脚本来实现自动故障转移。 5.监控和管理集群:为了确保高可用集群的稳定性和性能,需要定期监控和管理集群。可以使用PostgreSQL提供的监控工具,如pg_stat_replication和pg_stat_activity,来监控数据库状态和查询性能。另外,还可以使用第三方的监控工具来监控集群的运行状况。 以上是关于PostgreSQL高可用集群配置的一些基本指南。具体的配置方法和工具选择可能会因环境和需求而异,建议在实际操作中参考官方文档和相关资料,以确保配置正确和可靠。 ### 回答3: PostgreSQL是一种非常强大的开源数据库管理系统,在构建高可用集群时,可以采用以下指南: 1. 安装和配置PostgreSQL:首先,需要在每个节点上安装和配置PostgreSQL。可以从官方网站下载适用于您的操作系统的最新版本,并按照说明进行安装。确保在每个节点上进行相同的配置,包括数据库路径、监听地址和端口等。 2. 设置主从复制:在高可用集群中,通常会将一个节点作为主节点,其他节点作为从节点。主节点负责处理写操作,而从节点负责处理读操作。在主节点上进行设置,以使其将更改记录到WAL(Write-Ahead Log)并发送给从节点,从节点可以通过流复制技术将更改同步到自己的本地数据库。 3. 配置复制流:在从节点上配置复制流以接收主节点发送的更改。可以使用PostgreSQL提供的pg_basebackup工具来进行复制流设置。确保在从节点上指定主节点的地址和端口,并指定复制流的用户名和密码。 4. 配置故障切换:在高可用集群中,当主节点发生故障时,必须能够实现自动故障切换。这可以通过使用PostgreSQL的流复制和触发器来实现。可以编写一个触发器,当检测到主节点故障时,自动将一个从节点提升为新的主节点,并将其他从节点重新配置为复制新的主节点。 5. 监控和管理:在构建高可用集群时,需要定期监测各个节点的状态和性能。可以使用PostgreSQL自带的工具,如pg_stat_replication和pg_stat_activity来监控复制状态和数据库活动。此外,还可以使用第三方监控工具,如Zabbix或Nagios来实时监测集群的运行状态,并及时采取措施应对潜在的故障。 在配置和管理PostgreSQL高可用集群时,请确保备份数据库,定期更新软件版本,并遵循最佳实践和安全措施,以确保数据的完整性和可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值