postgresql LAMP redis
postgresql架构与原理
PostgreSQL采用C/S模型,是进程架构模型。
体系结构分两部分:
- 实例 instance
- 进程
- 内存存储结构
- 磁盘存储
PGSQL流复制
主节点配置
创建从节点复制账号
postgres-# create role repluser with replication login password '123456';
修改配置文件
[postgres@localhost ~]$ vim $PGDATA/postgresql.conf
archive_command = '[ ! -f /archive/%f ] && cp %p /archive/%f'
archive_mode = on
hot_standby_feedback = on
hot_standby = on
max_connections = 200
max_standby_streaming_delay = 30s
max_wal_senders = 5
wal_keep_segments = 128
wal_level = replica
wal_log_hints = on
wal_receiver_status_interval = 10s
wal_sender_timeout = 60s
[postgres@localhost ~]$ pg_ctl -D /PGDATA restart
从节点配置
[postgres@rocky ~]$ pg_ctl -D $PGDATA stop
[postgres@rocky ~]$ rm -rf /var/lib/pgsql/data/*
[postgres@rocky ~]$ rm -rf /var/lib/pgsql/backups
[postgres@rocky ~]$ pg_basebackup -D /var/lib/pgsql/backups/ -Ft -Pv -Urepluser -h 10.0.0.4 -p 5432 -R
Password: #输入复制账号的密码
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/3000028 on timeline 1
pg_basebackup: starting background WAL receiver
31819/31819 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/30000F8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed
[postgres@rocky ~]$ ll /var/lib/pgsql/backups/
total 48212
-rw-r--r-- 1 postgres postgres 32584704 Nov 7 22:23 base.tar
-rw------- 1 postgres postgres 16778752 Nov 7 22:23 pg_wal.tar
[postgres@rocky ~]$ tar xf /var/lib/pgsql/backups/base.tar -C /var/lib/pgsql/data
[postgres@rocky ~]$ tar xf /var/lib/pgsql/backups/pg_wal.tar -C /var/lib/pgsql/data/pg_wal/
[postgres@rocky ~]$ pg_ctl -D $PGDATA start
验证
主节点状态
hellodb=# \x
Expanded display is on.
hellodb=# SELECT pg_current_wal_insert_lsn(),* from pg_stat_replication;
-[ RECORD 1 ]-------------+-----------------------------
pg_current_wal_insert_lsn | 0/40006D0
pid | 14135
usesysid | 24577
usename | repluser
application_name | walreceiver
client_addr | 10.0.0.8
client_hostname |
client_port | 41752
backend_start | 2023-11-08 13:28:46.80833+08
backend_xmin | 574
state | streaming
sent_lsn | 0/40006D0
write_lsn | 0/40006D0
flush_lsn | 0/40006D0
replay_lsn | 0/40006D0
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async
hellodb=# select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
-[ RECORD 1 ]-+----------
pid | 14135
state | streaming
client_addr | 10.0.0.8
sync_priority | 0
sync_state | async
hellodb=# select * from pg_is_in_recovery();
-[ RECORD 1 ]-----+--
pg_is_in_recovery | f
可以插入数据,看看是否同步过去。
hellodb=# insert into teachers(tid,name,age,gender) values(5,'LING NING',100,'M');
INSERT 0 1
hellodb=# select * from teachers;
tid | name | age | gender
-----+---------------+-----+--------
1 | Song Jiang | 45 | M
2 | Zhang Sanfeng | 94 | M
3 | Miejue Shitai | 77 | F
4 | Lin Chaoying | 93 | F
5 | LING NING | 100 | M
(5 rows)
从节点状态
支持读,不支持写
hellodb=# select * from teachers;
tid | name | age | gender
-----+---------------+-----+--------
1 | Song Jiang | 45 | M
2 | Zhang Sanfeng | 94 | M
3 | Miejue Shitai | 77 | F
4 | Lin Chaoying | 93 | F
5 | LING NING | 100 | M
(5 rows)
hellodb=# delete from teachers where tid=5;
ERROR: cannot execute DELETE in a read-only transaction
postgres=# select * from pg_stat_wal_receiver;
-[ RECORD 1 ]---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid | 43430
status | streaming
receive_start_lsn | 0/4000000
receive_start_tli | 1
received_lsn | 0/40006D0
received_tli | 1
last_msg_send_time | 2023-11-08 14:23:58.327241+08
last_msg_receipt_time | 2023-11-08 14:23:58.33071+08
latest_end_lsn | 0/40006D0
latest_end_time | 2023-11-08 14:03:26.121961+08
slot_name |
conninfo | user=repluser password=******** channel_binding=prefer dbname=replication host=10.0.0.4 port=5432 fallback_application_name=walreceiver sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any
postgres=# \q
[postgres@rocky data]$ pg_controldata
pg_control version number: 1002
Catalog version number: 201707211
Database system identifier: 7276858021308875338
Database cluster state: in archive recovery
pg_control last modified: Wed 08 Nov 2023 02:03:33 PM CST
postgresql的时间点还原
版本采用12,一般情况下要求数据库的版本一致,否则可能会还原失败。
主服务器配置
[postgres@pgsql pgsql]$ vim /var/lib/pgsql/data/postgresql.conf
archive_mode = on
archive_command = '[ ! -f /archive/%f ] && cp %p /archive/%f'
[postgres@pgsql pgsql]$ exit
logout
[root@pgsql ~]# mkdir /archive
[root@pgsql ~]# chown -R postgres. /archive/
[root@pgsql ~]# su - postgres
远程备份配置
[postgres@localhost ~]$ vim /var/lib/pgsql/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host replication all 0.0.0.0/0 md5 #加上这行,pg_basebackup基于replication
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
host all all 0.0.0.0/0 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
[postgres@pgsql pgsql]$ vim /var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'
[postgres@pgsql ~]$ pg_ctl restart -D $PGDATA
waiting for server to shut down.... done
server stopped
waiting for server to start....2023-11-09 23:07:17.257 CST [39110] LOG: listening on IPv6 address "::1", port 5432
2023-11-09 23:07:17.257 CST [39110] LOG: listening on IPv4 address "127.0.0.1", port 5432
2023-11-09 23:07:17.258 CST [39110] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-11-09 23:07:17.258 CST [39110] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2023-11-09 23:07:17.275 CST [39110] LOG: redirecting log output to logging collector process
2023-11-09 23:07:17.275 CST [39110] HINT: Future log output will appear in directory "log".
done
server started
创建测试数据
postgres=# create database testdb;
postgres=# \c testdb;
testdb=# create table t1(id int);
testdb=# insert into t1 values(1);
备份服务器
[postgres@backup data]$ ll /pgsql/backup/
total 0
[postgres@backup data]$ pg_basebackup -D /pgsql/backup/ -Ft -Pv -Upostgres -h 10.0.0.9 -p 5432 -R
Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/4000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_61943"
42334/42334 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/4000138
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed
在主服务器继续生成测试数据
testdb=# insert into t1 values(2);
模拟数据库删除
postgres=# drop database testdb;
发现故障,查看当前日志
hellodb=# select pg_walfile_name(pg_current_wal_lsn());
pg_walfile_name
--------------------------
00000001000000000000000A
(1 row)
hellodb=# select txid_current();
txid_current
--------------
520
(1 row)
hellodb=# select pg_switch_wal(); #切换归档日志
pg_switch_wal
---------------
0/A000C78
(1 row)
数据还原服务器
[postgres@backup ~]$ tar xf /pgsql/backup/base.tar -C /var/lib/pgsql/12/data/
[postgres@backup ~]$ tar xf /pgsql/backup/pg_wal.tar -C /archive/
[postgres@backup ~]$ rsync -a 10.0.0.9:/archive /archive
[postgres@backup archive]$ /usr/pgsql-12/bin/pg_waldump /archive/000000010000000000000005 | grep -B 10 "DROP dir"
rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/05000028, prev 0/04000138, desc: RUNNING_XACTS nextXid 508 latestCompletedXid 507 oldestRunningXid 508
rmgr: Heap len (rec/tot): 54/ 150, tx: 508, lsn: 0/05000060, prev 0/05000028, desc: INSERT off 2 flags 0x00, blkref #0: rel 1663/16426/16427 blk 0 FPW
rmgr: Transaction len (rec/tot): 34/ 34, tx: 508, lsn: 0/050000F8, prev 0/05000060, desc: COMMIT 2023-11-11 22:06:10.982230 CST
rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/05000120, prev 0/050000F8, desc: RUNNING_XACTS nextXid 509 latestCompletedXid 508 oldestRunningXid 509
rmgr: Heap len (rec/tot): 53/ 1773, tx: 0, lsn: 0/05000158, prev 0/05000120, desc: INPLACE off 8, blkref #0: rel 1664/0/1262 blk 0 FPW
rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/05000848, prev 0/05000158, desc: RUNNING_XACTS nextXid 509 latestCompletedXid 508 oldestRunningXid 509
rmgr: Heap len (rec/tot): 54/ 54, tx: 509, lsn: 0/05000880, prev 0/05000848, desc: DELETE off 8 flags 0x00 KEYS_UPDATED , blkref #0: rel 1664/0/1262 blk 0
rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: 0/050008B8, prev 0/05000880, desc: RUNNING_XACTS nextXid 510 latestCompletedXid 508 oldestRunningXid 509; 1 xacts: 509
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/050008F0, prev 0/050008B8, desc: CHECKPOINT_ONLINE redo 0/50008B8; tli 1; prev tli 1; fpw true; xid 0:510; oid 16430; multi 1; offset 0; oldest xid 479 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 509; online
rmgr: Database len (rec/tot): 34/ 34, tx: 509, lsn: 0/05000968, prev 0/050008F0, desc: DROP dir 1663/16426
[postgres@backup archive]$ vim /var/lib/pgsql/12/data/postgresql.conf
restore_command = 'cp /archive/%f %p'
recovery_target_xid = '518'
开始还原
[postgres@backup data]$ /usr/pgsql-12/bin/pg_ctl -D $PGDATA start
waiting for server to start....2023-11-11 23:56:00.793 CST [60733] LOG: starting PostgreSQL 12.17 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-18), 64-bit
2023-11-11 23:56:00.793 CST [60733] LOG: listening on IPv4 address "0.0.0.0", port 5432
2023-11-11 23:56:00.793 CST [60733] LOG: listening on IPv6 address "::", port 5432
2023-11-11 23:56:00.794 CST [60733] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-11-11 23:56:00.795 CST [60733] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2023-11-11 23:56:00.809 CST [60733] LOG: redirecting log output to logging collector process
2023-11-11 23:56:00.809 CST [60733] HINT: Future log output will appear in directory "log".
done
server started
[postgres@backup data]$ psql
psql (12.17)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
hellodb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
testdb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(5 rows)
postgres=# \c testdb;
testdb=# select * from t1;
id
----
1
2
(2 rows)
当前无法写入
testdb=# insert into t1 values(3);
ERROR: cannot execute INSERT in a read-only transaction
testdb=# select pg_wal_replay_resume(); #恢复正常模式
pg_wal_replay_resume
----------------------
(1 row)
testdb=# insert into t1 values(3);
INSERT 0 1
testdb=# select * from t1;
id
----
1
2
3
(3 rows)
高可用LAMP
实现:wordpress网站放在NFS共享存储上,并且用户可以正常发布博客,上传图片。
首先准备5台机器,系统采用Rocky8.7。
DNS服务器:10.0.0.11 www.ggbond.org
web1:10.0.0.8
web2:10.0.0.9
NFS、MySQL服务器:10.0.0.10
backup服务器:10.0.0.12
web1,web2服务器配置
[root@server1 ~]# yum -y install httpd php php-mysqlnd php-json; systemctl enable --now httpd
[root@server1 ~]# wegt https://cn.wordpress.org/download/
[root@server1 ~]# ls
anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos wordpress-5.8.1-zh_CN.tar.gz
[root@server1 ~]# tar xf wordpress-5.8.1-zh_CN.tar.gz
[root@server1 ~]# mv wordpress/* /var/www/html/
注意:下载wordpress的版本问题,目前最新版本是6.4.1。php版本要求7.4及以上,否则会出现数据库连接异常。
NFS、MySQL服务器(10.0.0.10)配置账号授权
[root@NFSserver ~]# yum install mysql-server -y
[root@NFSserver ~]# systemctl enable --now mysqld
[root@NFSserver ~]# mysql
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 363
Server version: 8.0.26 Source distribution
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database workpress;
Query 0K,1 row affected (0.01 sec)
mysql> create user wordpress@'10.0.0.%' identified by '123456';
Query 0K,1 row affected (0.00 sec)
mysql> grant all on wordpress.* to wordpress@'10.0.0.%';
Query 0K,1 row affected (0.00 sec)
在浏览器输入10.0.0.8,连接数据库,上传文件。
做NFS服务共享,把上传的图片做共享。
[root@NFSserver ~]# yum -y install nfs-utils
[root@NFSserver ~]# systemctl enable --now nfs-server
[root@NFSserver ~]# mkdir /data/www
[root@NFSserver ~]# useradd -u 666 www
[root@NFSserver ~]# cat /etc/exports
/data/www *(rw)
[root@NFSserver ~]# exportfs -r
在10.0.0.7和10.0.0.8的服务器上
[root@server1 ~]# yum -y install nfs-utils
[root@server1 ~]# useradd -u 666 www
[root@server1 ~]# scp /var/www/html/wp-content/uploads/ 10.0.0.10:/data/www #在web1执行就行,挂载会造成图片的丢失,直接拷贝到nfs服务器上。
[root@server1 ~]# cat /etc/fstab
10.0.0.10:/data/www /var/www/html/wp-content/uploads nfs _netdev 0 0
[root@server1 ~]# mount -a
在备份服务器上
[root@backup-server ~]# yum install -y rsync-deamon
[root@backup-server ~]# systemctl enable --now rsyncd
Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/syst
[root@backup-server ~]# cat /etc/rsyncd.conf
uid = root
gid = root
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
[backup]
path = /data/backup/
comment = backup dir
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pas
[root@backup-server ~]# mkdir /data/backup
[root@backup-server ~]# echo "rsyncuser:123456" > /etc/rsync.pas
[root@backup-server ~]# chmod 600 /etc/rsync.pas
[root@backup-server ~]# rsync --daemon
[root@backup-server ~]# systemctl restart rsyncd
NFS服务器
[root@NFSserver ~]# echo "123456" > /etc/rsync.pas
[root@NFSserver ~]# chmod 600 /etc/rsync.pas
[root@NFSserver ~]# rsync --password-file=/etc/rsync.pas rsync://rsyncuser@10.0.0.12/backup
drwxrwxrwx 31 2023/11/21 12:56:14 .
drwxrwxrwx 16 2023/11/18 23:22:38 2023
[root@NFSserver ~]# cat inotify_rsync.sh
#!/bin/bash
SRC='/data/www/'
DEST='rsyncuser@10.0.0.12::backup'
rpm -q rsync &> /dev/null || yum -y install rsync
inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pas $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done
[root@NFSserver ~]# nohup inotify_rsync.sh #后台执行
在备份服务器上,测试数据是否同步。
[root@backup-server ~]# watch -n0.5 ls -l /data/backup/
DNS服务器
yum install -y bind bind-utils
[root@localhost ~]# cat /etc/named.conf
listen-on port 53 { localhost; };
allow-query { any; };
include "/etc/named.rfc1912.zones";
[root@localhost ~]# cat /etc/named.rfc1912.zones
zone "ggbond.org" IN {
type master;
file "ggbond.org.zone";
};
[root@localhost ~]# cat /var/named/ggbond.org.zone
$TTL 1D
@ IN SOA master admin (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.3.144
www A 10.0.0.8
www A 10.0.0.9
[root@localhost ~]# chmod 640 /var/named/ggbond.org.zone
[root@localhost ~]# chgrp named /var/named/ggbond.org.zone
[root@localhost ~]# ll /var/named/ggbond.org.zone
-rw-r----- 1 root named 217 Nov 20 13:41 /var/named/ggbond.org.zone
[root@localhost ~]# systemctl enable --now named
[root@localhost ~]# dig www.ggbond.org @127.0.0.1
; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> www.ggbond.org @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22824
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 24ba3133eec47926e3f02ecd655db120881c5314abb24a64 (good)
;; QUESTION SECTION:
;www.ggbond.org. IN A
;; ANSWER SECTION:
www.ggbond.org. 86400 IN A 10.0.0.9
www.ggbond.org. 86400 IN A 10.0.0.8
;; AUTHORITY SECTION:
ggbond.org. 86400 IN NS master.ggbond.org.
;; ADDITIONAL SECTION:
master.ggbond.org. 86400 IN A 192.168.3.144
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Nov 22 15:43:28 CST 2023
;; MSG SIZE rcvd: 140
最后测试输入网址是否正常打开。
redis数据类型
字符串string
字符串是一种最基本的redis值类型。一个redis字符串能包含任意类型的数据。
command | mean |
---|---|
set key value | 设置key-value |
get key | 获取key-value |
del key | 删除key-value |
setnx setxx | 根据key是否存在 设置key-value |
Incr decr | 计数 |
mget mset | 批量操作key-value |
列表list
redis列表就是简单的字符串数组,按照插入顺序排序,支持双向读写。每个列表元素有下标来标识,元素值可以重复,常用于存入日志等场景。
集合set
set是一个无序的字符串合集,同一个集合中的每个元素是唯一无重复的,支持在两个不同的集合中对数据进行逻辑处理,常用于取交集,并集,统计等场景。例如:实现共同的朋友。
有序集合sorted
是不包含相同字符串的合集。有序集合的成员不能重复,但评分可以重复。经常用于排行榜的场景。
哈希hash
hash即字典,用于保存字符串字段field和字符串值value之间的映射,即key/value做为数据部分,hash特别适合用于存储对象场景。
一个hash最多可以包含2^32-1个key/value键值对
redis RDB和AOF比较
Redis支持两种数据持久化保存方法
- RDB
- AOF
RDB:是基于某个时间点的快照,只保留当前最新版本的一个快照;
RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成该RDB文件时数据库的状态,因为RDB文件是保存在磁盘中的,所以即便Redis服务进程甚至服务器宕机,只要磁盘中RDB文件存在,就能将数据恢复。
AOF:AOF可以指定不同的保存策略,默认为每秒钟执行一次fsync,按照操作的顺序地将变更命令追加至指定的AOF日志文件尾部
在第一次启用AOF功能时,会做一次完全备份,后续将执行增量性备份。如果同时启用RDB和AOF,进行恢复时,默认AOF文件优先级高于RDB文件,即会使用AOF文件进行恢复,在第一次开启AOF功能时,会自动备份所有数据到AOF文件中,后续只会记录数据的更新指令。
redis配置文件详解
[root@server1 ~]# grep -Ev '^$|#' /etc/redis.conf
bind 127.0.0.1 #指定监听地址,支持用空格隔开的多个监听IP
protected-mode yes #redis3.2之后加入的新特性,在没有设置bind IP和密码的时候,redis只允许访问127.0.0.1:6379,可以远程连接,但当访问将提示警告信息并拒绝远程访问
port 6379 #监听端口,默认6379/tcp
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid #pid文件路径,可以修改
loglevel notice #日志级别
logfile /var/log/redis/redis.log #日志路径
databases 16 #设置数据库数量,默认:0-15,共16个库
always-show-logo yes #在启动redis 时是否显示或在日志中记录redis的logo
save 900 1 #在900秒内有1个key内容发生更改,就执行快照机制
save 300 10 #在300秒内有10个key内容发生更改,就执行快照机制
save 60 10000 #在60秒内有10000个key以上的变化,就自动快照备份
stop-writes-on-bgsave-error yes #默认为yes时,可能会因空间满等原因快照无法保存出错时,会禁止redis写入操作,生产建议为no
rdbcompression yes #持久化保存到RDB文件时,是否压缩,“yes“为压缩,”no”则反之
rdbchecksum yes #是否对备份文件开启RC64校验,默认是开启
dbfilename dump.rdb #快照文件名
dir /var/lib/redis #快照文件保存路径
replica-serve-stale-data yes #当从库同主库失去连接或复制正在进行,从库有两种运行方式: 1、设置为yes(默认设置),从库会继续响应客户端的读请求,此为建议值;2、设置为no,除去特定命令外的任何请求都会返回一个错误“SYNC with master in progress”;
replica-read-only yes #是否设置从库只读,建议值为yes,否则主库同步从库时可能会覆盖数据,造成数据丢失;
repl-diskless-sync no #是否使用socket方式复制数据(无盘同步),新slave第一次连接master时需要做全量同步。
repl-diskless-sync-delay 5 #diskless时复制的服务器等待的延迟时间,推荐值:30-60
repl-disable-tcp-nodelay no #是否在slave套接字发送SYNC之后禁用 TCP_NODELAY
replica-priority 100 #复制缓冲区内存大小
c yes
rdb-save-incremental-fsync yes
......................................