Redis安装、使用、主从、哨兵

原文:https://www.jianshu.com/p/2f93bb771469

1.安装部署

  • 安装编译环境
yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
  • 目录规划
#redis配置文件目录:/opt/redis_cluster/redis{PORT}/conf/
#redis日志文件目录:/opt/redis_cluster/redis{PORT}/logs/
#redis数据文件目录:/opt/redis_cluster/redis{PORT}/data/
#redis pid文件目录:/opt/redis_cluster/redis{PORT}/pid/
#redis程序目录:/opt/redis
  • 创建目录
mkdir -pv /opt/redis_cluster/redis{PORT}/{conf,logs,data,pid}
  • 下载并安装redis程序
[root@nginx redis]# wget http://download.redis.io/releases/redis-3.2.13.tar.gz
[root@nginx redis]# tar xf redis-3.2.13.tar.gz -C /opt/
[root@nginx redis]# ln -sv /opt/redis-3.2.13.tar.gz /opt/redis
[root@nginx redis]# cd /opt/redis/
[root@nginx redis]# make && make install
  • 创建redis配置文件:/opt/redis_cluster/redis6379/conf/redis6379.conf
### 以守护进程模式启动
daemonize yes

### 绑定的主机地址
bind 192.168.1.92

###关闭只能本地访问
protected-mode no

###添加认证密码
requirepass 123456

### 监听端口
port 6379

### 内存限制(最好是总内存的一半)
maxmemory 5gb

### 超出内存之后的测率
#volatile-lru:根据LRU算法删除最老的key。
#allkeys-lru:根据LRU算法删除任何key。
#volatile-random:删除最老的key。
#allkeys->random:随机删。
#volatile-ttl:根据key的过期时间删除
#noeviction:谁也不删,没法再写
maxmemory-policy volatile-lru 


### pid文件和log文件的保存地址
pidfile /opt/redis_cluster/redis6379/pid/redis6379.pid
logfile /opt/redis_cluster/redis6379/logs/redis6379.log

### 本地数据库的目录
dir /opt/redis_cluster/redis6379/data

### 设置数据库的数量,默认数据库为0
databases 16

###下面是持久化配置
### 指定本地持久化文件的文件名,默认是dump.rdb
dbfilename redis6379.rdb
save 900 1      #900秒(15分钟)内有1个更改
save 300 10     #300秒(5分钟)内有10个更改
save 60 10000   #60秒内有10000个更改  
 
appendonly yes             #是否打开aof日志功能
appendfsync always      #每1个命令,都立即同步到aof
appendfsync everysec   #每秒写1次
appendfsync no            #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof.
appendfilename appendonly.aof  #aof文件名
  • 启动程序和关闭程序
#启动
[root@nginx redis_cluster]# redis-server redis6379/conf/redis6379.conf

#关闭
[root@nginx redis_cluster]# redis-cli -h 192.168.1.92 shutdown 

2.基本使用

  • 全局命令
#查看所有键值
> keys *

#查看键的总数
> DBSIZE

#查看键是否存在
> Exists KEY

#删除键
> Del key [key …]

#键过期
# Redis支持对键添加过期时间,当超过过期时间后,会自动删除键.
# 通过ttl命令观察键的剩余时间
#>0: 键剩余过期时间
#-1: 键没设置过期时间
#-2: 键不存在
> Expire key seconds

#键的数据类型
> Type key 

#查看redis使用情况
> info 
  • 字符串数据类型
#设置键
> set key1 value1

#获取键
> get key1

#增加删除键的值
> set key2 100

> incr key2
(integer) 101
> get key2
"101"

> incrby key2 10
(integer) 111
> get key2
"111"

#一次性设置多个值
> mset key3 v3 key4 v4 key5 v5
> mget key3 key4 key5

#判断键是否存在和删除键,DEL命令返回1说明键存在,返回0说明不存在
> exists key5
> del key5

#获取键类型
> type key5

#键超时,-1不超时,-2键不存在,>0还剩多少秒过期
> ttl key5

#设置键超时
> expire key5 10

#取消键超时
> persist key5
  • 列表数据类型
#向列表右侧添加数据
> rpush list1 A

#向列表左侧添加数据库
> lpush list1 top1

#从列表中取范围内数据
> lrange list1 0 -1

#从列表左侧删除数据
> lpop list1

#从列表右侧删除数据
> rpop list1  
  • 哈希数据类型
#指令设置hash中的多个域
> hmset user:1000 username zhangya age 27 job it

#取回单个域.
> hget user:1000 username

#取回一系列的值
> hmget user:1000 username age job

#取回所有值
> hgetall user:1000  
  • 集合数据类型
#设置集合
> sadd set1 1 2 3

#获取集合
> smembers set1

#删除集合内的值
> srem set1 2 4

#取两个集合的差集
> sadd set1 1 2 3 4
> sadd set2 1 4 5
> sdiff set1 set2
1) "2"
2) "3"

#取集合并集
> sinter set1 set2
1) "1"
2) "4"

