一、postgresql架构与原理
1.postgresql架构分为两部分,实例和存储。数据库启动一个进程即为一个实例,每个实例有单独的文件存储。
2.postgresql为多进程,分为主进程、辅助子进程、会话进程,
主进程负责数据库的启动和停止,客户端连接数据库,首先和主进程建立连接,连接成功后fork()会话进程处理客户端的请求。
辅助子进程分为:
background writer 负责内存数据刷新到磁盘
walwriter 预写日志进程
checkpointer 检查点进程,定期向bgwrite进程请求刷新数据,同时在walwriter日志中写入日志
autovacuum 自动清理垃圾数据进程
stats collector 数据库状态收集进程
archiver 归档进程,开启后可按增量备份
logger 记录日志
session进程 每个用户连接后开启一个session进程
3.内存结构
共享内存,主要用于数据块的缓冲区,提高读写性能。 shared_buffers ,默认128M,可设置为机器内存的50%
本地内存,
temp_buffers 临时表的本地缓冲区 默认8M
work_mem:内部排序操作和hash表,使用临时磁盘文件之前使用的内存缓存区 默认4M
maintenance_work_mem :vacuum create index 等使用的内存缓冲区 默认64M
4.数据更新过程
4.1 客户端发起数据更新数据
4.2 写事务日志缓存
4.3 commit
4.4 刷新事务日志到磁盘
4.5 checkpointer 发起检查点
4.6 刷新缓存数据到磁盘
5.日志文件
二、基于流复制完成postgresql的高可用
6.1 建立复制账号
1 | create role repluser with replication login password '123456' |
6.2配置从节点复制链接数
1 | max_wal_senders = 10 //有几个从节点就配置几个 |
6.3用热备方式备份主库,建立从库
1 | 备份还原后不要设置recovery_target,即从主库同步数据 |
6.4配置从库
1 | primary_conninfo='host=10.1.0.18 port=5433 user=repluser password=123456' |
6.6重启从库
1 | pg_ctl restart -D /home/data/pgsql5 |
6.7检测是否设置成功
1 | select * from pg_stat_replication; #主库查看是否有链接 |
三、实现postgresql的时间点还原
1.修改数据库配置文件,允许远程备份
1 | #pg_hba.conf 配置文件增加 |
2.开启归档日志
1 | archive_mode= on |
3.远程备份数据库
1 | pg_basebackup -D /home/backup/ -Ft -Pv -Upostgres -h 10.1.0.18 -p 5433 -R |
4.通过数据库oid和表oid,定位需要还原的时间点
1 | select oid from pg_database where datname='mfcqc_080201' |
5.查看数据库wal日志顺序
1 | select * from pg_ls_waldir() order by modification desc |
6.按照wal日志顺序和oid,查找需要还原的时间点
1 | pg_waldump 0000000100000008000000DF |grep 164256/165925 |
7.解压备份文件
1 | tar xf /home/backup/base.tar -C /home/data/pgsql5/ |
8.复制归档文件
1 | scp /home/postgresql/2023-08-02/* 10.1.0.19:/home/backup/wal/ |
9.修改备份数据库配置
1 | restore_command = 'cp /home/backup/wal/%f %p' |
10.还原数据库
1 | su - postgres -c 'pg_ctl start -D /home/data/pgsql5' |
11.恢复可写状态
1 | select pg_wal_replay_resume(); |
12.检查状态
1 | pg_controldata -D /home/data/pgsql5|grep 'Database cluster state' |
四、规划高可用的LAMP,要求wordpress网站放在NFS共享存储上,并且用户可以正常发布博客,上传图片。尝试更新wordpress版本,测试网站仍可用
1.docker安装mysql数据
https://www.baibao.online/2023/07/19/mysql主从同步/
2.配置nfs共享服务
1 | /data/wordpress 192.168.1.29(rw,anonuid=33,anongid=33) |
3.挂在共享文件夹
1 | mount 192.168.1.120:/data/wordpress /home/wordpress/ |
4.启动wordpress Docker
1 | docker run -d --name wordpress \ |
5.更新wordpress主题
五、redis数据类型有哪些
5.1 String(字符串):用于存储文本或二进制数据。
相关命令:SET、GET、INCR、DECR、APPEND、MSET 等。
5.2 List(列表):有序、可重复的字符串元素列表。
相关命令:LPUSH、RPUSH、LPOP、RPOP、LINDEX、LRANGE 等。
5.3 Set(集合):无序、不重复的字符串元素集合。
相关命令:SADD、SREM、SMEMBERS、SISMEMBER、SUNION、SINTER 等。
5.4 Hash(哈希表):键值对的无序散列表。
相关命令:HSET、HGET、HDEL、HGETALL、HKEYS、HVALS 等。
5.5 Sorted Set(有序集合):有序、不重复的字符串元素集合,每个元素关联一个分数,按照分数进行排序。
相关命令:ZADD、ZREM、ZRANGE、ZINCRBY、ZSCORE、ZCOUNT 等。
5.6 Bitmap(位图):由二进制位组成的数据结构,可以对位进行操作。
相关命令:SETBIT、GETBIT、BITCOUNT、BITOP 等。
HyperLogLog(基数估算):用于估算一个集合中不重复元素的个数。
相关命令:PFADD、PFCOUNT、PFMERGE 等。
5.7 Geospatial(地理空间):用于存储地理位置信息。
相关命令:GEOADD、GEORADIUS、GEODIST、GEOHASH 等。
六、redis RDB和AOF比较
RDB
类似于数据库完全备份,以二进制的形式保存在磁盘上。
优点:速度快,节省空间
缺点:恢复时间由文件大小决定,文件越大加载到内存的时间越慢
AOF
日志追加,以文本的方式记录在磁盘。
优点:数据不会丢失,每次操作都有日志。
缺点:文件较大,需要定期重写文件
七、配置文件详解
7.1.修改基本内核参数
1 | cat /etc/sysctl.conf |
7.2.添加密码
1 | #配置文件修改 |
7.3.设置最大使用内存
1 | CONFIG get maxmemory # 设置成物理内存的50% 按字节为单位 |
7.4.慢查询
1 | grep slowlog redis_6379.conf |