PostgreSQL实战之双机热备(二)

版权声明:本文为神州灵云作者的原创文章,未经神州灵云允许不得转载。

本文作者:Jack

上一篇文章主要讲了双机热备的主-备方式(Active-Standby),今天来说一下另外一种方式:双主方式(Active-Active)。

PostgreSQL 9.4之前的版本并不支持双主方式,只能采用第三方插件来实现,比如:Bucardo、Pgpool、Slony等,这些都是基于触发器的解决方案,虽然从理论上解决了问题但其实并不是一个好的解决方案。令人欣喜的是从PostgreSQL 9.4版本增加了一个全新的技术来支持双主方式,称为BDR(双向复制)。

BDR1(PostgreSQL 9.4)是免费的,而BDR2(PostgreSQL 9.6)和BDR3 (PostgreSQL>=10)则是收费的,我们以PostgreSQL 9.4版本为基础来探究一下双向复制功能。

环境:

操作系统 Centos7 64位
主机master 192.168.1.100
备机slave 192.168.1.200
PostgreSQL版本 bdr-9.4

安装:

安装过程和前面的文章《双机热备(一)》的安装方式基本一致,没有特别说明的情况下主机和备机都需要执行下面操作,本安装采用RPM包离线安装方式,当然如果你的机器能联网用yum在线安装更方便,这里提供一下下载地址:
http://packages.2ndquadrant.com/postgresql-bdr94-2ndquadrant/yum-repo-rpms/postgresql-bdr94-2ndquadrant-redhat-1.0-2.noarch.rpm

  1. 安装(按顺序):
    # rpm -ivh postgresql-bdr94-libs-9.4.17_bdr1-1.el7.x86_64.rpm
    # rpm -ivh postgresql-bdr94-9.4.17_bdr1-1.el7.x86_64.rpm
    # rpm -ivh postgresql-bdr94-server-9.4.17_bdr1-1.el7.x86_64.rpm
    # rpm -ivh postgresql-bdr94-contrib-9.4.17_bdr1-1.el7.x86_64.rpm
    # rpm -ivh postgresql-bdr94-bdr-1.0.5-1.el7.x86_64.rpm
    1.jpg

  2. 初始化数据库:
    # /usr/pgsql-9.4/bin/postgresql94-setup initdb
    2.jpg

  3. 启动PostgreSQL服务并使之开机自启
    # systemctl enable postgresql-9.4
    3.jpg

  4. 启动数据库
    # systemctl start postgresql-9.4
    4.jpg

  5. 给默认账户设置密码
    # alter user postgres with encrypted password ‘test’;
    5.jpg

  6. 配置PostgreSQL-MD5认证
    修改文件:/var/lib/pgsql/9.4-bdr/data/pg_hba.conf 增加如下配置:
    host replication postgres 0.0.0.0/0 md5
    host all all 0.0.0.0/0 md5

并注释掉host all all 127.0.0.1/32 ident
6.jpg

  1. 配置PostgreSQL-Configure TCP/IP,默认情况下,TCP/IP连接是不可行的,所以其他计算机用户不能连接到postgresql。
    修改文件:/var/lib/pgsql/9.4-bdr/data/postgresql.conf 增加如下配置:
    listen_addresses = ‘*’
    port = 5432
    max_connections = 500
    7.jpg

  2. BDR复制配置:
    修改/var/lib/pgsql/9.4/data/postgresql.conf,在文件末尾增加以下属性:

max_worker_processes = 50
max_replication_slots = 50
max_wal_senders = 50
shared_preload_libraries = ‘bdr’
track_commit_timestamp = on
wal_level = logical
default_sequenceam = ‘bdr’
8.jpg
此配置完成以后需要重启一下postgresql服务

  1. 创建测试表以及对应的extension:
    # created test
    # psql test
    # CREATE EXTENSION btree_gist;
    # CREATE EXTENSION bdr;
    9.jpg

  2. 创建主库的bdr相关信息:
    # SELECT bdr.bdr_group_create(local_node_name := ‘test-Active’,node_external_dsn := ‘host=192.168.1.100 port=5432 dbname=test user=postgres password=test’);

说明:
local_node_name:主库的节点名称
node_external_dsn:主库的相关信息,包括IP、端口、数据库名称、账号密码

  1. 创建备库的bdr相关信息:
    # SELECT bdr.bdr_group_join(local_node_name := ‘test-Standby’,node_external_dsn := ‘host=192.168.1.200 port=5432 dbname=test user=postgres password=test’,join_using_dsn := ‘host=192.168.1.100 port=5432 dbname=test user=postgres password=test’);

说明:
local_node_name:备库的节点名称
node_external_dsn:备库的相关信息,包括IP、端口、数据库名称、账号密码
join_using_dsn:备库的相关信息,包括IP、端口、数据库名称、账号密码

验证配置:

  1. 在主库的服务器上输入命令,会看到多出一个wal sender process的进程:
    # ps -aux | grep postgres
    验证配置1.jpg

  2. 在备库的服务器上输入命令,会看到多出一个wal sender process的进程:
    # ps -aux | grep postgres
    验证配置2.jpg

测试:

  1. 在主机上创建表user,然后在备机上可以看到user表已经被复制过来了,在主机上插入数据,备机上数据也已经复制。
    测试1-1.jpg
    测试1-2.jpg

  2. 在备机上创建表并插入数据,然后在主机上可以看到这条数据已经被复制过来了
    测试2-1.jpg
    测试2-2.jpg

  3. 停止主机,在备机上插入数据,然后再启用主机,可以看到主机也是有这条数据的
    测试3-1.jpg
    测试3-2.jpg

至此,双机热备的两种方式都讲完了,实际项目中可以根据相应的需求采用对应的灾备方案。

神州灵云二维码.png

猜你喜欢

转载自blog.csdn.net/dclingcloud/article/details/88938101