postgresql LAMP redis

发布时间 2024-01-02 21:53:50作者: TUOP

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
......................................