说明:Redis 没有官方的 Windows 版本,所以建议在 Linux 系统上安装运行,我们使用CentOS 7 ( Linux 操作系统的一个系列)作为安装环境。以下安装均为CentOS 7下
官 地址:http://redis.io/
中文官 地址:http://www.redis.cn/
Redis 命令参考:http://doc.redisfans.com/
下载地址:http://download.redis.io/releases/
Redis的哨兵机制是Redis2.8开始支持,而集群模式是Redis3.0开始支持。
相关版本:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gREDHKxR-1605859993084)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117112011992.png)]
安装前提环境:
1.由于 redis 是用 C 语言编写的,安装 C 语言需要的 GCC 环境,这儿需要安装 GCC 和 C++ 环境输入命令:
yum install -y gcc-c++
2.wget简介: CentOS wget是一个从 络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。使用yum安装wget命令为:yum install -y wget
一.Redis单机版安装配置
下述安装以/root/software为根目录
安装
1.下载并解压缩 Redis 源码压缩包
第一步:在/root/software创建一个名为redis1的安装目录,作为redis安装的目录。命令为:mkdir redis1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jG6JNG9O-1605859993093)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117112703314.png)]
第二步:wget下载redis-6.0.0版本。命令为:wget http://download.redis.io/releases/redis-6.0.0.tar.gz
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuHkQZE5-1605859993098)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117112927684.png)]
第三步:解压缩Redis源码压缩包。命令为:tar -zxf redis-6.0.0.tar.gz
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lrz3WGzt-1605859993101)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117113133868.png)]
第四步:进入第三步解压缩Redis源码压缩包后的目录,命令为: cd redis-6.0.0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6i7Ne6vx-1605859993104)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117113504937.png)]
第五步:编译 Redis 源码,执行编译命令:make
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-biUtMe0m-1605859993107)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117113749815.png)]
第六步:进入第三步解压缩Redis源码压缩包后的目录,安装 Redis ,需要通过 PREFIX 指定安装路径(即为第一步创建的那个目录redis1),命令为:make install PREFIX=/root/software/redis1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPaAnKce-1605859993109)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117114338996.png)]
启动Redis 后端启动(守护进程启动)
第一步:拷贝 redis-6.0.0/redis.conf 配置文件到 Redis 安装目录的 bin 目录:
cp redis源码/redis.conf redis安装路径/bin/
命令为:cp /root/software/redis-6.0.0/redis.conf /root/software/redis1/bin/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvz8rHnJ-1605859993111)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117114933541.png)]
第二步:修改 redis.conf ,在Redis安装目录下,即此处的/root/software/redis1/bin
命令为:vim redis.conf
修改以下参数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YPCSakXg-1605859993113)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117130601983.png)]
第三步:启动服务,命令为:./redis-server redis.conf
其它:
①后端启动的关闭方式,命令为:
./redis-cli -p 6379 shutdown ./redis-cli -p 端口 shutdown
如果停止不了,则采取杀死进程的方式:kill -9 PID
远程关闭redis 服务器: ./redis-cli -h xxx.xxx.xxx.xxx -p xxxx -u xxxx -a xxxx shutdown
②查看redis服务进程是否启动:ps -A |grep redis 或者ps -ef |grep redis
其他命令说明 :
redis-server :启动 redis 服务
redis-cli :进入 redis 命令客户端
redis-benchmark : 性能测试的工具
redis-check-aof : aof 文件进行检查的工具
redis-check-dump : rdb 文件进行检查的工具
redis-sentinel : 启动哨兵监控服务
Redis命令行客户端:
./redis-cli -h 127.0.0.1 -p 6379 -h:redis服务器的ip地址 -p:redis实例的端口 -u:用户名 -a:密码 可通过 redis-cli –help 来查看redis-cli 的常用选项
ping:测试连接是否还在
echo name:打印
select 1~16:数据库切换
quit:退出连接
dbsize:当前数据库中key的数量
info:服务器基本信息
monitor:实时转储收到的请求
flushdb:清空当前数据库
flushall:清除所有数据库
二.Redis主从复制、读写分离配置(一主两从)
说明:持久化保证了即使 redis 服务重启也会丢失数据,因为 redis 服务重启后会将硬盘上持久化的数据恢复到内存中,但是当 redis 服务器的硬盘损坏了可能会导致数据丢失,如果通过 redis 的主从复制机制就可以避免这种单点故障。
主从复制是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver只可读
作用:1、读写分离,性能扩展;2、容灾快速恢复
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BA2ANbJq-1605859993115)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201117141459038.png)]
机器规划
生产环境多个机器上规划:
机器名称 | IP | 端口 |
---|---|---|
master | 192.168.1.10 | 6379 |
slave1 | 192.168.1.11 | 6379 |
slave2 | 192.168.1.12 | 6379 |
slave3 | 192.168.1.13 | 6379 |
单机规划:
机器名称 | IP | 端口 |
---|---|---|
master | 127.0.0.1 | 6379 |
slave1 | 127.0.0.1 | 6380 |
slave2 | 127.0.0.1 | 6381 |
slave3 | 127.0.0.1 | 6382 |
配置
第一步:master默认6379不变,两个slave的redis.conf文件找到 ”port 6379”,把6379分别改成6380和6381
第二步:主 redis 配置,不需要配置。bind 127.0.0.1 实际生产环境可以修改成本机的IP地址
第三步:
①基于配置文件:
从redis配置,修改从 redis 服务器上的 redis.conf 文件,添加 slaveof 主 redisip 主 redis 端口。
如:slaveof 127.0.0.1 6379 实际生产环境可以修改成本机的IP地址
②基于启动命令:
也可以不配置上面的文件,使用redis-server命令,在启动从节点时,通过参数–slaveof指定主节点是谁:
./redis-server –slaveof 127.0.0.1 6379 redis.conf
第四步:首先启动主节点,然后一台一台启动从节点。 依次启动master、两个slave。
./redis-cli -h 127.0.0.1 -p 6379 #连接master
./redis-cli -h 127.0.0.1 -p 6380 #连接slave1
./redis-cli -h 127.0.0.1 -p 6381 #连接slave2
其他
错原因:READONLY You can’t write against a read only slave.
因为连接的是从节点,从节点只有读的权限,没有写的权限
解决方案:进入redis.conf配置文件,修改配置文件的slave-read-only为no,那么从节点也就可以进行写的操作了,代码不会 错
master故障手动将slave提升为master:
系统运行时,如果master挂掉了,可以在一个从库(如slave1)上手动执行命令slaveof no one,将slave1变成新的master;在slave2执行slaveof 127.0.0.1 6380 将slave2指向这个新的master;同时,挂掉的原master启动后作为新的slave也指向新的master上。
Redis Slaveof 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。
通过执行 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。
如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用『 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。
-
可用版本:
= 1.0.0
-
时间复杂度:
,O(N), 为要同步的数据数量。 , O(1) 。
-
返回值:
总是返回 。
redis slaveof 命令基本语法如下:
三.哨兵模式(多哨兵模式)
1.说明:
①哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵进程向所有的redis机器发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
②哨兵可以有多个,一般为了便于决策选举,使用奇数个哨兵。哨兵可以和redis机器部署在一起,也可以部署在其他的机器上。多个哨兵构成一个哨兵集群,哨兵直接也会相互通信,检查哨兵是否正常运行,同时发现master宕机哨兵之间会进行决策选举新的master
2.架构图:

