数据库 - PostgreSql - postgresql 10.3主从配置(一台windows一台linux)

终于把主从配置弄成功了,而且是不同的系统。
今天正好有时间整理下主从配置遇到的坑,说实话双系统的主从配置确实比单系统要麻烦的多哦!!! 网上基本上特别清楚的将配置中要注意的地方,每篇文章写的又不一样,所有我再这里总结一下,大家也可以成功的。

1. 环境

centos 7 主库 172.22.32.1
windows 10 备库 172.22.32.2
postgresql 10.3

2. 安装Postgresql

主库机器和备库机器上都安装同一版本(10.3)的数据库,最大可能的避免错误(我没有验证不同版本是否可以)。
注意最好不要启动数据库(当然如果数据库启动了也没关系,比如rpm, exe等安装方式),安装过程我就不再这里详述了。

3. centos7主库配置(Master)

3.1 初始化主库(双系统必看)

我在这里卡了很长时间,原因是 locale 的问题:
linux上的 locale 默认是 zh_CN.UTF-8
windows上的 locale 默认是 Chinese (Simplified)_China.936
也就是语言环境不一样,那么当windows备机从linux主机备份数据后,导致数据库无法启动,报错也明确显示locale 的问题。

windows上没有zh_CN.UTF-8,linux上也没有Chinese (Simplified)_China.936。这种系统的问题也让程序员来填坑,怎么办呢?
用一个两个系统都有的locale --> C (C对中文的支持似乎不太好)

  1. 删除postgresql data目录中的内容 (RPM安装的话会在 /var/lib/pgsql/10/data 下)
  2. 进入postgres用户,用C初始化data
> initdb -D /var/lib/pgsql/10/data --locale=C -E UTF-8 -U postgres

当然真实的生产环境是不会出现双系统的,一般都是linux,这种方案仅供实验

3.1 创建Replication用户

登陆Master库,创建具有用于传递数据的具有replication权限的用户(也可以直接用Super user当作replication用户,但不推荐)

$ psql -U postgres -d postgres

postgres=# CREATE ROLE replica login replication password 'replica';

3.2 Master库网络策略

修改Master库的pg_hba.conf,把Master库和Standby库的IP地址添加进Master库网络策略白名单中,使Standby库可以连上Master库,同时便于主备切换。

$ vi pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32          md5
host    all             all             0.0.0.0/0             md5
# IPv6 local connections:
host    all             all             ::1/128               md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                             md5
host    replication     replica      172.22.32.1/32           trust
host    replication     replica      172.22.32.2/32           trust
#host    replication     postgres        127.0.0.1/32         md5
#host    replication     postgres        ::1/128              md5

replication配置中,最好把 master 和 standby 的主机地址都写上 ( 一定要注意,因为这里不写的话,你后面有可能会忘掉配置standby机器 )

3.3 Master库数据库配置

修改Master库的配置文件postgresql.conf,在原配置文件postgresql.conf的基础上修改,修改内容如下:

$ vi postgresql.done

wal_level= logical
max_wal_senders = 10
archive_mode = on
archive_command =  'test ! -f /var/lib/pgsql/10/data/arch_dir/%f && cp %p /var/lib/pgsql/10/data/arch_dir/%f'
synchronous_standby_names = ''  
hot_standby=on

synchronous_standby_names参数对应的参数为同步复制保障节点,如果该参数非空,则任何一个最上层的事务都会等待被同步到该参数指明的节点后才会在Master库提交,如果Standby库无响应Master库会被hung住。如果该参数为空,则表示采用异步复制方式。该参数可以配置多个保障节点,以逗号分隔,PG会从第一个开始尝试。开启同步复制存虽然能最大限度保证数据安全,但是会影响应用可用性。同步模式下,如果Master和Standby之间的网络状况很糟糕,那么同步复制会极大的拉低整个系统的性能;如果Standby宕机,主库会被hang住,虽然这里只记录异步复制,但具体采用何种复制请按自身业务场景选择。

修改后的postgresql.conf配置文件既能作为Master库的配置文件使用,也能作为Standby库的配置文件使用。

3.4 主库配置recovery文件

这个文件时主备切换时才用到的,也可以不配置,但备库必须要有这个文件(从 share文件夹复制 recovery.conf.sample 到 data 中,并改名为 recovery.conf)

$ vi recovery.done

standby_mode=on
restore_command = 'cp /var/lib/pgsql/10/data/arch_dir_master/%f %p'
primary_conninfo='application_name=pg2 host=172.22.32.2 port=5432 user=replica password=replica'
archive_cleanup_command ='pg_archivecleanup /var/lib/pgsql/10/data/arch_dir_master %r'
recovery_target_timeline = 'latest'

配置好后启动或重启 postgresql 服务

> systemctl start postgresql-10.service

4. 备库(Standby库)配置

Standby库需要以Master库的完整备份+归档日志恢复而来,如果Master库尚未对外提供服务,也可以直接复制Master库的数据文件目录,这里采用第一种方法,更贴近实际环境。
接下来的操作均在Standby库上进行,备库上仅安装好数据库软件,没有启动数据库。

我采用的备库是windows环境,由于使用 exe 安装方式,会直接初始化并启动数据库,那怎么办呢?

  1. 停止服务(管理 --> 服务 --> 停止)
  2. 进入postgresql data目录,清空目录。 是的,清空目录里的所有文件,连配置也清除。

4.1 主库热备份创建Standby库

进入 postgresql bin 目录下,在这里打开CMD, 从主库备份data到本地数据库的data中

> pg_basebackup -D ../data -P -h 172.22.61.7 -U replica

-D: data所在的路径,数据库数据存放路径
-h :远程主库地址
-U: 使用哪个用户进行登录

一定要从主库备份data来创建Standby库。不要以为主库没数据,就可以不用备份,而直接启动数据库,那你又会遇到坑的。如下:
数据库系统标识符(database system identifier)不一致

4.2 配置文件检查修改(双系统必看)

双系统配置的朋友千万不要略过这一步,这里就是说 windous与 linux 的差异。
由于data中的 pg_hba.conf 和 postgresql.conf 都是从linux中复制过来,一定要检查一些属性。如果你在启动备库时遇到了下面这个错误,很有可能这些有关系。

服务启动时停止

pg_hba.conf

# "local" is for Unix domain socket connections only
local   all             all                                     trust

上面这条配置,在windows中必须删除,不懂的直接看上面的英文注释。

postgresql.conf

windows:	dynamic_shared_memory_type = windows
linux:		dynamic_shared_memory_type = posix

4.3 修改备库的recovery文件

standby_mode=on
#restore_command = 'cp /PostgreSQL/10/data/arch_dir_master/%f %p'
primary_conninfo='application_name=pg3 host=172.22.32.1 port=5432 user=replica password=replica'
#archive_cleanup_command ='pg_archivecleanup /PostgreSQL/10/data/arch_dir_master %r'
recovery_target_timeline = 'latest'

启动服务器就可以了。

更多高端的postgresql技术请参考:
PostgreSQL一主两从实现及主从切换
PostgreSQL 10.3数据库主从复制

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值