史上最全Redis单机模式、主从模式、哨兵模式、集群模式搭建(基于CentOS7)

说明: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进行处理,非常感谢!

上一篇 2020年10月15日
下一篇 2020年10月15日

相关推荐