当前位置:   article > 正文

Postgresql12搭建主从_ubuntu 安装postgresql 12

ubuntu 安装postgresql 12

环境说明:

Linux系统:Ubuntu 22

主节点:192.168.56.100

从节点:192.168.56.102

1.Ubuntu22使用apt库安装PG12
1.1主从节点安装PG

ubuntu use the apt repository  官方文档地址:
https://www.postgresql.org/download/linux/ubuntu/

  1. # Create the file repository configuration:
  2. sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
  3. # Import the repository signing key:
  4. wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  5. # Update the package lists:
  6. sudo apt-get update
  7. # Install the latest version of PostgreSQL.
  8. # If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
  9. sudo apt-get -y install postgresql-12

注意:apt repository安装PG12后默认开机启动服务对应数据目录是/var/lib/postgresql/12/main,可以禁用服务systemctl disable postgresql,后续在启动pg服务时指定库文件目录pg_ctl start -D /库文件目录。也可以修改启动的service;

安装后PG的各文件目录:

 配置文件路径: /etc/postgresql-common/createcluster.conf

bin目录:/usr/lib/postgresql/12/bin

systemd的服务软连接: /etc/systemd/system/multi-user.target.wants/postgresql.service → /lib/systemd/system/postgresql.service

数据目录: /var/lib/postgresql/12/main

日志文件: /var/log/postgresql/postgresql-12-main.log

数据库用户: postgres

查看安装目录:whereis postgresql 

1.2.主节点192.168.56.100 新建数据目录并初始化库:

新建数据目录/data/pg12并在新建目录初始化库:

如需修改postgres 的linux账户密码或者数据库账户密码参考:

CSDNicon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/134453141注:initdb,pg_ctl,psql需切到 postgres 账户执行。

  1. mkdir /data/pg12 #创建数据目录
  2. chown postgres:postgres  /data/pg12 #修改目录owner
  3. su - postgres #切到postgres用户执行下面命令初始化库,启动数据库服务
  4. /usr/lib/postgresql/12/bin/initdb -D /data/pg12
  5. /usr/lib/postgresql/12/bin/pg_ctl -D /data/pg12 -l logfile start
  6. #使用psql命令连接postgres数据库,\l 查看实例上库列表如下图。(god为自建库名称)
  7. psql

1.3主节点创建热备用户:

启动主节点数据库服务,运行psql
在psql命令行中执行,注意用户名只能是小写字母:

CREATE USER replica REPLICATION LOGIN CONNECTION LIMIT 6 ENCRYPTED PASSWORD 'abc123';
1.4修改主节点pg_hba.conf文件添加下面配置:

    修改保存后,select pg_reload_conf(); reload一下配置文件生效

    注:方便后续主从切换可以将主节点IP也加进去

  1. #允许访问的IP白名单,0.0.0.0/0为不限制登录。生产可以根据需要网段设置。
  2. host all all 0.0.0.0/0 md5
  3. #设置流复制账户访问权限,主节点上配置的是从节点IP。
  4. #对应后续从节点上IP需要调整为主节点(后续测试主从切换时莫忘记从节点该文件需要调整IP)
  5. host replication replica 192.168.56.102/32 trust
  6. host replication replica 192.168.56.100/32 trust
1.5主节点postgresql.conf配置文件调整
  1. #PG12默认即为replica
  2. wal_level=replica
  3. #指定pg_wal目录中保存的历史的wal文件最小数量。防止主库生成WAL日志过快流复制还没发送到standby就被覆盖,一个WAL日志文件的大小是16M应适当调大。
  4. wal_keep_segments = 64
  5. hot_standby=on
  6. #默认只监听本机,* 为监听所有地址。
  7. listen_addresses = '*'
  8. # 为超级用户保留的连接数
  9. superuser_reserved_connections = 10
  10. #开启归档,默认为off。
  11. archive_mode = on
  12. #存在active_archive文件时才真正进行保存归档日志,不想保存时只需删除该文件。如此开关归档不需重启服务。
  13. #归档日志执行shell命令,可以按日期保存归档目录以及清理超期日志
  14. archive_command = 'test ! -f /data/archive_wals/active_archive || /bin/bash /data/archive_wals/pg_archivelog.sh %p %f'