3.机器规划
(1)一主三从三哨兵
这里我们将哨兵进程和redis分别部署在不同的机器上,避免因为redis宕机导致sentinel进程不可用
生产环境多个机器上规划:
机器名称 | IP | 端口 |
---|---|---|
master | 192.168.1.10 | 6379 |
slave 1 | 192.168.1.11 | 6379 |
slave 2 | 192.168.1.12 | 6379 |
slave 3 | 192.168.1.13 | 6379 |
sentinel 1 | 192.168.1.14 | 26379 |
sentinel 2 | 192.168.1.15 | 26379 |
sentinel 3 | 192.168.1.16 | 26379 |
单机规划:
机器名称 | IP | 端口 |
---|---|---|
master | 127.0.0.1 | 6379 |
slave 1 | 127.0.0.1 | 6380 |
slave 2 | 127.0.0.1 | 6381 |
slave 3 | 127.0.0.1 | 6382 |
sentinel 1 | 127.0.0.1 | 26379 |
sentinel 2 | 127.0.0.1 | 26380 |
sentinel 3 | 127.0.0.1 | 26381 |
(2)配置
前期准备:拷贝 redis-6.0.0/sentinel.conf 配置文件到 Redis 安装目录的 bin 目录:
cp redis源码/sentinel.conf redis安装路径/bin/
命令为:cp /root/software/redis-6.0.0/sentinel.conf /root/software/redis1/bin/
①redis.conf配置
redis.conf的配置和主从复制配置一样
②sentinel.conf配置
每台机器的哨兵进程都需要一个哨兵的配置文件sentinel.conf,三台机器的哨兵配置是一样的
4.机器启动
首先启动主节点,然后一台一台启动从节点。
redis集群启动完成后,分别启动哨兵集群所在机器的三个哨兵
启动redis-sentinel 程序, 可以用redis提供的命令来启动:./redis-sentinel sentinel.conf
注:可进入redis的各自客户端使用命令info replication 查看集群状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cezwCZyd-1605859993119)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201118143543082.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZ9V7vWn-1605859993121)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201118145410783.png)]
5.哨兵模式的优缺点
优点:
①哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有
②主从可以自动切换,系统更健壮,可用性更高
③支持主从复制,主机会自动将数据同步到从机,可以进行读写分离
④为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务依然必须由Master来完成
⑤Slave同样可以接受其他Slaves的连接和同步请求,这样可以有效地分载Master的同步压力
⑥Master是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求
⑦Slave同样是以阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据
缺点:
①具有主从模式的缺点,每台机器上的数据是一样的,内存的可用性较低
②Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂
四.集群模式
说明:
①redis3.0以后推出的redis cluster 集群方案,redis cluster集群保证了高可用、高性能、高可扩展性。
②Redis集群最少需要三台主服务器,三台从服务器。端口 规划为:7001~7006
1.生产环境多台机器规划:
使用三主三从的方式部署Redis集群:
ID | IP | Host | 类型 | 从节点 |
---|---|---|---|---|
master 1 | 192.168.1.11 | 7001 | 主 | slave 1 |
master 2 | 192.168.1.12 | 7002 | 主 | slave 2 |
master 3 | 192.168.1.13 | 7003 | 主 | slave 3 |
slave 1 | 192.168.1.14 | 7004 | 从 | / |
slave 2 | 192.168.1.15 | 7005 | 从 | / |
slave 3 | 192.168.1.16 | 7006 | 从 | / |
2.单机规划:
一台机器上使用三主三从的方式部署Redis集群:
ID | IP | Host | 类型 | 从节点 |
---|---|---|---|---|
master 1 | 127.0.0.1 | 7001 | 主 | slave 1 |
master 2 | 127.0.0.1 | 7002 | 主 | slave 2 |
master 3 | 127.0.0.1 | 7003 | 主 | slave 3 |
slave 1 | 127.0.0.1 | 7004 | 从 | / |
slave 2 | 127.0.0.1 | 7005 | 从 | / |
slave 3 | 127.0.0.1 | 7006 | 从 | / |
3.配置:
第一步:
①在自己软件安装目录下新建redis-cluster目录,用于存放集群节点:mkdir redis-cluster
②进入redis解压目录,指定安装目录:make install PREFIX=/root/software/redis-cluster/redis1
③拷贝 redis-6.0.0/redis.conf 配置文件到 Redis 安装目录的 bin 目录:
④cp redis源码/redis.conf redis安装路径/bin/
命令为:cp /root/software/redis-6.0.0/redis.conf /root/software/redis-cluster/redis1/bin/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QGqkCoGn-1605859993123)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120150024633.png)]
第二步:修改 redis.conf ,在Redis安装目录下,即此处的/root/software/redis-cluster/redis1/bin/redis.conf
配置文件
第三步:将redis-cluster/redis1文件复制5份到redis-cluster目录下(redis2-redis6),创建6个redis实例,模拟Redis集群的6个节点。然后将其余5个文件下的redis.conf里面的端口 分别修改为7002-7006。命令为:
cp -r redis1/ redis2
cp -r redis1/ redis3
cp -r redis1/ redis4
cp -r redis1/ redis5
cp -r redis1/ redis6
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FM6gmpT7-1605859993124)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120151200530.png)]
第四步:分别修改redis.conf文件端口 为7002-7006
vim redis2/bin/redis.conf
vim redis3/bin/redis.conf
vim redis4/bin/redis.conf
vim redis5/bin/redis.conf
vim redis6/bin/redis.conf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-miq9wJj1-1605859993126)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120151543057.png)]
4.机器启动
首先启动主节点,然后一台一台启动从节点。./redis-server redis.conf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ydqvxV5p-1605859993127)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201118164755386.png)]
vim start-cluster.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bp4S5sCn-1605859993129)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120152005926.png)]
chmod u+x start-cluster.sh
执行脚本:./start-cluster.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbrQleJM-1605859993131)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120153027787.png)]
查看6个实例是否启动成功: ps -ef |grep redis
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LafdrvMV-1605859993133)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120153243974.png)]
5.创建redis集群
6个 Redis 服务分别启动成功之后,这时虽然配置了集群开启,但是这六台机器还是独立的。使用集群管理命令将这6台机器添加到一个集群中。
(1)Redis5.0之前
借助 redis-tri.rb 工具可以快速的部署集群。
Redis 官方提供了 redis-trib.rb 这个工具,就在redis解压目录的 src 目录中,将其复制到redis安装bin 目录中,可以直接在命令行中使用了。
①执行创建集群命令:
redis-trib.rb create –replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
②执行完成后自动生成配置的redis-cluster.conf文件
③redis相关命令:
登录集群:redis-cli -c -h 127.0.0.1 -p 7001 -a 123456
-c表示是以redis集群方式进行连接
查看集群信息:cluster info
列出节点信息:cluster nodes
(2)Redis5.0之后
从Redis5之后我们就可以直接使用redis-cli –cluster命令自动部署Redis集群了。
redis-cli –cluster代替了之前的redis-trib.rb,我们无需安装ruby环境即可直接使用它附带的所有功能:创建集群、增删节点、槽迁移、完整性检查、数据重平衡等等。
在redis1安装目录bin目录下执行:
cd redis1/bin
./redis-cli –cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 –cluster-replicas 1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CyRxhhyj-1605859993134)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120153818758.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-18D9qyav-1605859993136)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120153852011.png)]
这里的–cluster-replicas表示每个主节点有几个副本节点。
查看集群相关命令,redis安装目录bin目录下执行:
./redis-cli –cluster help
redis相关命令:
登录集群:./redis-cli -c -h 127.0.0.1 -p 7001
-c表示是以redis集群方式进行连接
查看集群信息:cluster info
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i9pBhEpt-1605859993139)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120154003865.png)]
列出节点信息(查看集群中槽占用情况):cluster nodes
redis集群有16384个槽,集群中的每个结点分配自己槽,通过查看集群结点可以看到槽占用情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vgeuH44v-1605859993140)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20201120154022873.png)]
6.维护节点
说明:集群创建成功后可以继续向集群中添加节点,如再添加一个redis7实例
第一步:创建redis7实例
①将redis-cluster/redis1文件复制1份到redis-cluster目录下(redis7),创建redis7实例。将其下redis.conf里面的端口 修改为7007。命令为:
cp -r redis1/ redis7
②启动redis7实例(redis7bin目录下 /root/software/redis-cluster/redis7/bin)执行命令:
./redis-server redis.conf
③添加7007结点作为新节点((redis7bin目录下 /root/software/redis-cluster/redis7/bin)执行命令:
./redis-cli –cluster add-node 127.0.0.1:7007 127.0.0.1:7001
未完待续…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!