#取集合合集
> sunion set1 set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"  

3.持久化  

RDB 持久化优缺点
可以在指定的时间间隔内生成数据集的 时间点快照(point-in-time snapshot)。
优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的。
缺点:会有数据丢失
dir /data/6379
dbfilename dump.rdb
save 900 1      #900秒(15分钟)内有1个更改
save 300 10     #300秒(5分钟)内有10个更改
save 60 10000   #60秒内有10000个更改

AOF 持久化优缺点
记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。
优点:可以最大程度保证数据不丢
缺点:日志记录量级比较大
appendonly yes          #是否打开aof日志功能
appendfsync always      #每1个命令,都立即同步到aof
appendfsync everysec    #每秒写1次
appendfsync no          #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof.
appendfilename appendonly.aof  #文件名

RDB和AOF文件同时存在时,会优先读取AOF文件。  

 4.安全认证

#是否只让本地访问redis数据库
protected-mode yes|no

#绑定内网地址
bind 10.0.0.51  127.0.0.1

#添加认证密码,最常用
requirepass 123456

#认证节点密码
masterauth 12345678 

5.主从复制

#每个从节点只能有一个主节点,主节点可以有多个从节点。开启复制有三种方法:
1.在配置文件中加入slaveof {masterHost} {masterPort} 随redis启动生效.
2.在redis-server启动命令后加入—slaveof {masterHost} {masterPort}生效.
3.直接使用命令:slaveof {masterHost} {masterPort}生效.

#从节点断开复制命令
> slave of no one

#查看主从复制状态
> Info replication

#主从复制流程
1.从库发起同步请求
2.主库接收到请求,执行bgsave命令保存数据
3.主库将持久化的数据发送给从库
4.从库接收到主库的数据,先清空自己的数据
4.从库加载主库发来的数据  

6.哨兵  

  • 在创建哨兵集群之前,需要先做好1主2从复制三个节点
  • 创建哨兵服务存放目录,这里是在一台服务器上做的,生产需要分开服务器
]# mkdir -pv {redis26379,redis26380,redis26381}/{conf,logs,pid,data}
  • 哨兵26379节点配置(需要密码的话添加sentinel auth-pass mymaster 12345678)
#26379端口哨兵节点配置
bind 192.168.1.92
port 26379
daemonize yes
logfile "/opt/redis_cluster/redis26379/logs/redis26379.log"
pidfile "/opt/redis_cluster/redis26379/pid/redis26379.pid"
dir "/opt/redis_cluster/redis26379/data"

#mymaster主节点别名 主节点 ip 和端口,判断主节点失败,两个sentinel节点同意
sentinel monitor mymaster 192.168.1.92 6379 2 

#选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
sentinel down-after-milliseconds mymaster 30000 

#向新的主节点发起复制操作的从节点个数,1轮询发起复制
sentinel parallel-syncs mymaster 1 

#故障转移超时时间
sentinel failover-timeout mymaster 180000 
  • 哨兵26380节点配置
bind 192.168.1.92
port 26380
daemonize yes
logfile "/opt/redis_cluster/redis26380/logs/redis26380.log"
pidfile "/opt/redis_cluster/redis26380/pid/redis26380.pid"
dir "/opt/redis_cluster/redis26380/data"
sentinel monitor mymaster 192.168.1.92 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000
  • 哨兵26381节点配置
bind 192.168.1.92
port 26381
daemonize yes
logfile "/opt/redis_cluster/redis26381/logs/redis26381.log"
pidfile "/opt/redis_cluster/redis26381/pid/redis26381.pid"
dir "/opt/redis_cluster/redis26381/data"
sentinel monitor mymaster 192.168.1.92 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000
  • 启动三台哨兵
]# redis-sentinel redis26380/conf/redis26380.conf
]# redis-sentinel redis26381/conf/redis26381.conf
]# redis-sentinel redis26379/conf/redis26379.conf
  • 哨兵启动后,配置文件会发生变化
1)Sentinel节点自动发现了从节点,其余Sentinel节点
2)去掉了默认配置,例如parallel-syncs failover-timeout参数
3)添加了配置纪元相关参数
  • 哨兵节点API命令
Info Sentinel
Sentinel masters
Sentinel master <master name>
Sentinel slaves <master name> 
Sentinel sentinels <master name>
Sentinel get-master-addr-by-name <master name>   
Sentinel failover <master name>
Sentinel flushconfig
  • 手动调整主节点
#Redis Sentinel存在多个从节点时,如果想将指定的从节点晋升为主节点,可以将其他从节点的slavepriority配置为0,但是需要注意failover后,将slave-priority调回原值.

1.查询命令:CONFIG GET slave-priority
2.设置命令:CONFIG SET slave-priority 0
3.主动切换:sentinel failover mymaster

#db02/db03操作
redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0
redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0

#db01操作
redis-cli -h db01 -p 26379 Sentinel failover mymaster

  

  

 

初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
原文地址:https://www.cnblogs.com/forlive/p/12690957.html