redis官方目前提供了两种部署方案:
1.主从+哨兵
主从模式是为了高可用,采用一主(master)多从(slave)的部署方案,主写从读,实现读写分离
哨兵是为了保证服务不宕机,帮助选举,所有的哨兵全部监听主机,只要主机宕机,哨兵就会进行选举,选出新的主机出来。
2.redis-cluster
redis-cluster主要是为了提高并发量而产生的部署方案,采用多主多从(也可一主多从)的方式,提高写的效率,主机宕机,自动选举。无需引入哨兵。
3.redis安装(大致说一下就行,我们的重点不在这里)
redis6.2.1版本+centos7
3.1 下载redis压缩包
3.2 然后解压
3.3 解压完成进入目录
3.4 安装gcc
3.5 CentOS7默认安装的是4.8.5,而redis6.2.1只支持5.3以上版本,这里将gcc升级到9
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
3.6 gcc终于升级好了,这时千万别忘记要进行版本的切换,升级了新版本肯定是使用新版本喽
scl enable devtoolset-9 bash
切换完成之后重新连接服务器生效,查看gcc版本
gcc -v
3.7 编译
3.8 安装
make install PREFIX=/usr/local/redis
这样做的目的是在/usr/local/redis下面生成bin目录,当然,也可以直接make install,这样安装就在当前文件夹下面了
3.9 进入到新创建的文件夹下面,并把原文件夹下面的redis.conf文件拷贝过来
3.10 在/usr/local/redis/bin下面执行命令 ./redis-server
出现上图就说明安装好了
需要修改的配置:
systemctl stop firewalld.service
以下为redis.conf文件中的参数:
bind 10.1.3.85(这里需要改成自己虚拟机的ip即可)
protected-mode no --改为no,否则只有本机可以连接
daemonize yes --打开后台启动,上面我们安装redis是前台启动
redis的安装就到这里了,我们进入主题环节。
4.主从+哨兵搭建
4.1 准备了三台虚拟机,按照上面的方式安装redis
我们以10.1.3.85为master,10.1.3.84和10.1.3.83为slave进行配置
除了redis.conf,再将sentinel.conf文件也拷贝过来
然后修改从机的redis.conf的配置参数,两个从机都要增加这个配置,表明是10.1.3.85的slave
4.2 分别启动三个redis
4.3 任意连接一个redis服务
进入10.1.3.85查看
从节点是无法进行写的操作的,只能读,主节点写,这样就实现了读写分离
到这里我们的集群就搭建完毕了,但是,如果我们的主节点宕机了,现在是无法进行选举的,因此我们需要引入哨兵,帮我们选举,所有的哨兵只需要监测主节点就可以了,只要主节点宕机了,哨兵就会在从节点中选举一个作为新的主节点
4.4 哨兵配置(哨兵需要和服务器数量一致,我们服务器数量为3,因此哨兵为3个)
编辑sentinel.conf文件,三个都必须修改,全部加入以下配置,表明在监测主节点,2表示有两个哨兵主观认为主节点宕机了,则会开始新的选举,建议该数字设置的区间为 1~集群机器数量-1 ,以我们为例,我们设置的区间为1-2,不要设置为3,因为我们的哨兵是和redis服务在同一台虚拟机上,万一由于内存不足,导致redis宕机,则哨兵也会宕机(内存不足),此时,是永远不可能3个哨兵去确认的。
4.5 启动哨兵
4.6 演示将主机(10.1.3.85)断掉,进行选举
我们的10.1.3.83成为了新的master节点
4.7 重启10.1.3.85
重启后的10.1.3.85成为了slave
4.8 查看配置文件
我们这两处地方(redis.conf和sentinel.conf)最开始写的是10.1.3.85,现在变成了新的主机ip,其他两个服务的配置文件也被修改了,有次说明是哨兵在选举完成之后,将两个配置文件的两个信息进行了修改
5.redis-cluster搭建
5.1 在/usr/local下面创建redis-cluster目录,和我们上面创建的redis目录平级
5.2 进入redis/bin目录下,打开redis.conf进行修改参数
port 7001 --端口号
cluster-enabled yes --打开集群模式
cluster-config-file /usr/local/redis-cluster/redis01/nodes-7001.conf --集群配置文件
cluster-node-timeout 15000 --超时时间
pidfile /var/run/redis_7001.pid
dir /var/redis/7001
logfile /var/log/redis/7001.log
5.3 在redis-cluster下面创建6个文件夹
并将/usr/local/redis/bin下面的文件全部分别拷贝到以上文件夹下面,相当于复制6份
5.4 依次进入redis02~06文件夹修改redis.conf文件参数,
以上5.2的配置参数里面包含7001的全部改为每个文件夹的后缀(7002~7006),这样我们的端口号从redis01-redis06依次为7001-7006
port 7001-7006 --端口号
cluster-enabled yes --打开集群模式
cluster-config-file /usr/local/redis-cluster/redis01/nodes-7001-7006.conf --集群配置文件,很重要,若不修改,则无法启动集群
cluster-node-timeout 15000 --超时时间
daemonize yes --打开后台启动,上面我们安装redis是前台启动
pidfile /var/run/redis_7001-7006.pid
dir /var/redis/7001-7006
logfile /var/log/redis/7001-7006.log
bind 10.1.3.85(这里需要改成自己虚拟机的ip即可)
5.5 启动redis,依次执行
查看启动结果
以上说明redis启动了
5.6 创建集群
后面的 relicas 1 表明有一个主机(maste)有一台备用机(slave),我们一共起了6个服务,则是3主3备
输入yes即可
这就成功了
5.7 我们连接一台服务查看一下集群的详情
可以看到,有3主3备
以上我们的集群就搭建成功了
5.8 演示一下7001宕机,7001的从机7005则会被选举为主机
7001进程已经被杀掉了
7001已经无法连接了,我们连接7002
7005已经成为主节点了
我们在重新启动7001,看看效果
7005变成从节点了
以上集群就搭建成功了,下面是集群的扩容
5.9 我们在使用中可能会出现资源不足,需要扩容的情况,我们加入一主一备两台机器,端口号为7007和7008,配置参数参考5.2,然后启动7007和7008服务
5.10 7007和7008服务加入集群
红色框中的为当前要加入的节点信息,绿色框为当前节点中已经存在的任意一个节点的信息
可以看到7007已经加入的集群,下来就是7008作为7007的从节点加入集群
执行以上命令,红色框中的为当前要加入的节点信息,绿色框为当前节点中已经存在的任意一个节点的信息,蓝色为主节点(7007)的id,id可以使用cluster nodes查看
7008已经作为7007的从节点加入了集群,接下来就是给7007分配卡槽,现在的卡槽被7002,7005,7003三个服务占用,每个占了5461个,需要给7007分配,分配的数量就是16384/4=4096,相当于4个主节点,每个占用4096个卡槽
需要移动多少个卡槽,我们填入4096
ID :表明你需要把卡槽移动到哪个节点,因此填入的是我们7007的节点,下面选择all,表明现在已经有卡槽的主节点平均分配一些卡槽出来
以上表示在移动,然后完成
可以看到卡槽已经移动成功了
5.11 我们在使用中可能会出现资源溢出的情况,需要将多余的资源释放掉,我们假设7007要被释放
第一个框表示在集群中的任一一个服务,
cluster-from 表明是我们7007的id,即要释放节点的服务
cluster-to 表明释放出来的卡槽接收的节点
cluster-slots 释放的卡槽数
完成,查看信息
7007的卡槽已经释放出来了