常用命令

  1. #登录客户端 -a 密码 -p 端口
  2. redis-cli -a a5791E2a3043T -p 6379
  3. #查看集群状态
  4. redis-cli -a a5791E2a3043T info
  5. # 使用 1 号数据库
  6. redis 127.0.0.1:6379> SELECT 1
  7. #删除指定key
  8. del key
  9. #设置默认数据为0
  10. SET db_number 0
  11. #获取4号库的key
  12. redis-cli -h 172.22.8.187 -a a5791E2a3043T -n 4 keys CR:planet_company* > /tmp/keys.txt
  13. #选择DB
  14. select 5
  15. #Redis统计信息
  16. info
  17. #在线修改配置
  18. 192.168.0.238:6379> config get maxmemory
  19. 1) "maxmemory"
  20. 2) "1073741824"
  21. 192.168.0.238:6379> config set maxmemory 5000000
  22. OK
  23. 192.168.0.238:6379> config get maxmemory
  24. 1) "maxmemory"
  25. 2) "5000000"

批量删除脚本

删除4号库的key
#!/bin/bash
for i in `cat /tmp/keys.txt`
do
 redis-cli -h 172.22.8.187 -a a5791E2a3043T -n 4 del $i
done

哨兵

哨兵的三个作用:
监控:监控谁?支持主从结构的工作一个是主节点一个是从节点,那肯定就是监控这俩个了。监控主节点和从节点是否正常运行;检测主节点是否存活,主节点和从节点运行情况。

通知:哨兵检测的服务器出现问题时,会向其他的哨兵发送通知,哨兵之间就相当于一个微信群,每个哨兵发现的问题都会发在这个群里。

自动转移故障:当检测到主节点宕机后,断开与宕机主节点连接的所有从节点,在从节点中选取一个作为主节点,然后将其他的从节点连接到这个最新主节点的上。并且告知客户端最新的服务器地址。

这里有一个注意点,哨兵也是一台 Redis 服务器,只是不对外提供任何服务。配置哨兵时配置为单数。

一、版本

3.2.9

二、模式

主从+哨兵模式
哨兵模式至少要求3节点,所以下面的步骤需要在每个节点都操作

三、环境信息

IP 系统版本 角色
172.20.1.171 Centos7.5 master
172.20.1.172 Centos7.5 slave
172.20.1.173 Centos7.5 slave

四、部署步骤

1、下载安装包

(1)服务器执行命令下载:

cd /usr/local/src/
wget https://hz-package.hzins.com/redis-3.2.9.tar.gz

2、解压安装包

tar zxf redis-3.2.9.tar.gz

3、编译安装Redis

cd redis-3.2.9
yum install gcc -y  # 安装gcc编译环境
yum install jemalloc # 安装内存分配器,jemalloc在处理内存碎片化上优于Redis默认内存分配器libc
make MALLOC=/usr/lib64/libjemalloc.so.1  # 通过rpm -ql jemalloc可以查看so文件路径
make install        # make的时候安装已经完成,make install会把redis命令放在/usr/local/bin下

4、服务器内核参数调整

(1)服务器内存分配策略,减少OOM

echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

(2)关闭THP,减少延迟

echo never > /sys/kernel/mm/transparent_hugepage/enabled   #该命令执行后还需写入到/etc/rc.local

5、启动测试

运行redis-server进行启动测试,观察是否有报错

6、Redis主从配置

※ 创建/etc/redis.conf配置文件
※ 通常情况下只关注和修改带有注释项的即可,正式配置时请删掉注释信息

bind 172.20.1.171           #redis服务需要监听在服务器哪个IP上,每个节点修改为本机IP即可
protected-mode yes
daemonize yes 
port 6379                   #redis服务端口
tcp-backlog 511  
timeout 0
tcp-keepalive 300
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/data/redis/logs/redis.log"    #日志存放路径,该目录需要手动创建
databases 16
requirepass 123456           #redis密码
maxclients 10000             #最大客户端连接数
maxmemory 1GB                #redis最大占用内存,建议配置为服务器最大内存的60%
maxmemory-policy volatile-lru  

# RDB持久化配置 
# save 900 1
# save 300 10
# save 60 10000
stop-writes-on-bgsave-error yes  #如果快照保存失败,所有节点停止写入
rdbcompression yes    
rdbchecksum yes       
dbfilename dump.rdb   #RDB文件名
dir /data/redis/rdb/  #RDB存放目录,需要手动创建


