postgresql9.5安装、主从复制、主备切换

一、安装pg9.5

网上教程都是yum源找不到,很崩溃

自己去官网找到了办法换源,在这个网址的最底部有教程:Repo RPMs - PostgreSQL YUM Repository

// 配置源,如果是9.6就改成9.6,本次使用9.5
cat << EOF > /etc/yum.repos.d/pgdg-95.repo
[pgdg90]
name=PostgreSQL 9.5 RPMs for RHEL/CentOS 7
baseurl=https://yum-archive.postgresql.org/9.5/redhat/rhel-7-x86_64
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
EOF

// 安装
yum install postgresql95-server


// 初始化并启动postgresql
/usr/pgsql-9.5/bin/postgresql95-setup initdb

// 看命令
systemctl list-unit-files --type=service | grep postgresql 

// 启动postgresql
systemctl enable postgresql-9.5       // 开机自启动
systemctl start postgresql-9.5        // 启动
systemctl restart postgresql-9.5      // 重启
systemctl stop postgresql-9.5         // 停止


坑:如果报错就执行 清除yum缓存 的命令,然后重新安装
Not using downloaded pgdg90/repomd.xml because it is older than what we have:

// 清除yum缓存
sudo yum clean all
// 安装
yum install postgresql95-server

二、主库配置

一些路径:

/var/lib/pgsql/9.5/data/pg_hba.conf

/var/lib/pgsql/9.5/data/postgresql.conf

/var/lib/pgsql/9.5/data/recovery.conf

postgresql.conf 配置文件修改

// 必须配置
listen_addresses='*'      #允许从节点连接
wal_level=hot_standby     #以启用归档模式
max_wal_senders=2         #允许的最大WAL发送者数量,指定连接到主节点的从节点数量,大于1就行
wal_keep_segments=64      #保留的WAL段数
hot_standby=on            #备份的时候允许查询,启用从节点的热备模式
wal_log_hints=on          # pg_rewind要使用,放心打开,不会有需要手动清理的文件产生
full_page_writes = on     # pg_rewind要使用,放心打开,不会有需要手动清理的文件产生


// 选择配置
wal_send_timeout=60s      #打开
archive_mode=on            #启用归档模式
archive_command= /bin/true         #暂时用伪命令就行
#archive_command = 'cp %p /path/to/archive/%f'

启动pg

创建一个账户repl2负责主从复制

sudo -u postgres psql

创建允许复制的账户
CREATE ROLE repl2 LOGIN REPLICATION PASSWORD '123456';

pg_hba.conf 配置文件修改,把 postgres账户 也提前配置上,后面也要用这个账户

host replication <从节点用户名> <从节点IP地址/子网掩码> trust

如:
host replication repl2      0.0.0.0/0	trust
host all         repl2      0.0.0.0/0	trust
host all         postgres   0.0.0.0/0	trust

权限问题,这里必须是0700,如果是0777会有各种问题!!!

执行
chown -R  postgres:postgres /var/lib/pgsql/9.5/data
chmod -R  0700 /var/lib/pgsql/9.5/data

重启pg

三、从库配置

注意:从库不要初始化,如果已经初始化,需要清空 /usr/local/postgresql/data 目录

# 删除前先备份
cp -r /var/lib/pgsql/9.5/data /var/lib/pgsql/9.5/data.bak