上面归档archive_command调用的shell脚本:

  1. #!/bin/bash
  2. DATE=`date +%Y%m%d`
  3. DIR="/data/archive_wals/$DATE"
  4. BACK="/data/archive_wals/"`date -d '-2 day' +%Y%m%d`
  5. if [ -d "$BACK" ]; then
  6. rm -rf $BACK
  7. echo `date "+%F %T"`" success rm $BACK" > /data/archive_wals/sh.log
  8. fi
  9. (test -d $DIR || mkdir -p $DIR) && cp $1 $DIR/$2
1.6重启主节点

开启归档等一些参数调整后需重启数据库服务

  1. su - postgres #切到postgres用户执行下面命令初始化库,重启数据库服务
  2. /usr/lib/postgresql/12/bin/pg_ctl -D /data/pg12 start
2.搭建备用节点
 2.1安装PG12参考1.1
 2.2.备节点192.168.56.102 新建数据目录:

新建数据目录/data/pg12,不初始化库

  1. mkdir /data/pg12 #创建数据目录
  2. chown postgres:postgres  /data/pg12 #修改目录owner

在slave节点192.168.56.102,保证$PGDATA目录为空,否则pg_basebackup过程会报错pg_basebackup: directory “/XX” exists but is not empty

2.3使用pg_basebackup在从节点执行,备份主库数据文件到备节点:
  1. #切到postgresq用户下执行
  2. /usr/lib/postgresql/12/bin/pg_basebackup -h192.168.56.100 -D/data/pg12 -U replica -v -P -R
2.4Slave节点启动备库:
  1. #启动前调整权限,否则可能报
  2. #waiting for server to start....2019-10-11 23:30:21.030 CST [6538] FATAL: data directory #"/data/pg12" has invalid permissions
  3. #2019-10-11 23:30:21.030 CST [6538] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
  4. chmod 0750 /data/pg12
  5. /usr/lib/postgresql/12/bin/pg_ctl start -D /data/pg12
2.5查看主备同步状态:
select * from pg_stat_replication; 

仅主节点有查询结果
client_addr:主备同步客户端IP地址
sync_state:有三种状态:sync(同步),async(异步),potential(现在是异步模式,有可能升级到同步模式)。注意:主备模式下,备库为只读 
state:同步状态:startup(连接中)、catchup(同步中)、streaming(同步)
默认情况搭建的主备是异步模式(sync_state: async)。

备节点查看日志接收情况:

select * from pg_stat_wal_receiver;

仅备节点有查询结果。

2.6测试主备同步情况:

在主节点新建库,并新建表后插入数据:

  1. --新建库
  2. create database cc;
  3. --切换到cc库
  4. use cc
  5. --创建表
  6. create table cc_test(id int not null,names varchar(200));
  7. --表内插入数据
  8. insert into cc_test(id,names)
  9. values (1,'cc'),(2,'bb');

登录从节点,确定上面新建库表同步到从节点。

  1. #从节点(102)登录pg命令行客户端
  2. psql
  3. #\l列出库列表
  4. \l
  5. #切换到cc库
  6. use cc;
  7. #查询表内数据
  8. select * from cc_test;
3.测试主备切换
3.1主节点停止服务(模拟宕机):
  1. #主节点执行,停止pg服务
  2. /usr/lib/postgresql/12/bin/pg_ctl stop -D /data/pg12
3.2备节点切换为主
  1. #从节点切换到postgres账户执行
  2. su - postgres
  3. /usr/lib/postgresql/12/bin/pg_ctl promote

waiting for server to promote.... done
server promoted

执行完成后,/data/pg12目录下standby.signal文件被清除。

3.3重启原备用节点(192.168.56.102):
  1. su - postgres
  2. /usr/lib/postgresql/12/bin/pg_ctl stop -D /data/pg12
3.4老的主节点设置为备节点 (192.168.56.100)并重启数据库:

原主节点的postgresql.auto.conf 没有自动生成 primary_conninfo ,需要手动设置。

  1. su - postgres
  2. psql
  3. alter system set primary_conninfo ='host=192.168.56.102 port=5432 user=replica passowrd=abc123';

重启原主库:

  1. su postgres
  2. /usr/lib/postgresql/12/bin/pg_ctl start -D /data/pg12
3.5查看切换后主从节点状态参考2.6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/173459
推荐阅读
相关标签
  

闽ICP备14008679号