史上最全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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201117112703314.png)]

第二步:wget下载redis-6.0.0版本。命令为:wget http://download.redis.io/releases/redis-6.0.0.tar.gz

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuHkQZE5-1605859993098)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201117112927684.png)]

第三步:解压缩Redis源码压缩包。命令为:tar -zxf redis-6.0.0.tar.gz

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lrz3WGzt-1605859993101)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201117113133868.png)]

第四步:进入第三步解压缩Redis源码压缩包后的目录,命令为: cd redis-6.0.0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6i7Ne6vx-1605859993104)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201117113504937.png)]

第五步:编译 Redis 源码,执行编译命令:make

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-biUtMe0m-1605859993107)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201117113749815.png)]

第六步:进入第三步解压缩Redis源码压缩包后的目录,安装 Redis ,需要通过 PREFIX 指定安装路径(即为第一步创建的那个目录redis1),命令为:make install PREFIX=/root/software/redis1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPaAnKce-1605859993109)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201117114933541.png)]

第二步:修改 redis.conf ,在Redis安装目录下,即此处的/root/software/redis1/bin

命令为:vim redis.conf

修改以下参数:

  1.将`daemonize`由`no`改为`yes`
      daemonize yes
  2.默认绑定的是回环地址,默认不能被其他机器访问,注释bind 127.0.0.1
    # bind 127.0.0.1
  3.关闭保护模式,由yes该为no
    protected-mode no  
 4.开启密码验证
    requirepass foobared    #密码:foobared
 5.数据库文件的存放路径
    dir ./ 
 6.数据库数量设置
    databases 16
 7.开启logfile日志文件
    logfile "weidong/redis.log" #默认:logfile ""

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YPCSakXg-1605859993113)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201117141459038.png)]

机器规划

生产环境多个机器上规划:

机器名称IP端口
master192.168.1.106379
slave1192.168.1.116379
slave2192.168.1.126379
slave3192.168.1.136379

单机规划

机器名称IP端口
master127.0.0.16379
slave1127.0.0.16380
slave2127.0.0.16381
slave3127.0.0.16382

配置

第一步: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地址

# 配置主节点的ip和端口
slaveof 127.0.0.1 6379 
# 从redis2.6开始,从节点默认是只读的
slave-read-only yes
# 假设主节点有登录密码,是123456
masterauth 123456

②基于启动命令:

也可以不配置上面的文件,使用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)功能的行为。

通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

  • 可用版本:

    = 1.0.0

  • 时间复杂度:

    SLAVEOF host port ,O(N), N 为要同步的数据数量。SLAVEOF NO ONE , O(1) 。

  • 返回值:

    总是返回 OK

redis slaveof 命令基本语法如下:

redis 127.0.0.1:6379> SLAVEOF host port 
三.哨兵模式(多哨兵模式)

1.说明:

①哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵进程向所有的redis机器发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

②哨兵可以有多个,一般为了便于决策选举,使用奇数个哨兵。哨兵可以和redis机器部署在一起,也可以部署在其他的机器上。多个哨兵构成一个哨兵集群,哨兵直接也会相互通信,检查哨兵是否正常运行,同时发现master宕机哨兵之间会进行决策选举新的master

2.架构图:

哨兵模式

3.机器规划

(1)一主三从三哨兵

这里我们将哨兵进程和redis分别部署在不同的机器上,避免因为redis宕机导致sentinel进程不可用

生产环境多个机器上规划:

机器名称IP端口
master192.168.1.106379
slave 1192.168.1.116379
slave 2192.168.1.126379
slave 3192.168.1.136379
sentinel 1192.168.1.1426379
sentinel 2192.168.1.1526379
sentinel 3192.168.1.1626379

单机规划:

机器名称IP端口
master127.0.0.16379
slave 1127.0.0.16380
slave 2127.0.0.16381
slave 3127.0.0.16382
sentinel 1127.0.0.126379
sentinel 2127.0.0.126380
sentinel 3127.0.0.126381

(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,三台机器的哨兵配置是一样的

#将daemonize由no改为yes 以守护进程运行即后台进程启动
daemonize yes
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,
#192.168.1.10代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行 failover(故障转移)操作
sentinel monitor mymaster 192.168.1.10 6379 2
# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
sentinel auth-pass mymaster 123456

4.机器启动

首先启动主节点,然后一台一台启动从节点。

redis集群启动完成后,分别启动哨兵集群所在机器的三个哨兵

启动redis-sentinel 程序, 可以用redis提供的命令来启动:./redis-sentinel sentinel.conf

注:可进入redis的各自客户端使用命令info replication 查看集群状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cezwCZyd-1605859993119)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201118143543082.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZ9V7vWn-1605859993121)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-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集群:

IDIPHost类型从节点
master 1192.168.1.117001slave 1
master 2192.168.1.127002slave 2
master 3192.168.1.137003slave 3
slave 1192.168.1.147004/
slave 2192.168.1.157005/
slave 3192.168.1.167006/

2.单机规划:

一台机器上使用三主三从的方式部署Redis集群:

IDIPHost类型从节点
master 1127.0.0.17001slave 1
master 2127.0.0.17002slave 2
master 3127.0.0.17003slave 3
slave 1127.0.0.17004/
slave 2127.0.0.17005/
slave 3127.0.0.17006/

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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201120150024633.png)]

第二步:修改 redis.conf ,在Redis安装目录下,即此处的/root/software/redis-cluster/redis1/bin/redis.conf

配置文件

#将daemonize由no改为yes 以守护线程(后台启动)方式启动
daemonize yes
#默认绑定的是回环地址,默认不能被其他机器访问,注释bind 127.0.0.1
# bind 127.0.0.1
#关闭保护模式,由yes该为no
protected-mode no 
# 修改端口 大概位置在92行
port 7001
# 开启redis的集群模式 大概位置在1171行
cluster-enabled yes
#修改pid 大概位置在227行
pidfile /var/run/redis_7001.pid

第三步:将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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201120151543057.png)]

4.机器启动

首先启动主节点,然后一台一台启动从节点。./redis-server redis.conf

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ydqvxV5p-1605859993127)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201118164755386.png)]

或者直接编辑脚本批量启动,在集群安装主目录下:/root/software/redis-cluster

vim start-cluster.sh

cd redis1/bin
./redis-server redis.conf
cd ..
cd ..
cd redis2/bin
./redis-server redis.conf
cd ..
cd ..
cd redis3/bin
./redis-server redis.conf
cd ..
cd ..
cd redis4/bin
./redis-server redis.conf
cd ..
cd ..
cd redis5/bin
./redis-server redis.conf
cd ..
cd ..
cd redis6/bin
./redis-server redis.conf
cd ..
cd ..

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bp4S5sCn-1605859993129)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201120152005926.png)]

创建好启动脚本文件之后,需要修改该脚本的权限,使之能够执行,指令如下:

chmod u+x start-cluster.sh

执行脚本:./start-cluster.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbrQleJM-1605859993131)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201120153027787.png)]

查看6个实例是否启动成功: ps -ef |grep redis

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LafdrvMV-1605859993133)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201120153818758.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-18D9qyav-1605859993136)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-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:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201120154003865.png)]

列出节点信息(查看集群中槽占用情况):cluster nodes

redis集群有16384个槽,集群中的每个结点分配自己槽,通过查看集群结点可以看到槽占用情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vgeuH44v-1605859993140)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-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

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值