一、安装postgresql
此次安装版本为postgresql11.6,因已提前准备好安装所需的RPM包,所以使用RPM形式安装。
1、rpm包安装:
mkdir /tmp/pgsql && cd /tmp/pgsql
将"postgresql-11"中的RPM包传到/tmp/pgsql中
rpm -ivh *.rpm --nodeps --force
2、查看安装结果:rpm -qa | grep postg
3、配置:
# 初始化数据库 #
/usr/pgsql-11/bin/postgresql-11-setup initdb
# 启动pg #
systemctl start postgresql-11
# 设置开机启动#
systemctl enable postgresql-11
4、修改pg配置文件
vi /var/lib/pgsql/11/data/postgresql.conf
#取消data_directory注释,修改data_directory = 'ConfigDir'为data_directory = '/data/pgsql_data/'
data_directory = '/data/pgsql_data/'
#
修改最大连接数,一般1000就够用了
max_connections
#将监听地址修改为*
#默认listen_addresses配置是注释掉的,所以可以直接在配置文件开头加入该行
listen_addresses='*'
#修改配置文件
vi /var/lib/pgsql/11/data/pg_hba.conf
#在问价尾部加入
host    all             all             0.0.0.0/0               md5
创建pgsql数据存储路径:mkdir -p /data/pgsql_data/
cp -r /var/lib/pgsql/11/data/* /data/pgsql_data/
chown -R postgres:postgres /data/pgsql_data/
mv  /var/lib/pgsql/11/data  /tmp/data
vi /usr/lib/systemd/system/postgresql-11.service
# 将Environment=PGDATA=/var/lib/pgsql/11/data/修改为Environment=PGDATA=/data/pgsql_data/
Environment=PGDATA=/data/pgsql_data/
#重启PostgreSQL服务
chmod 700 /data/pgsql_data
systemctl daemon-reload
systemctl restart postgresql-11
5、修改postgres账号密码:
1、进入PostgreSQL命令行:su postgres
2、启动SQL Shell:psql
3、修改密码:ALTER USER postgres WITH PASSWORD 'Psql135246';
4、\q用于退出psql命令行
然后使用navicat连接pgsql或使用命令行连接,能连接表示安装成功。

二、postgresql11主从配置:
1、主库设置:
1.1、创建同步账号:
登陆Master库,创建具有用于传递数据的具有replication权限的用户【也可以直接用Super user当作replication用户,但不推荐】
CREATE ROLE repl login replication password 'Psql135246';
1.2、修改Master库的pg_hba.conf,把Master库和Standby库的IP地址添加进Master库网络策略白名单中,使Standby库可以连上 Master库,同时便于主备切换:
host    replication     repl            主节点ip/32         md5
host    replication     repl            从节点ip/32         md5
修改master库postgresql.conf文件:vi postgresql.conf
wal_level = replica                  # 开启wal日志归档
wal_log_hints = on                 # 用于主从切换
max_wal_senders = 10            # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个
wal_sender_timeout = 60s      # 设置流复制主机发送数据的超时时间
max_connections = 1000        # 这个设置要注意下,从库的max_connections必须要大于主库的
shared_buffers = 8GB             #推荐内存的1/4
synchronous_standby_names = ''
hot_standby = on 
work_mem = 128MB
maintenance_work_mem = 64MB
archive_mode = on
archive_command = 'cp %p /data/pgsql_data/arch_dir/%f; find /data/pgsql_data/arch_dir -type f -mtime +7 |xargs rm -f'
1.3、新建归档目录,赋予权限,重启主库:
mkdir -p /data/pgsql_data/arch_dir
chown -R postgres:postgres /data/pgsql_data
systemctl restart postgresql-11

2、从库配置:
2.1、停止postgres服务:systemctl stop postgresql-11
2.2、删除数据文件:rm -rf /data/pgsql_data/*
2.3、从主库拉取数据文件:/usr/pgsql-11/bin/pg_basebackup -h 主节点ip -U repl -F p  -P -R -D /data/pgsql_data
2.4、修改所属组:chown -R postgres:postgres /data/pgsql_data
2.5、修改postgresql.conf:vi postgresql.conf
max_connections = 1200
2.6、启动从库,并在主库中查看流复制的信息可以使用主库上的视图:systemctl start postgresql-11(从库中运行)
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;(主库中运行)
  pid  |   state   | client_addr  | sync_priority | sync_state 
-------+-----------+--------------+---------------+------------
 58243 | streaming | 从节点ip |             0 | async
(如看到从库IP,则表明主从已同步)
2.7、再次测试主动同步:
在主库创建数据库test:进入数据库,运行create database test;
去从库查看是否出现test:SELECT datname FROM pg_database;
在主库删除test数据库:drop database test;
对比主从数据库大小:select pg_size_pretty(pg_database_size('DB_name'));

三、主备切换步骤(以下只适用于12.0以下的版本,停止主库pgsql,模拟主库故障):
1、在主库操作:systemctl stop postgresql-11
2、在备库操作:su postgres
2.1、检查状态:/usr/pgsql-11/bin/pg_controldata -D /data/pgsql_data
# 显示in archive recovery说明为备库
Database cluster state:               in archive recovery

2.2、 激活备库为可读写:/usr/pgsql-11/bin/pg_ctl promote -D /data/pgsql_data/

2.3、检查备库上的数据库角色:/usr/pgsql-11/bin/pg_controldata -D /data/pgsql_data
如果:Database cluster state: 显示in production说明已经提升为主库。

2.4、此时原主库也是in production状态,需要将其转换成备库(主库降为备库的操作见如上从库的配置步骤):
停止postgres服务:systemctl stop postgresql-11
删除数据文件:rm -rf /data/pgsql_data/*
从主库拉取数据文件:/usr/pgsql-11/bin/pg_basebackup -h 主节点ip -U repl -F p  -P -R -D /data/pgsql_data
修改所属组:chown -R postgres:postgres /data/pgsql_data
修改postgresql.conf:vi postgresql.conf
max_connections = 1200
启动pgsql服务:systemctl start postgresql-11
查看数据库角色是否变为备库:/usr/pgsql-11/bin/pg_ctl promote -D /data/pgsql_data/(是否显示为in archive recovery)

四、搭建keepalived:
设置开机自启:systemctl enable keepalived
主节点配置:
vi /etc/keepalived/keepalived.conf
#全局配置
global_defs {
#   vrrp_strict  # 这行注释掉
}

#执行脚本配置
vrrp_script check_pg_alived {
    script "/etc/keepalived/scripts/check_pg.sh"   #检测脚本位置
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP # 主备一致,都是BACKUP
    interface ens224 #网卡,ip a查看本机IP所在的网卡名称
    virtual_router_id 53 # 主备需要一致,且同网段唯一
    priority 101 # 优先级,主需要比备高;比如主是101,备可以是100
    advert_int 1
    authentication {
        auth_type PASS  # 主备需要一致
        auth_pass 1111 # 主备需要一致
    }
    track_script {
      check_pg_alived
    }
    virtual_ipaddress {  # vip设置,主备一致
       192.168.0.11
    }
}

从节点配置:
vi /etc/keepalived/keepalived.conf
#全局配置
global_defs {
#   vrrp_strict  # 这行注释掉
}

#执行脚本配置
vrrp_script check_pg_alived {
    script "/etc/keepalived/scripts/check_pg.sh"   #检测脚本位置
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP # 主备一致,都是BACKUP
    interface ens224 #网卡,ip a查看本机IP所在的网卡名称
    virtual_router_id 53 # 主备需要一致,且同网段唯一
    priority 91 # 优先级,主需要比备高,比如主是101,备可以是100
    advert_int 1
    authentication {
        auth_type PASS  # 主备需要一致
        auth_pass 1111 # 主备需要一致
    }
    track_script {
      check_pg_alived
    }
    virtual_ipaddress {  # vip设置,主备一致
       192.168.0.11
    }
}

创建存放脚本和log的目录:
mkdir  /etc/keepalived/scripts && mkdir  /etc/keepalived/log

主节点和从节点检测存活脚本配置:
vi /etc/keepalived/scripts/check_pg.sh
#!/bin/bash
#判断pg是否活着
A=`netstat -lnp | grep LISTEN | grep :5432 | wc -l`

#如果pg死了,将消息写入日记并且关闭keepalived
if [ $A -eq 0 ];then
    echo "`date "+%Y-%m-%d--%H:%M:%S"` postgresql stop so vip stop " >> /etc/keepalived/log/check_pg.log
    systemctl stop keepalived
fi

systemctl start keepalived
查看VIP是否已经在主机上

五、keepalived使用说明:
当主节点由于某原因down掉后,VIP会在五秒内自动切换至从节点,此时由从节点提供数据库服务。但此时从节点read-only,只能查询无法写入、删除。
此时有两个方案:
1、如果主节点能较快排查出原因并恢复主节点数据库,那么此时只要将主节点数据库服务跑起来,然后重启主节点的keepalived服务,VIP会在五秒内转移到主节点,将由主节点继续提供数据库服务。
2、如果主节点一时半会无法恢复,此时需要将从节点提升至为主,详细操作看'步骤三',此时从节点提升为主,可读写。原故障的主库恢复后,需要重启原主库的keepalived服务,并将修复后的原主库降级为从,详细步骤请看'二'中的从库配置步骤。(降级前建议先备份一份原主库的数据)

centos7/redhat7 PostgreSql搭建主从同步+Keepalived高可用 数据库高可用相关推荐

  1. memcache高集群搭建----主从同步实验

    目录 一.环境部署 二.主从服务器搭建 2.1 修改主机名 2.2 上传软件包并解压 2.3 主服务器上安装magent代理 2.4 主从服务器搭建keepalived 2.5 主服务器中keepal ...

  2. MySQL(17) 通过Docker搭建主从同步

    一.前言 本文将基于Docker部署2台MySQL服务实现主从同步,即主master用于写(增删改),从slave用来读(查) 二.Docker搭建MySQL实现主从同步 1.master(主)配置 ...

  3. Redis搭建主从同步流程及原理

    目录 一.关于 Redis 主从复制 1.1 关于 Redis 的主从复制 1.2 Redis 主从架构 1.3 优缺点 二.配置 Redis 主从复制 2.1 准备事项 2.2 同步服务器的时区和时 ...

  4. mysql desc hcy.t1_mysql主从同步出错故障处理总结[数据库技术]

    在发生故障切换后,经常遇到的问题就是同步报错,数据库很小的时候,dump完再导入很简单就处理好了,但线上的数据库都150G-200G, 如果用单纯的这种方法,成本太高,故经过一段时间的摸索,总结了几种 ...

  5. MySQL集群搭建——主从同步(一主二从)

    一.安装MySQL数据库 Centos7安装MySQL5.7 目前准备了三台服务器作为主从配置数据库 #主 192.168.159.100:3306 #从 192.168.159.101:3306 # ...

  6. Redis数据库搭建主从同步(主从概念、主从配置、主从数据操作)

    1. 主从概念 ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读 ...

  7. mysql数据库主从同步的原理_mysql数据库主从同步复制原理

    MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQ ...

  8. mysql 主从故障处理_mysql主从同步出错故障处理总结[数据库技术]

    Error_code:1032;handlererrorHA _ERR_KEY_NOT_FOUND; end_log_po25theevent\'masterlogmysql-bin.000006.4 ...

  9. 搭建Mysql-proxy实现主从同步读写分离

    代理服务器 Wg61 192.168.0.180 (Mysql-proxy) 主服务器 Wg62 192.168.0.142 (负责写入数据) 从服务器 Wg63 192.168.0.156 (负责只 ...

最新文章

  1. python 速度矢量_最近邻搜索4D空间python快速-矢量化
  2. 贪心 ---- 贪心 + STL维护 + 划分集合 L. Neo-Robin Hood(好题)
  3. 使用AndroidStudio编译NDK的方法及错误解决方案
  4. android7.1增加一个开机自启动的bin应用遇到的权限问题
  5. 快速傅里叶变换Matlab示例
  6. Use Vim as a Python IDE
  7. [BZOJ 1452] Count
  8. 这六个问题,让物理学家寝食难安
  9. html获取子节点数量,css判断子元素个数
  10. gmail谷歌邮箱开启SMTP
  11. CSS 哀悼日 网页全灰效果
  12. android声音编辑器,音频视频编辑器app下载-Audio Video Editorv1.1.0 安卓版-腾牛安卓网...
  13. 波束成形算法之波束宽度
  14. 隐马尔可夫模型之Baum-Welch算法详解
  15. qq三国挂机云服务器,云服务器挂机QQ三国游戏的流程和实际操作概况记录
  16. 视频添加图片背景怎么操作
  17. 企业网路神警上网行为监管系统
  18. SIM应用那些事儿,你做对了吗?
  19. 分布式与集群的区别究竟是什么?
  20. 山东省职业院校技能大赛“H5交互融媒体内容设计与制作”比赛回顾

热门文章

  1. MySQL数据库--01--一头扎进大沙漠-数据库概述
  2. “QQ游戏邀请大盗”技高一筹 利用邀请漏洞
  3. 腾讯起点学院:用户增长训练营
  4. PHP在线自动发卡网源码 一键安装版
  5. 链接脚本(一)基本概念和格式
  6. 记录:MySQL报错1075 - Incorrect table defintion;there can be only...【解决方案】
  7. vue 制作带二维码的海报并下载 。 (html2canvas转为图片不显示文字的方法)
  8. SpringBoot整合Swagger
  9. 华为设备配置PIM-SM命令
  10. Cesium 视锥体绘制,并动态更新朝向