主库宕机,从库会被自动选举为主库master,并继承原主库的哈希槽,当master恢复,会成为现主库的从库,且同步宕机期间的数据

若集群创建出错

step1:关服务

./redis-cli -h fdv-web02.reda -p 7000 -a reda2019 shutdown

step2:删除rdb数据文件,nodes-****.conf

rm -rf dump.rdb  nodes-****.conf

 

redis-5.0.5单机版安装

Step1: 安装依赖包make,gcc

    yum -y install make gcc

step2:使用rz(lrzsz) 上传redis-5.0.5.tar.gz到/apps/applications/software目录http://download.redis.io/releases/redis-5.0.3.tar.gz

Step3:tar解包redis-5.0.5.tar.gz,删除tar包,并cd进入

tar -xf redis-5.0.5.tar.gz

rm -rf redis-5.0.5.tar.gz        //删除tar包

cd redis-5.0.5

 

Step4:编译redis

make         //编译

make install  PREFIX=/apps/applications/software/redis              //安装

mkdir /apps/applications/software/redis/{conf,log,data}

 

step5:配置/etc/security/limits.conf 文件添加

* - nofile 10032

* soft nofile 65536

* hard nofile 65536

 

step6:准备redis配置文件

cp /apps/applications/software/redis-5.0.5/redis.conf  apps/applications/software/redis/conf/redis-7000.conf

编辑redis-7000.conf

详解:(进入文件后输入/并在其后写入关键字)

pidfile /apps/applications/software/redis/data/redis-7000.pid          //pid存放路径

logfile /apps/applications/software/redis/log/redis-7000.log          //redis日志文件存放路径

port 7000                            //redis端口

bind econ-web01.reda            //主机名

dbfilename dump-7000.rdb        //redis数据文件名

dir /apps/applications/software/redis/data             //redis数据库数据文件rdb文件放置的路径

cluster-config-file /apps/applications/software/redis/data/nodes-7000.conf                   //集群信息存放文件

cluster-enabled yes        //启用集群

clster-node-timeout 5000            //节点超时时间,一直最好

protected-mode no   //关闭redis保护模式

daemonize yes               //开启守护进程模式

redis5集群搭建

 

Step7:复制redir-7000.conf到redir-7001.conf

cd /apps/applications/software/redis/conf/

cp redis-7000.conf redis-7001.conf

 

Step8:redis-7001.conf配置文件的7000批量更改为7001

vim redis-7001.conf

输入:

:% s/7000/7001/g

 其他两台操作相同,但是记得修改port和bind

 

Step9:编写redis启动脚本和停服务脚本

cd /apps/applications/software/redis

 启动脚本start.sh:

#!/bin/bash

export BASH_HOME=$HOME
$BASH_HOME/software/redis/bin/redis-server $BASH_HOME/software/redis/conf/redis-7000.conf > $BASH_HOME/software/redis/log/redis-7000.log &
$BASH_HOME/software/redis/bin/redis-server $BASH_HOME/software/redis/conf/redis-7001.conf > $BASH_HOME/software/redis/log/redis-7001.log &

 

停止脚本stop.sh:

#!/bin/bash
export BASH_HOME=$HOME
$BASH_HOME/software/redis/bin/./redis-cli -h fdv-web02.reda -p 7000 -a reda2019 shutdown
$BASH_HOME/software/redis/bin/./redis-cli -h fdv-web02.reda -p 7001 -a reda2019 shutdown

 

chmod +x start_all.sh stop_all.sh   #赋予x权限,变成可执行脚本

 

1、在 redis5 之后,redis cluster 的搭建不在需要默认的ruby脚本,使用 redis-cli 命令即可完成搭建
2、创建集群的这些redis实例中都必须是空的
3、在一个 redis 的集群中默认存在 16384 个哈希槽,这 16384 个哈希槽会默认分配给集群中的主节点
4、增加一个主节点,就意味着要从原来的主节点中移动部分哈希槽给新的主节点
5、删除一个主节点,就需要把该主节点分配到的哈希槽归还给别的主节点
6、在主节点之间移动哈希槽不需要停止操作,因此对集群没多大影响
7、一个集群最好有奇数个主节点
8、集群创建过程中涉及到的命令