# 删除
rm -rf /var/lib/pgsql/9.5/data/*

从主库备份数据:相当于把主库的data目录全量复制过来,然后产生recovery.conf 文件

sudo -u postgres /usr/pgsql-9.5/bin/pg_basebackup -h 主库ip -U repl2 -F p -x -P -R -D /var/lib/pgsql/9.5/data/ -l rep_backup20230705

将产生 recovery.conf 文件

recovery.conf 配置文件修改

#以下配置如果有就不加
recovery_target_timeline = 'latest'    # 一般加这一行就行
standby_mode = on
primary_conninfo = 'host=主机IP port=5432 user=admin password=123456'

权限问题:

执行
chown -R  postgres:postgres /var/lib/pgsql/9.5/data
chmod -R  0700 /var/lib/pgsql/9.5/data

启动postgresql 

四、状态监控

日志文件位置:/var/lib/pgsql/9.5/data/pg_log/postgresql-Sun.log

sql语句:

 select pg_is_in_recovery();     // t 表示备库

 监控命令:

/usr/pgsql-9.5/bin/pg_controldata /var/lib/pgsql/9.5/data/

五、测试

sudo -u postgres psql -d runoobdb

CREATE DATABASE runoobdb;
\l                    // 看数据库
\c runoobdb           // 切换数据库

CREATE TABLE COMPANY(
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL
);

INSERT INTO COMPANY (NAME,AGE) VALUES ('Allen', 25);
INSERT INTO COMPANY (NAME,AGE) VALUES ('Lily', 30);
INSERT INTO COMPANY (NAME,AGE) VALUES ('ZHANG', 68);

主库新增数据,备库能查到,只是此时备机是只读的,因为防止乱套了 

六、主机故障、备机切换成新主机

停止主机

备机切换成主机

sudo -u postgres /usr/pgsql-9.5/bin/pg_ctl promote -D /var/lib/pgsql/9.5/data

// 如果是sql:SELECT pg_ctl promote;

产生 recovery.done文件,标识从服务器已经成为了主服务器,数据恢复完成

七、旧主机切换成新备机,使用pg_rewind

使用pg_rewind:增量同步数据

优点:速度比较快,可以理解为增量的数据恢复

使用前提:旧主机没有新增数据的产生。如果旧主机和新主机都有新数据产生,不适合使用pg_rewind,而应该使用pg_basebackup来全量恢复数据

相当于把新主库的data目录数据部分增量复制过来,其他文件去量复制过来,由于新主库有recovery.done文件,需要手动改成recovery.conf文件

sudo -u postgres /usr/pgsql-9.5/bin/pg_rewind --target-pgdata=/var/lib/pgsql/9.5/data/ --source-server="host=192.168.1.39 dbname=runoobdb user=postgres" -P

接下来把新备机上的recovery.conf 配置文件修改,按照步骤三。注意改掉ip,还有要注意权限问题

启动新备机

新主库新增数据,新备库能查到

至此,完成 主从复制 —— 主机宕机 + 备机升主 —— 老主机提升为新备机

八、另:一些报错解决

解决:
a、设置:hot_standby=on            #备份的时候允许查询,启用从节点的热备模式 
b、先stop再start试试

pg_basebackup: FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory

解决:参考权限不够

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL 9.5 支持双主复制(也称为异步复制)。在这种配置中,两个 PostgreSQL 实例都可以向对方写入数据,这样可以提高系统的可用性和容错性。下面是 PostgreSQL 9.5 双主复制的详细步骤: 1. 安装 PostgreSQL 9.5 安装 PostgreSQL 9.5 的方法与其他版本相同,可以使用包管理器或从源代码编译安装。 2. 配置主服务器 在主服务器上,需要进行以下配置: 2.1 修改 postgresql.conf 文件 将以下参数设置为: ``` wal_level = hot_standby max_wal_senders = 10 wal_keep_segments = 32 ``` 2.2 修改 pg_hba.conf 文件 在该文件中添加从备服务器连接主服务器的 IP 地址和用户名。 3. 配置备服务器 在备服务器上,需要进行以下配置: 3.1 修改 postgresql.conf 文件 将以下参数设置为: ``` hot_standby = on ``` 3.2 创建 recovery.conf 文件 在备服务器的数据目录中创建 recovery.conf 文件,并将以下内容添加到该文件中: ``` standby_mode = 'on' primary_conninfo = 'host=<主服务器IP> port=5432 user=<用户名> password=<密码>' restore_command = 'cp /var/lib/postgresql/9.5/main/archive/%f %p' ``` 其中,`<主服务器IP>`、`<用户名>` 和 `<密码>` 需要替换为实际的值,`restore_command` 参数用于将 WAL 日志文件从归档目录中复制到备服务器的 pg_xlog 目录中。 4. 启动主服务器和备服务器 在主服务器上启动 PostgreSQL 服务,然后在备服务器上启动 PostgreSQL 服务。备服务器会自动连接到主服务器并开始复制数据。 5. 测试双主复制 可以在任何一个服务器上进行写操作,并在另一个服务器上进行读操作来测试双主复制是否正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值