Redis集群主从实战

    redis是一款非关系型数据库,是一个高性能的key-value数据库,经常被用作关系型数据库的缓存数据库以提高服务器访问速度,特别适用于高并发场景。为了提升Redis高可用性,本次实战,先讲redis.conf配置文件,然后做主从库配置。

我们提供的服务有:网站设计、做网站、微信公众号开发、网站优化、网站认证、平湖ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的平湖网站制作公司

1.redis.conf配置文件详解

1)基本配置

daemonize no 是否以后台进程启动
databases 16 创建database的数量(默认选中的是database 0)

save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
save 300 10 #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
stop-writes-on-bgsave-error yes #后台存储错误停止写。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir ./  #设置工作目录,rdb文件会写入该目录。

2)主从配置

slaveof 设为某台机器的从服务器
masterauth 连接主服务器的密码
slave-serve-stale-data yes # 当主从断开或正在复制中,从服务器是否应答
slave-read-only yes #从服务器只读
repl-ping-slave-period 10 #从ping主的时间间隔,秒为单位
repl-timeout 60 #主从超时时间(超时认为断线了),要比period大
slave-priority 100 #如果master不能再正常工作,那么会在多个slave中,选择优先值最小的一个slave提升为master,优先值为0表示不能提升为master。

repl-disable-tcp-nodelay no #主端是否合并数据,大块发送给slave
slave-priority 100 从服务器的优先级,当主服挂了,会自动挑slave priority最小的为主服

3)安全

requirepass foobared # 需要密码
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 #如果公共环境,可以重命名部分敏感命令 如config

4)限制

maxclients 10000 #最大连接数
maxmemory #最大使用内存

maxmemory-policy volatile-lru #内存到极限后的处理
volatile-lru -> LRU算法删除过期key
allkeys-lru -> LRU算法删除key(不区分过不过期)
volatile-random -> 随机删除过期key
allkeys-random -> 随机删除key(不区分过不过期)
volatile-ttl -> 删除快过期的key
noeviction -> 不删除,返回错误信息

解释 LRU ttl都是近似算法,可以选N个,再比较最适宜T踢出的数据

maxmemory-samples 3

5)日志模式

appendonly no #是否仅要日志
appendfsync no # 系统缓冲,统一写,速度快
appendfsync always # 系统不缓冲,直接写,慢,丢失数据少
appendfsync everysec #折衷,每秒写1次

no-appendfsync-on-rewrite no #为yes,则其他线程的数据放内存里,合并写入(速度快,容易丢失的多)
auto-AOF-rewrite-percentage 100 当前aof文件是上次重写是大N%时重写
auto-AOF-rewrite-min-size 64mb aof重写至少要达到的大小

6)慢查询

slowlog-log-slower-than 10000 #记录响应时间大于10000微秒的慢查询
slowlog-max-len 128 # 最多记录128条

7)服务端命令

time 返回时间戳+微秒
dbsize 返回key的数量
bgrewriteaof 重写aof
bgsave 后台开启子进程dump数据
save 阻塞进程dump数据
lastsave

slaveof host port 做host port的从服务器(数据清空,复制新主内容)
slaveof no one 变成主服务器(原数据不丢失,一般用于主服失败后)

flushdb 清空当前数据库的所有数据
flushall 清空所有数据库的所有数据(误用了怎么办?)

shutdown [save/nosave] 关闭服务器,保存数据,修改AOF(如果设置)

slowlog get 获取慢查询日志
slowlog len 获取慢查询日志条数
slowlog reset 清空慢查询

info []

config get 选项(支持*通配)
config set 选项 值
config rewrite 把值写到配置文件
config restart 更新info命令的信息

debug object key #调试选项,看一个key的情况
debug segfault #模拟段错误,让服务器崩溃
object key (refcount|encoding|idletime)
monitor #打开控制台,观察命令(调试用)
client list #列出所有连接
client kill #杀死某个连接 CLIENT KILL 127.0.0.1:43501
client getname #获取连接的名称 默认nil
client setname "名称" #设置连接名称,便于调试

8)连接命令

auth 密码 #密码登陆(如果有密码)
ping #测试服务器是否可用
echo "some content" #测试服务器是否正常交互
select 0/1/2... #选择数据库
quit #退出连接

2.Redis缓存服务器命令行中常用命令如下:
127.0.0.1:6379> config get *  #获取Redis服务器所有配置信息

127.0.0.1:6379> config set loglevel notice     #总共有4个日志级别可供选择

127.0.0.1:6379> config set requirepass "sky9899"  #配置redis访问密码

127.0.0.1:6379> auth sky9899

redis-cli -h host -p port -a password    #远程连接Redis数据库

[root@redis_slave bin]# redis-cli -h 192.168.153.142 -p 6379 -a sky9899  #实例

127.0.0.1:6379> role  #返回主从实例所属角色

Redis集群主从实战

Redis集群主从实战

127.0.0.1:6379> info     #获取redis服务器的各种信息和统计数值

127.0.0.1:6379> slaveof 192.168.153.143 6379   #指定服务器的从服务器

3.Redis集群实战

Redis主从复制,当用户往master端写入数据时,通过Redis sync机制将数据文件发送到slave,slave也会执行相同的操作确保数据一致。

Redis主库配置:redis.conf

daemonize no

pidfile /var/run/redis.pid

port 6379

tcp-backlog 511

# bind 127.0.0.1

timeout 0

tcp-keepalive 0

loglevel notice

logfile ""

databases 16

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

slave-serve-stale-data yes

slave-read-only yes

repl-disable-tcp-nodelay no

slave-priority 100

appendonly no

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-entries 512

list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

从库192.168.153.143:redis.conf配置

daemonize no

pidfile /var/run/redis.pid

port 6379

slaveof  192.168.153.142 6379    #指定主库IP及端口号

tcp-backlog 511

# bind 127.0.0.1

timeout 0

tcp-keepalive 0

loglevel notice

logfile ""

databases 16

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./   #设置工作目录,rdb文件会写入该当前目录,也可以指定新目录。

slave-serve-stale-data yes

slave-read-only yes

repl-disable-tcp-nodelay no

slave-priority 100

appendonly no

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-entries 512

list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

4.测试结果:

1)192.168.153.142:Redis主库操作

[root@redis_master bin]# ./redis-cli

127.0.0.1:6379> set sky9899  www.sky9899.com

OK

127.0.0.1:6379> set sky9890   www.sky9890.com

OK

127.0.0.1:6379> get sky9899

"www.sky9899.com"

127.0.0.1:6379> get sky9890

"www.sky9890.com"

Redis集群主从实战

2)192.168.153.143: Redis从库操作

127.0.0.1:6379> 

[root@redis_slave bin]# ./redis-cli 

127.0.0.1:6379> get sky9899

"www.sky9899.com"

127.0.0.1:6379> get sky9890

"www.sky9890.com"

127.0.0.1:6379> 

Redis集群主从实战

小结,通过主从库操作的结果显示,说明主从库配置成功。


分享文章:Redis集群主从实战
当前网址:http://azwzsj.com/article/jcdegp.html