zoukankan      html  css  js  c++  java
  • Postgresql主从配置

    一、   简介

    PostgreSql在9.0之后引入了主从的流复制机制,所谓流复制,就是从服务器通过tcp流从主服务器中同步相应的数据。这样当主服务器数据丢失时从服务器中仍有备份。

    与基于文件日志传送相比,流复制允许保持从服务器更新。 从服务器连接主服务器,其产生的流WAL记录到从服务器, 而不需要等待主服务器写完WAL文件(关于Wal可以看看官方的说法https://www.postgresql.org/docs/10/static/different-replication-solutions.html)。

    PostgreSQL流复制默认是异步的。在主服务器上提交事务和从服务器上变化可见之间有一个小的延迟,这个延迟远小于基于文件日志传送,通常1秒能完成。如果主服务器突然崩溃,可能会有少量数据丢失。

    同步复制必须等主服务器和从服务器都写完WAL后才能提交事务。这样在一定程度上会增加事务的响应时间。

    配置同步复制仅需要一个额外的配置步骤: synchronous_standby_names必须设置为一个非空值。synchronous_commit也必须设置为on。

    注: 主从服务器所在节点的系统、环境等最好一致。PostgreSQL版本也最好一致,否则可能会有问题。

    二、   安装部署(使用Ubuntu的普通用户安装部署)

    角色

    IP地址

    系统版本

    数据库版本

    主服务器

    192.168.100.71

    Ubuntu18.04  amd64

    PostgreSQL10

    从服务器

    192.168.100.70

    Ubuntu18.04  amd64

    PostgreSQL10

     

    注:18.04版本默认的PostgreSQL版本是10,要安装其他版本可以采用编译的方式或者apt-get 指定版本号安装

     

    1、两台服务器都要安装PostgreSQL

    sudo apt-get updatel

    sudo apt-get install postgresql

    sudo vi /etc/postgresql/10/main/postgresql.conf

    在文件末尾添加或者找到该行,将peer改为trust

    local         all           all        trust
    

      

    重启PostgreSQL服务

    sudo service postgresql restartt

    这样PostgreSQL就安装完毕

    2、配置主服务器

    切换成postgres用户

    sudo su – postgres

    进入数据库,创建一个普通的数据库用户用户进行主从同步(只需赋予登录和复制的权限即可)

     postgres=# create role guoxm login replication encrypted password 'guoxm'

    然后退出

    postgres=# q

    在exit退出到原用户

    然后,修改postgresql的pg_hba.conf,配置运行刚刚创建的guoxm用户可以进行连接

    sudo vi /etc/postgresql/10/main/pg_hba.conf

    在文件尾添加如下两行

    host   all all  192.168.100.70/32   trust   #运行70服务器连接到本机
    
    host    replication  guoxm    192.168.100.70/32   md5   #运行guoxm用户在70上复制本机数据
    

      

    注:第二个的角色必须是replication

    最后,再次配置postgresql.conf

    sudo vi /etc/postgresql/10/main/ postgresql.conf

    这次需要配置的是主机的角色

    listen_addresses = ‘*’   #监听所有ip
    
    archive_mode = on   #开启归档模式
    
    archive_command = ‘cp %p /var/lib/postgresql/10/main/%f’   #归档命令
    
    wal_level = hot_standby    #热备模式
    
    max_wal_senders = 1   #最多有1个流复制连接
    
    wal_sender_timeout = 60s    #流复制超时时间
    
    max_connections = 100   #最大连接时间,必须要小于从库的配置
    

      

    保存退出后,重启数据库服务

    sudo service postgresql restartt

    3、配置从服务器

    首先,先测试一下是否能连接主服务器

    psql -h 192.168.100.70  -U  postgres

    如果可以,说明主机配置正常,否则检查一下主机的pg_hba.conf配置

    进入到postgres用户

    sudo su - postgres

    先清空main目录下的数据(main文件夹就是PostgreSQL数据的存储文件夹)

    rm -rf 10/main/*

    或者

    rm -rf /var/lib/postgresql/10/main/*

    因为PostgreSQL的home目录就在/var/lib/postgresql中

    所以上面两条命令到达的效果是一样的

    然后,开始从主服务器上copy数据到本机上,这一步叫做“基础备份”

    pg_basebackup -h 192.168.100.71 -U guoxm –D 10/main/ -X stream –P

    或者

    pg_basebackup -F p --progress -D 10/main/ -h 192.168.100.71 -p 5432 -U guoxm --password

    pg_basebackup是PostgreSQL自带的基础备份工具

    这样,基础备份就完成了

    然后,创建recovery.conf用于从库恢复从主库获取的数据

    vi recovery.conf

    然后编辑如下配置

    standby_mode = on   #表示该节点是从库
    
    primary_conninfo = ‘host=192.168.100.71  post=5432  user=guoxm  password=guoxm’#从机信息和连接用户
    
    recovery_target_timelint = ‘latest’ #说明恢复到最新状态
    

      

    保持并退出后,

    复制或在移动到main文件夹中

    cp recovery.conf   10/main/

    或者

    mv recovery.conf   10/main/

    然后,exit退出到原用户

    最后,配置从机的postgresql.conf文件

    sudo vi /etc/postgresql/10/main/postgresql.conf

    在文件末尾添加如下配置

    wal_level = hot_standby    #热备模式
    
    max_connections = 300   #最大连接时间,必须要小于从库的配置
    
    hot_standby = on #说明这台机器不仅用于数据归档,还可以用于数据查询
    
    max_standby_streaming_delay = 30s #流备份的最大延迟时间
    
    wal_receiver_status_interval = 10s  #向主机汇报本机状态的间隔时间
    
    hot_standby_feedback = on #r出现错误复制,向主机反馈
    

      

    保存并退出

    到这里,从机配置完成

    重启数据库服务

    sudo service postgresql restart

    4、验证主从配置是否成功

    在主机上,切换到postgres用户

    sudo su – postgres

    进入数据库

     

    执行如下查询

    select client_addr,sync_state from pg_stat_replication;

    如果看到如下查询结果

     

    说明192.168.100.70是从服务器,在接收流,而且是异步流复制。说明主从配置成功

    注:必须切换到postgres用户下进行查询

    此外,还可以查看相关进程来验证是否配置成功

    在主机、从机上分别执行

    ps aux | grep postgres

    主机上可以看到正在向从机发送数据流

     

    从机上可以看到正在接收数据流

     

    到此,主从配置完成;

    参考链接:

    https://www.jianshu.com/p/2d07339774c0

    https://www.cnblogs.com/yjf512/p/4499547.html

  • 相关阅读:
    数据仓库-(3)企业级数仓实战分享课程-1.课程简介/2.数仓简介/3.基础概念/4.大数据技术栈与组件
    数据仓库-(2)企业级数仓介绍
    数据仓库-(1)数仓主题分享记录
    Spark学习小记-(1)DataFrame的schema
    Hive学习小记-(11)left semi join
    Hive学习小记-(10)hive增量下发的变化流水表如何做update操作
    Hive学习小记-(9)hive分区表加字段**
    Hive学习小记-(8)hive查询除某列外所有数据(正则表达式查询)
    Hive学习小记-(7)group by原理&tips
    我曾七次鄙视自己的灵魂
  • 原文地址:https://www.cnblogs.com/guoximing/p/9429009.html
Copyright © 2011-2022 走看看