zoukankan      html  css  js  c++  java
  • CentOS 安装Postgres集群(-还未配置完成)

    框架环境

    192.168.100.102                        --虚拟ip
    172.18.5.23                        --主服务器
    172.18.5.41                        -- 从服务器
    

     

    安装PostgreSQL-主从结构中使用 

    下载安装

      网页端地址:https://yum.postgresql.org/rpmchart/ 可以查看各个版本的pgsql,点击12版本进去,查看需要安装的内容:

      

      点击:PostgreSQL Database Server 12 PGDG 在此页面选择要下载的内容,点击进入二层菜单,下载特定版本的安装包,pgsql安装需要下载的安装包,如下:  

    postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
    postgresql12-contrib-12.4-1PGDG.rhel7.x86_64
    postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
    postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm

       安装  

    yum install -y postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
    yum install -y postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
    yum install -y postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm
    yum install -y postgresql12-contrib-12.4-1PGDG.rhel7.x86_64.rpm
    

       安装出现下面的问题的时候:

      

          缺少依赖性 ,联网的情况下可以用:  yum install krb5-server 等进行安装。未联网的情况下,请参考下面的文章: 

      具体参考:离线安装:https://www.cnblogs.com/whitebai/p/12128037.html  在线安装:https://www.cnblogs.com/whitebai/p/12122240.html  安装依赖:https://www.cnblogs.com/whitebai/p/12128078.html  

    创建目录

    mkdir -p /app/pgsql/data && chown postgres:postgres /app/pgsql/data;                -- 数据目录
    mkdir -p /app/pgsql/pg_archive && chown postgres:postgres /app/pgsql/pg_archive;    --用于归档的目录(主从复制时用)
    cd /app/pgsql && chmod 700 data;                                                    --分配拥有者读写权限
    cd /app/pgsql && chmod 700 pg_archive;                                              --分配拥有者读写权限
    

    切换用户 

    su - postgres                                             --切换回postgres 用户
    /usr/pgsql-12/bin/initdb -D /app/pgsql/data/              --初始化数据库
    

    修改数据库路径

       su 切换为root用户,以root身份 

    vim /usr/lib/systemd/system/postgresql-12.service          --修改Service
    Environment=PGDATA=/app/pgsql/data/                        --修改数据库路径 
    

    自动启动

       su 切换为root用户,以root身份 

    systemctl enable postgresql-12 
    systemctl start postgresql-12 
    

      登录postgresql并设置密码,postgresql在安装时默认添加用户postgres 

    su - postgres 
    psql 
    ALTER USER postgres WITH PASSWORD '123456'; 
    q 
    

    允许远程登录

    修改pg_hba 指定数据库路径时:   

    vi /app/pgsql/data/pg_hba.conf 
    # IPv4 local connections: 下面添加
    host all all 0.0.0.0/0 md5  
    

    修改postgresql 指定路径时:修改时候去掉前面的# 注释 

    vi /app/pgsql/data/postgresql.conf 
    listen_addresses = '*'    
    

    重启服务  

    systemctl restart postgresql-12      
    netstat -ltpn | grep 5432             --查看状态 ,可以不用执行
    

    允许通过防火墙

    firewall-cmd --zone=public --add-port=5432/tcp --permanent
    firewall-cmd --reload
    

    主从配置  

    主服务器

    添加pg用于同步的用户名

    su - postgres
    psql
    CREATE ROLE replica login replication encrypted password '123456';          -创建具有复制流操作的用户:replica
    

    修改配置文件:pg_hba.conf,信任从服务器访问

    vi /app/pgsql/data/pg_hba.conf   
    #文件尾部添加信任的从服务器
    # replica为postgres用户
    # XX.XX.XX.XX为从节点的完整IP,如果为网段配置就不是32了,md5为允许密码验证,trust为免密
    # TYPE DATABASE USER ADDRESS METHOD
    host replication replica 172.18.5.41/32 trust
    

      

    、允许10.1.1.0~10.1.1.255网段登录数据库:

    1
    host    all    all    10.1.1.0/24    md5

    2、修改配置文件:postgresql.conf

    vi /app/pgsql/data/postgresql.conf

    # 新增或修改下列属性设置(使用命令“/”来查找,否则眼花)

    listen_addresses = '*' # (修改)监听所有IP

    max_connections = 100 # (修改)最大连接数,据说从机需要大于或等于该值

    archive_mode = on # (修改)开启归档

    archive_command = 'test ! -f /app/pgsql/pg_archive/%f && cp %p /app/pgsql/pg_archive/%f'

    # 9.6开始没有hot_standby(热备模式)
    wal_level = replica
    #最多有2个流复制连接
    max_wal_senders = 2   
    wal_keep_segments = 16  
    #流复制超时时间
    wal_sender_timeout = 60s
    # 最大连接数,据说从机需要大于或等于该值
    max_connections = 100  

    3、重启服务

    systemctl restart postgresql-12

    4、在从节点上验证访问

    psql -h 172.18.5.23 -U postgres

    FATAL: no pg_hba.conf entry for host “XXX” user “”xxx“”

    # 如果发现不知道密码或密码不正确,修改postgres用户密码(数据库)

    ALTER USER postgres WITH PASSWORD '你的密码';

    三、从服务器

    1、停止服务

    systemctl stop postgresql-12

    2、切换用户(一定要)

    su - postgres

    3、清空数据文件夹(是这样的,没错)

    rm -rf /app/pgsql/data/*

    cd /app/pgsql/data

    4、从主节点获取数据

    # 使用replica用户,从主节点获取备份数据(这条命令建议照抄,有兴趣在深究内部参数)

    pg_basebackup -h 172.18.5.23 -p 5432 -U replica -Fp -Xs -Pv -R -D /app/pgsql/data

    5、编辑standby.signal文件(就在数据文件夹内,以此标识从节点,当从节点提升为主节点后会自动删除)

    # 添加

    standby_mode = 'on'

    6、修改postgresql.conf文件

    vi /app/pgsql/data/postgresql.conf

    primary_conninfo = 'host=172.18.5.23 port=5432 user=replica password=123456'

    recovery_target_timeline = latest # 默认

    max_connections = 120 # 大于等于主节点,正式环境应当重新考虑此值的大小

    hot_standby = on

    max_standby_streaming_delay = 30s

    wal_receiver_status_interval = 10s

    hot_standby_feedback = on

    7、重新启动从节点

    systemctl start postgresql-12

    四、验证主从

    方法一:

    登录主节点数据库执行如下命令

    su postgres

    psql

    select client_addr,sync_state from pg_stat_replication;

    结果如下:

    postgres=# select client_addr,sync_state from pg_stat_replication;

    client_addr | sync_state

    ---------------+------------

    172.18.5.41 | async

    (1 row)

    说明104服务器是从节点,在接收流,而且是异步流复制

    方法二:

    在主节点与从节点分别执行如下命令

    ps -ef | grep postgres

    可以看到主节点有wal receiver进程

    postgres 2638 2606 0 17:12 ? 00:00:00 postgres: walsender replica 172.18.5.41(51504) streaming 0/7000660

    可以看到从节点有wal receiver进程

    postgres 1960 1953 0 17:12 ? 00:00:02 postgres: walreceiver streaming 0/7000660

    五、主备切换(主库出现故障时)

    当主库出现故障时,我们需要将备库提升为主库进行读写操作。

    0、在pg12之前我们一般使用2种方式:

    1)pg_ctl 方式: 在备库主机执行 pg_ctl promote shell 脚本

    2)触发器文件方式: 备库配置 recovery.conf 文件的 trigger_file 参数,之后在备库主机上创建触发器文件

    1、pg12开始新增了一个pg_promote()函数,让我们可以通过SQL命令激活备库。

    pg_promote()语法:

    pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60)

    两个参数:

    wait: 表示是否等待备库的 promotion 完成或者 wait_seconds 秒之后返回成功,默认值为 true。

    wait_seconds: 等待时间,单位秒,默认 60

    2、切换举例:

    1)主库操作:关闭主库,模拟主库故障:

    systemctl stop postgresql-12

    2)备库操作:激活备库:

    su postgres

    psql

    select pg_promote(true,60);

    4、验证:

    /usr/pgsql-12/bin/pg_controldata /app/pgsql/data

    主备库英文显示如下:

    Database cluster state: in production

    Database cluster state: in archive recovery

    主备库中文显示如下:

    数据库簇状态: 在运行中

    数据库簇状态: 正在归档恢复

    六、原主库修复后降为备库(其实大部分操作与建立备库时一样,只是修改几个IP地址)

    1、新主库(104):

    # vi /app/pgsql/data/pg_hba.conf

    host replication replica 172.18.5.23/32 trust

    # systemctl restart postgresql-12

    2、新备库(103)

    # systemctl stop postgresql-12

    # su - postgres

    # rm -rf /app/pgsql/data/*

    # cd /app/pgsql/data

    # pg_basebackup -h 172.18.5.41 -p 5432 -U replica -Fp -Xs -Pv -R -D /app/pgsql/data

    # vi standby.signal

    # 添加

    standby_mode = 'on'

    vi /app/pgsql/data/postgresql.conf

    primary_conninfo = 'host=172.18.5.41 port=5432 user=replica password=123456'

    # systemctl start postgresql-12

    七、再次将老主库切回主库

    1、当前备库:

    > 停止服务

    > 删除“/app/pgsql/data/standby.signal”文件

    > 启动服务

    2、当前主库:

    > 停止服务

    > 以“postgres”用户创建“/app/pgsql/data/standby.signal”文件,添加内容:standby_mode = 'on'

    > 启动服务

     https://blog.csdn.net/luxingjyp/article/details/104637798     https://www.cnblogs.com/VicLiu/p/12993542.html

    pgPool 负载均衡搭建

    服务器环境

    172.18.5.23   master    
    172.18.5.41   slave 
    172.18.5.42   vip        -虚拟ip
    

    .host 添加配置

    vi  /etc/hosts

    /etc/init.d/network restart --修改完成后刷新

     使用yum下载rpm包安装pgpool-II,注意下载的安装包须与PG的版本一致。安装包目录详见https://www.pgpool.net/yum/rpms/4.1/redhat/rhel-8-x86_64/

    yum install https://www.pgpool.net/yum/rpms/4.1/redhat/rhel-7-x86_64/pgpool-II-release-4.1-2.noarch.rpm
    yum install pgpool-II-pg12
    yum install pgpool-II-pg12-debuginfo
    yum install pgpool-II-pg12-devel
    yum install pgpool-II-pg12-extensions

    服务开机启动  

    systemctl enable pgpool.service
    

    启动停止服务

    systemctl start pgpool.service 
    systemctl stop pgpool.service
    

    目录/相关命令授权

    因为pgpool-ii 配置中会以 postgres 用户执行一些系统权限命令, 需要使用设置普通用户授权:

    chmod u+x /usr/sbin/ip
    chmod u+s /usr/sbin/arping
    chmod u+s /sbin/ip
    chmod u+s /sbin/ifconfig
    

    配置中相关的日志目录,pid 目录权限:

    chown -R postgres.postgres /etc/pgpool-II       --给postgres 用户权限
    mkdir /var/run/pgpool/                             
    chown postgres.postgres /var/run/pgpool/
    mkdir -p /var/log/pgpool/
    touch /var/log/pgpool/pgpool_status
    chown -R postgres.postgres /var/log/pgpool/
    

      

    配置程序运行的用户和组为 postgres  一般10以上,postgres 就在postgres 组下面,没有的话,可以搜索如何创建组

     修改pgpool运行用户和组为postgres

    vi /usr/lib/systemd/system/pgpool.service            --10如果采取默认的基本不需要修改 
    
    User=postgres
    
    Group=postgres
    

     服务器SSH免密设置

    # 主机/备机操作
    su - postgres
    ssh-keygen
    # 一直enter
    

     继续在postgres用户下执行

    ssh-copy-id -i .ssh/id_rsa.pub master
    ssh-copy-id -i .ssh/id_rsa.pub slave
    

    如果提示输入postgres密码的时候,请输入postgres  用户的密码(非postgres数据库的密码),如果没有设置,可以切换回root用户 sudo -u postgres passwd设置密码

     

     以上操作主机、备机都要执行

     pgpool-ii 相关配置(/etc/pgpool-II/)

    pool_hba.conf (主备相同)

     pool_hba.conf 是配置用户链接时的验证策略, 和postgresqlpg_hba.conf保持一致,要么都是trust,要么都是md5验证方式,这里采用了md5验证方式如下设置

    su - postgres
    cd /etc/pgpool-II/
    vim pool_hba.conf
    
    
    编辑内容如下(这里和postgressql设置一样, trust/md5保持一致)

     

    配置pg_hba.conf,认证方式保持一致

      修改 vi  /app/pgsql/data/pg_hba.conf   与上面保持一致

     非必要可选步骤,为了集群可扩展性,可以将复制的认证条件放宽

    pcp.conf / pool_passwd (主备相同)

    这个文件是pgpool管理器自己的用户名和密码,用于管理集群的.

     在  /etc/pgpool-II/ 目录下

    pg_md5 postgres
    e8a48653851e28c69d0506508fb27fc5
    vi pcp.conf
    --添加
    #USERID:MD5PASSWD
    postgres:e8a48653851e28c69d0506508fb27fc5

    pg_md5 -p -m -u postgres pool_passwd
    #数据库登录用户是postgres,这里输入登录密码,不能出错
    #输入密码后,在/etc/pgpoll-II目录下会生成一个pool_passwd文件

       

     pgpool.conf (重点)

    这里我们配置主节点的,然后备节点直接拷贝过去

    su - postgres
    cd  /etc/pgpool-II/
    touch failover_stream.sh
    chmod u+x failover_stream.sh
    vim  failover_stream.sh
    
    -- 键入一下内容
    
    #! /bin/sh
    # Failover command for streaming replication.
    # Arguments: $1: new master hostname.
    
    new_master=$1
    trigger_command="/usr/pgsql-12/bin/pg_ctl promote -D /app/pgsql/data"
    
    # Prompte standby database.
    /usr/bin/ssh -T $new_master $trigger_command
    
    exit 0;
    

     

  • 相关阅读:
    git add后 有的文件后悔 add了还没有commit 怎么办?
    go mod module declares its path as: gtihub.com/xxx-xx but was required as:xx-xx
    mysql 复合索引(联合索引) a b c的使用
    git 的初始化使用
    Mac 安装 mysql5.7
    Go Modules与GOPROXY 配置
    ZWWL的短信详设
    Linux 查看文件权限命令ls -l 输出信息每列所代表的含义
    ubuntu/deepin 下增加 goland 桌面快捷方式 goland.desktop
    go语言的冒泡 选择 快排 二分 算法实现
  • 原文地址:https://www.cnblogs.com/whitebai/p/13637905.html
Copyright © 2011-2022 走看看