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

解决:参考权限不够

你可能感兴趣的:(postgresql,sql)