PostgreSQL 流复制+高可用

QA PgPool-II 同步 Postgresql

X1 服务器准备

    192.168.59.121  PostgreSQL10
    192.168.59.120  PGPool-II 3.7 

X2 安装PostgreSQL

    #M1 下载
    $ https://yum.postgresql.org/
    $ yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm -y 
    #M2 安装
    $ yum list | grep postgresql
    $ yum install postgresql10-contrib postgresql10-server -y
    #M3 初始化数据库
    $ /usr/pgsql-10/bin/postgresql-10-setup initdb
    ** /var/lib/pgsql/10/data /** 数据目录 /
    ** /usr/pgsql-10/bin      /** 命令目录 /
    #M4 启动数据库并设置开机启动
    $ systemctl start  postgresql-10.service
    $ systemctl enable postgresql-10.service
    #M5 登录postgresql并设置密码---postgresql在安装时默认添加用户postgres
    $ su - postgres
    $ psql
    $ ALTER USER postgres WITH PASSWORD 'hotcomm123';
    $ \q
    #M6 支持远程登录-修改配置文件[pg_hba.conf,postgresql.conf]
    && pg_hba.conf
        @在文件末尾添加下面记录,并且将所有 peer|ident 修改为md5
        host    all             all             0.0.0.0/0               md5
    && postgresql.conf
        @ listen_addresses = '*'
        @ port = 5432
        

X3 安装PgPool-II

    ##M1 安装
    $ rpm -ivh http://www.pgpool.net/yum/rpms/3.7/redhat/rhel-7-x86_64/pgpool-II-release-3.7-1.noarch.rpm
    $ yum -y install pgpool-II-pg95
    $ yum -y install pgpool-II-pg95-debuginfo
    $ yum -y install pgpool-II-pg95-devel
    $ yum -y install pgpool-II-pg95-extensions
    ## 配置文件路径
    /etc/pgpool-II/pgpool.conf  
    ##M2 修改配置文件 pgpool.conf
    @ listen_addresses = '*'
    @ port = 9999       
    @ backend_hostname0 = '10.10.10.104' #主机ip
    @ backend_port0 = 5432
    @ backend_weight0 = 1 #loadbalance不开启,无效
    @ backend_data_directory0 = '/var/lib/postgresql/9.5/main'
    @ backend_flag0 = 'ALLOW_TO_FAILOVER'
    @ enable_pool_hba = on 
    @ pool_passwd = 'pool_passwd'
    ##M3 修改配置文件pool_hba.conf
    local   all         all                               md5
    # IPv4 local connections:
    host    all         all         127.0.0.1/32          md5
    host    all         all         ::1/128               md5
    host    all         all         0.0.0.0/0             md5
    ##M4 启用配置文件pool_passwd 密码:hotcomm123 客户端连接pgpool
    $ pg_md5 -m -p -u postgres pool_passwd ## 配置的账号密码将直接用于连接PostgreSQL 数据的账号密码
    $ pgpool -n 
    $ psql -h 192.168.59.120 -p 9999 -U postgres  

QB PostgreSQL10 流复制

X1 服务器准备

    192.168.59.121  PostgreSQL10 Master
    192.168.59.122  PostgreSQL10 Slaver

X2 安装 Master PostgreSQL10

    ##M0 此处和接下来就不在陈述安装细节,可以参考QA.X2
    ##M1 修改配置文件-postgresql.conf
        @wal_level = replica                # 参数控制 WAL 日志信息的输出级别,有 minimal 、 replica 、 logical 三种模式, minimal 记录的 WAL 日 志信息最少,除了记录数据库异常关闭需要恢复时的WAL 信息外,其他操作信息都不记录; replica 记录 的 WAL 信息比 minimal 信息多些,会记录支持 WAL 归档、复制和备库中启用只读查询等操作所需 的 WAL 信息;logical 记 录 的 WAL 日志信息 最多, 包含了支持逻辑解析 (IO 版本的新特性,逻辑复制使用这种模式,本章后面会介绍)所需 的 WAL
        @archive_mode = on                  # 参数控制是否启用归档, off 表示不启用归档, on 表示启用归档并使用 archive command 参数的配置命令将 WAL 日志归档到归档存储上,此参数设置后需重启数据库生效,这里通常设置成 on 
        @archive command = ’ / bin/date ’   # 参数设置 WAL 归档命令, 可以将 WAL 归档到本机目录,也可以归档到远程其他主机上,由于流复制的配置并不一定需要依赖配置归档命令,我们将归档命令暂且设置成伪归档命令/bin/date ,后期如果需要打开归档直接配置归档命令即可
        @max wal senders = 10               # 参数控制主库上的最大 WAL 发送进程数 ,通过 pg_basebackup 命令在主库上做基准备份时也会消耗 WAL 进程, 此参数设置不能 比 max_connections参数值高 , 默认值为 10 , 一个流复制备库通常只需要消耗流复制主库一个 WAL 发送进程 。
        @wal keep segments = 512            # 设置流复制保留的最多的xlog数目,一份是 16M,注意机器磁盘 16M*64 = 1G
        @hot_standby = on                   # 参数控制数据库恢复过程中是否启用读操作 ,这个参数通常用在流复制备库,开启此参数后流复制备库支持只读 SQL ,但备库不支持写操作,主库上也设置此参数为 on 。 
        @wal_sender_timeout = 60s           # 设置流复制主机发送数据的超时时间
        @max_connections = 100              # 这个设置要注意下,从库的max_connections必须要大于主库的 
    ##M2 创建流复制账号,进入数据库内部执行脚本,该角色(账号)用于复制和登入
        $ CREATE ROLE replica login replication encrypted password 'replica';
    ##M3 修改 pg_hba.conf 文件 进入最后部分,添加如下
        host   replication      replica       0.0.0.0/0          md5   #允许使用 replica 用户来复制
    ##M4 重启服务,执行之后通过status检查执行是否成功,假如失败,则返回前面步骤好好检查是否哪里忘了
        $ systemctl restart postgresql-10.service

X3 安装 Slaver PostgreSQL10

    ##M0 此处不重复展示安装细节,参考QA.X2,但是需要注意,执行完M2即可停止
    ##M1 通过执行pg_basebackup 方式部署流复制,具体执行下面脚本
        $ pg_basebackup -h 192.168.59.121 -U replica -D  /var/lib/pgsql/10/data -X stream -P -R  ## 输入主库流复制 账号-密码
        $ chown -R postgres:postgres /var/lib/pgsql/10/data/*
    ##M2 修改配置文件 recovery.conf   
        $ vim recovery.conf /**添加属性/
        @ recovery_target_timeline = 'latest'  ##参数设置恢复的时间线( timeline ) , 默认情况下是恢复到基准备份生成时 的时间线,设置成 latest 表示从备份 中恢复到最近的 时间线 , 通常流复制环境设置此参数为 latest ,复杂的恢复场景可将此参数设置成其他值 
    ##M3 重启并检查服务
        $ systemctl restart  postgresql-10.service
        $ systemctl status  postgresql-10.service

X4 验证复制

    ##M0 来到主库 192.168.59.121 进入数据库执行脚本
    $ psql 
    $ select client_addr,sync_state from pg_stat_replication; ## 通过查看记录,正常安装成功则会显示从库地址 例如 192.168.59.122
    $ CREATE DATABASE test_v1 OWNER postgres;                 ## 可以通过创建数据库(DDL)来判断
    ##M1 来到从库 192.168.59.122  到这一步假如一切成功则证明流复制(异步)成功
    $ su - postgres
    $ psql
    $ \l        

X5 参考资料

    网址:
        https://www.jianshu.com/p/343c3c8047f0
         https://blog.csdn.net/pg_hgdb/article/details/79069407
         https://www.postgresql.org/files/documentation/pdf/10/postgresql-10-A4.pdf
         https://www.jb51.net/article/148841.htm
    书籍:  
        PostgreSQL实战.pdf
        PostgreSQL 修炼之道.pdf(该书默认使用postgresql_9,所以部分属性不适用,例如wal_level的值和PSQL_10完全不同,但是该书在很多细节方面写的很全面,非常有参考价值)

猜你喜欢

转载自www.cnblogs.com/ak23173969/p/10703534.html