集群创建:./redis-cli --cluster create

                 ip:port   ip:port

                ip:port    ip:port

               ip:port     ip:port    --cluster-replicas 1   [-a 密码]                    [--cluster-replicas 1 表示每个主节点下有一个从节点]

添加一个主节点:

                   ./redis-cli --cluster  add-node  新ip:port  集群任一ip:port  
添加一个节点作为另外一个节点的从节点:
                     ./redis-cli --cluster  add-node  新ip:port  集群任一ip:port    --cluster-slave
删除一个节点 :

                        ./redis-cli --cluster del-node 集群任一ip:port   节点id

连接到集群:

               ./redis-cli -c -p 访问的端口 -h 访问的机器 -a 密码

查看集群中的节点:

   ./redis-cli -p 7000 cluster nodes

    ./redis-cli --cluster check    集群ip:端口   -a 密码

  ./redis-cli --cluster info   集群ip:端口   -a 密码

集群中的每个redis节点需要放行2个端口的访问:
   正常的客户端通讯端口,比如6379
   集群总线端口,总是 客户端通讯接口+10000,比如:16379,该端口主要是 集群总线进行故障检测、配置更新、故障转移等操作

 

如果redis集群中的某个主节点和与之相关的所有从节点都宕机了,那么redis集群将无法提供服务,因为我们不能再提供 这个master node 节点上的 哈希槽。

1.redis 集群不保证强一致性,这意味着在某些时候可能丢失某些写数据。
 |- 因为集群中从节点的复制是异步的。
 |- redis 集群在绝对需要时也支持同步写入,但是这也不能保证完全的强一致性。

2.配置redis集群的最小配置文件如下:
redis5集群搭建

 

 3.cluster-config-file 这个配置中指定的 配置文件 由redis自动维护,我们自己不要随意修改。这个文件有redis集群实例在启动时生成

4.由于本地机器不够,因此可在一台电脑上进行搭建,以不同的端口进行区分。

 

redis集群配置清单

redis5集群搭建

 

********************************************************

创建集群
1、集群创建命令
redis-cli --cluster create host1:port1 ... hostN:portN --cluster-replicas 一个主 的从个数
2、集群创建(3主3从-注意节点的顺序)

redis5集群搭建

可以看到:16384个哈希槽平均分配给了3个主节点,从节点没有分配哈希槽。

3、向集群中设置值测试一下

redis5集群搭建

-c 表示的是连接集群.
从上图可以看到,我们连接的是 7001 端口,但是设置值的时候,由于key(cluster)对应的哈希槽的值是14041,所以重定向到了 7003 端口上。

 

动态向集群中添加一个主节点并分片
           添加节点命令:redis-cli --cluster   add-node   新节点ip:新节点port   集群中以存在的节点ip:集群中已存在的节点port
           分片命令:redis-cli --cluster    reshard  需要分片的节点ip:需要分片的节点端口

 

注意:此时该节点只是作为主节点添加到了集群中,但是没有进行分片,是不可存储数据的,如果要存储数据,需要进行分片操作

 

动态向集群中添加一个从节点

/usr/local/redis/redis-5.0.3/src/redis-cli --cluster add-node 新节点ip:新节点port   集群中以存在的节点ip:集群中已存在的节点port --cluster-slave


动态删除集群中一个从节点

/usr/local/redis/redis-5.0.3/src/redis-cli --cluster del-node   集群中以存在的节点ip:集群中已存在的节点  所要删除的redis服务器id

 

动态删除集群中一个主节点
step1:归还槽

 redis5集群搭建

 

 step2:删除节点

命令: /usr/local/redis/redis-5.0.3/src/redis-cli --cluster del-node 集群中以存在的节点ip:集群中已存在的节点  所要删除的redis服务器id