# 主从配置
slaveof <masterip> <masterport>  #该项只在从节点配置,指定主库的ip和端口
masterauth 123456                #主库的密码,所有节点配置一致
slave-serve-stale-data yes       #如果从库与主库失联,是否继续响应客户端请求,No则响应SYNC with master in progress
slave-read-only yes              #该项只在从节点配置,从库开启只读
repl-ping-slave-period 10        #从库向主库发送ping请求的间隔
repl-timeout 60                  #主从超时时间
repl-disable-tcp-nodelay no      #是否用nodelay方式传输数据,no可以降低数据传输到从库的延迟,但使用更多的带宽
repl-backlog-size 10mb           #从服务离线之后,主服务器会把离线之后的写入命令存储在一个特定大小的队列中,避免短时间断开服务却进行全量同步的问题
repl-backlog-ttl 3600            #当所有从库都与主库断开连接后达到多少秒释放backlog
slave-priority 100               #从库优先级,数字越小优先级越高,0代表不会被哨兵选为主
# min-slaves-to-write 3          #如果从库少于N个,主库就停止写入,需配合min-slaves-max-lag一起使用。比如至少需要3个从库、并且延时小于等于10秒的,主库才能写入
# min-slaves-max-lag 10          #如果从库延迟小于N秒,主库才能写入数据,需配合min-slaves-to-write一起使用。比如至少需要3个从库、并且延时小于等于10秒的,主库才能写入
repl-diskless-sync yes           #开启无盘复制,主从全量同步时,主库并不会在本地创建RDB 文件,而是创建一个子进程通过Socket将RDB文件写入到从服务器,节约IO资源
repl-diskless-sync-delay 5

# AOF持久化配置
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
# appendfsync always
# appendfsync no
no-appendfsync-on-rewrite no     #如果正在导出rdb数据则停止aof的写入,aof将保存在一个队列中,等rdb备份完成后再执行队列,不会丢失数据
auto-aof-rewrite-percentage 100  #aof文件体积与上次相比增长率达到100%就进行重写(重写相当于记总账,比如对同一个key做了100次操作,我们只需要最后一次的操作,重写就会把多余的操作给忽略掉,节省内存
auto-aof-rewrite-min-size 64mb   #和auto-aof-rewrite-percentage组合使用,aof文件达到64M时进行重写
aof-load-truncated yes
aof-rewrite-incremental-fsync yes  #当Redis保存AOF文件时,每生成32MB数据就执行一次fsync操作,这样分批提交可以避免高延迟

#慢日志配置
slowlog-log-slower-than 1000000  #慢查询的评定时间,单位为微妙,这里代表1秒
slowlog-max-len 1000  #慢日志最大记录条数



#客户端输出缓冲区配置,内网环境可以全部为0
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 0 0 0
client-output-buffer-limit pubsub 0 0 0

hz 10  #通常使用默认10即可(可选范围1到500)。该值设置Redis每秒处理后台任务的频率,如清理过期Key、关闭超时连接等。调高该值可以让CPU空闲时间更频繁的去处理后台的任务,但通常不建议调高到100以上

7、启动Redis

redis-server /etc/redis.conf

8、连接redis,检查三个节点主从状态

redis-cli -a 123456 -h 172.20.1.171 info
redis-cli -a 123456 -h 172.20.1.172 info
redis-cli -a 123456 -h 172.20.1.173 info

执行info命令后关注Replication字段,确定主从节点正常,即master下能看到两个slave节点

9、哨兵配置

(1)创建/etc/sentinel.conf配置文件

bind 172.20.1.171           #哨兵服务需要监听在服务器哪个IP上,修改为本机IP即可
daemonize yes
protected-mode yes  
port 26379                  #哨兵服务端口
logfile /usr/local/redis/log/sentinel.log    #哨兵日志路径
dir /usr/local/redis/data/

sentinel monitor mymaster 172.20.1.171 6379 2     #配置要监控的主节点名字、IP、端口以及选举票数。哨兵会通过master自动发现其他slave服务器。选举票数建议为节点数/2+1,3节点下配置为2
sentinel down-after-milliseconds mymaster 30000   #判断master节点是否存活,超过这个时长就将其下线。单位是毫秒,默认是30秒
sentinel parallel-syncs mymaster 1                #哨兵发生切换后允许多少台slave服务器对新master进行同时同步,该项用于减轻压力
sentinel failover-timeout  mymaster 180000        #主节点出现故障时,故障转移超时时间,超出这个时间范围代表切换失败,默认是3分钟
sentinel auth-pass mymaster 123456                #redis主节点的密码

(2)启动哨兵

redis-sentinel /etc/sentinel.conf

(3)连接哨兵

 redis-cli -h 172.20.1.171 -a 123456 -p 26379 info
 redis-cli -h 172.20.1.172 -a 123456 -p 26379 info
 redis-cli -h 172.20.1.173 -a 123456 -p 26379 info

执行info命令后关注Sentinel字段,确定status=ok,并且adress信息和slave数量都是正常的

五、服务启停

1、关闭Redis

使用redis-cli客户端连接服务后发送shutdown指令即可关闭Redis

redis-cli -h 172.20.1.171 -a 123456  shutdown

2、关闭哨兵

使用redis-cli客户端连接哨兵后发送shutdown指令即可关闭哨兵服务

redis-cli -h 172.20.1.171 -a 123456 -p 26379 shutdown

3、启动Redis

redis-server /etc/redis.conf

4、启动哨兵

redis-sentinel /etc/sentinel.conf