第七周作业
一、postgresql架构与原理
1.体系架构概览
PostgreSQL和MySQL相似,也采用典型的C/S模型。
PostgreSQL体系结构分两部分
- 实例 instance(内存)
- 磁盘存储
- 实例 instance 包括
- 进程(客户端的响应进程,服务端的处理进程)
- 内存存储结构
-
![]()
1.2 进程
Postmaster 主进程
它是整个数据库实例的主控制进程,负责启动和关闭该数据库实例。
实际上,使用pg ctl来启动数据库时,pg_ctl也是通过运行postgres来启动数据库的,只是它做了一些包装,更容易启动数据库。
它是第一个PostgreSQL进程,此主进程还会fork出其他子进程,并管理它们。
当用户和PostgreSQL建立连接时,首先是和Postmaster进程建立连接。首先,客户端会发出身份验证的信息给Postmaster进程,Postmaster进程根据消息中的信息进行身份验证判断,
如果验证通过,它会fork出一个会话子进程为这个连接服务。
当某个服务进程出现错误的时候,Postmaster主进程会自动完成系统的恢复。恢复过程中会停掉所有的服务进程,然后进行数据库数据的一致性恢复,等恢复完成后,数据库又可以接受新的连接。
验证功能是通过配置文件pg_hba.conf和用户验证模块来提供。
postmaster 程序是指向postgres的软链接
2. 基于流复制完成postgresql的高可用 -
2.2 Master 节点配置
-
#创建复制的用户并授权
[postgres@master ~]$ psql
postgres=#create role repluser with replication login password '123456';
#修改pg_hba.conf进行授权
[postgres@master ~]$vi /pgsql/data/pg_hba.conf
host replication repluser 0.0.0.0/0 md52.3 Standby 节点配置
-
#清空数据和归档
[postgres@standby ~]$ pg_ctl stop -D $PGDATA
[postgres@standby ~]$ rm -rf /pgsql/data/*
[postgres@standby ~]$ rm -rf /archive/*
[postgres@standby ~]$ rm -rf /pgsql/backup/*
#备份主库数据到备库
[postgres@standby ~]$ pg_basebackup -D /pgsql/backup/ -Ft -Pv -Urepluser -h
10.0.0.101 -p 5432 -R
#还原备份的数据,实现初始的主从数据同步
[postgres@standby ~]$ tar xf /pgsql/backup/base.tar -C /pgsql/data
[postgres@standby ~]$ tar xf /pgsql/backup/pg_wal.tar -C /archive/
#修改postgresql.conf文件
[postgres@standby ~]$ vi /pgsql/data/postgresql.conf
#添加下面两行
primary_conninfo = 'host=10.0.0.101 port=5432 user=repluser password=123456'
restore_command = 'cp /archive/%f %p'
#修改postgresql.auto.conf
[postgres@standby ~]$ vi /pgsql/data/postgresql.auto.conf
primary_conninfo = 'host=10.0.0.101(主节点ip) port=54321 user=repluser password=123456
sslmode=disable sslcompression=0 gssencmode=disable
krbsrvname=post_session_attrs=any' #此行自动生成,只修改用户名即可
restore_command = 'cp /archive/%f %p'
[postgres@standby ~]$ pg_ctl -D /pgsql/data start -
在主库查看状态
- [root@master ~]#pg_controldata
- 3. 实现postgresql的时间点还原
-
#在PG服务器开启归档
[postgres@pgserver ~]$ vim /pgsql/data/postgresql.conf
archive_mode = on
archive_command = 'test ! -f /archive/%f &&cp %p /archive/%f'
[postgres@gpserver ~]$pg_ctl restart -D $PGDATA
#在PG服务器上创建测试数据
postgres=#create database testdb;
postgres=#\c testdb
testdb=# create table t1(id int);
testdb=# insert into t1 values(1);
#在备份服务器对PG数据库进行远程完全备份
[postgres@backup ~]$pg_basebackup -D /pgsql/backup/ -Ft -Pv -Upostgres -h
10.0.0.200 -p 5432 -R
#在PG服务器上继续生成测试数据
testdb=# insert into t1 values(2);
#模拟数据库删除
postgres=# drop database testdb;
#发现故障,停止用户访问
#查看当前日志文件
postgres=# select pg_walfile_name(pg_current_wal_lsn());
-[ RECORD 1 ]---+-------------------------
pg_walfile_name | 000000020000000000000020
#查看当前事务ID
postgres=# select txid_current();
txid_current
--------------
521
(1 row)#在PG服务器上切换归档日志(好处是以后这个文件不再使用)
postgres=#select pg_switch_wal();
#在要还原的服务器停止服务,准备还原
[postgres@pgserver ~]$pg_ctl stop -D $PGDATA
[postgres@pgserver ~]$rm -rf /pgsql/data/*
#在测试的还原服务器进行还原
[postgres@backup ~]$tar xf /pgsql/backup/base.tar -C /pgsql/data/
#此步可以不执行
[postgres@backup ~]$tar xf /pgsql/backup/pg_wal.tar -C /archive/
#复制PG服务器的归档日志到还原的测试服务器
[postgres@pgserver ~]$rsync -a 10.0.0.200:/archive/ /archive/
#查看故障点事务ID
[postgres@backup ~]$pg_waldump /archive/000000020000000000000020 |grep -B 10
"DROP dir"
rmgr: Database len (rec/tot): 34/ 34, tx: 521, lsn: 0/3D000828,
prev 0/3D0007B0, desc: DROP dir 1663/16445
#查看此指令的事务ID为521,前一个事务为520
#修改配置文件postgresql.conf,或者postgresql.auto.conf文件也可以
[postgres@backup ~]$vi /pgsql/data/postgresql.conf
#加下面两行
restore_command = 'cp /archive/%f %p'
#指定还原至上面查到的事务ID
recovery_target_xid = '520'
#也可以通过下面方式指定还原至的位置
recovery_target_name = 'restore_point' #指定还原点名称
recovery_target_time = '2021-01-17 16:26:12' #指定还原至时间点
recovery_target_lsn = '0/3E000148' #指定还原到LSN号的位置
#启动服务
[postgres@backup ~]$pg_ctl start -D $PGDATA
#验证数据
[postgres@backup ~]$psql
psql (12.9)
Type "help" for help.
postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".
testdb=# select * from t1;
id
----
1
2
(2 rows)
#验证数据是否还原,恢复后读取正常
testdb=# select * from t1;
id
----
1
2
3
(3 rows)
#当前无法写入
testdb=# insert into t1 values(4);
ERROR: cannot execute INSERT in a read-only transaction
[postgres@pgserver ~]$pg_controldata
pg_control version number: 1300
Catalog version number: 202107181
Database system identifier: 7064396403376562327
Database cluster state: in archive recovery
#恢复正常模式
postgres=# select pg_wal_replay_resume();
[postgres@pgserver ~]$pg_controldata
pg_control version number: 1300
Catalog version number: 202107181
Database system identifier: 7064396403376562327
Database cluster state: in production
#恢复正常写入
testdb=# insert into t1 values(4); - 4. 规划高可用的LAMP,要求wordpress网站放在NFS共享存储上,并且用户可以正常发布博客,上传图片。尝试更新wordpress版本,测试网站仍可用。
-
#NFS服务器创建用户和相应的家目录,将用户wang的家目录共享
[root@centos8 ~]#yum -y install nfs-utils
[root@centos8 ~]#systemctl enable --now nfs-server
[root@centos8 ~]#mkdir -pv /data/home
[root@centos8 ~]#useradd -d /data/home/wang -u 2000 wang
[root@centos8 ~]#Vim /etc/exports.d/test.exports
/data/home *(rw)
[root@centos8 ~]#exportfs -r
#在第一台NFS客户端主机10.0.0.7上实现
[root@centos7 ~]#yum -y install nfs-utils
[root@centos7 ~]#useradd -u 2000 wang
[root@centos7 ~]#vim /etc/fstab
10.0.0.8:/data/home/wang /home/wang nfs _netdev 0 0
[root@centos7 ~]#mount -a
[root@centos7 ~]#su - wang
Last login: Fri Jul 3 16:33:34 CST 2020 on pts/0
[wang@centos7 ~]$pwd
/home/wang
[wang@centos7 ~]$df /home/wang -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
10.0.0.8:/data/home/wang nfs4 52403200 398464 52004736 1% /home/wang
#在第二台NFS客户端主机10.0.0.6上实现
[root@centos6 ~]#yum -y install nfs-utils
[root@centos6 ~]#useradd -u 2000 wang
[root@centos6 ~]#vim /etc/fstab
10.0.0.8:/data/home/wang /home/wang nfs _netdev 0 0
[root@centos6 ~]#su - wang
[wang@centos6 ~]$pwd
/home/wang
[wang@centos6 ~]$df -T /home/wang
Filesystem Type 1K-blocks Used Available Use% Mounted on
10.0.0.8:/data/home/wang nfs 52403200 398464 52004736 1% /home/wang
5. redis数据类型有哪些? -
字符串 string 列表 list 集合 set** 有序集合 sorted se 消息队列
- 6. redis RDB和AOF比较
- 如果主要充当缓存功能,或者可以承受较长时间,比如数分钟数据的丢失, 通常生产环境一般只需启用RDB即可,此也是默认值
如果一点数据都不能丢失,可以选择同时开启RDB和AOF一般不建议只开启AOF - 7. redis配置文件详解。
-
Units 配置数据单位换算关系
-
Network 网络相关
GENERAL 通用配置
SNAPSHOTTING 快照相关
SECURITY 安全相关
CLIENTS 客户端配置
MEMORY MANAGEMENT 内存管理
LAZY FREEING 懒惰删除
THREADED I/O
KERNEL OOM CONTROL 设置OOM时终止哪些进程
APPEND ONLY MODE AOF持久化配置
LUA SCRIPTING-LUA脚本相关
REDIS CLUSTER 集群配置
CLUSTER DOCKER/NAT support
SLOW LOG 慢日志
LATENCY MONITOR 延迟监控
EVENT NOTIFICATION 事件通知
GOPHER SERVER Gopher协议
ADVANCED CONFIG 高级设置
ACTIVE DEFRAGMENTATION 碎片整理


浙公网安备 33010602011771号