redis集群搭建及使用

 redis集群搭建:       

    1、环境准备

        redis的实例是通过redis.conf启动的,一个redis服务中复制多个redis.conf就可以启动多个实例,本机使用三台虚拟机、六个redis实例进行集群搭建;

在三台机器上个复制两个redis.conf文件,修改如下,每个文件的端口不一样:

(1)daemonize yes      (后台启动)
(2)port 6380(分别对每个机器的端口号进行设置)
(3)pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件
(4)dir /usr/local/redis‐cluster/6380/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
 (5)cluster‐enabled yes(启动集群模式)
 (6)cluster‐config‐file nodes‐6380.conf(集群节点信息文件,这里800x最好和port对应上)
 (7)cluster‐node‐timeout 10000
   (8)# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
   (9)protected‐mode no (关闭保护模式)
   (10)appendonly yes

   (11) requirepass 123456(设置redis访问密码)
   (12) masterauth redis(设置集群节点间访问密码,跟上面一致)

    2、启动集群节点:

        1、启动6个节点:在redis目录下执行  src/redis-server /usr/local/redis-5.0.3/cluster/redis-6380.conf

        2、创建集群:待6个节点都启动成功后在其中一台服务器的/usr/local/redis-5.0.3/ 目录下执行创建集群命令(命令中的1是一个主节点有一个从节点,六个实例就是三个主节点、三个从节点,-a 后面的是配置文件中masterauth配置的登录密码):

src/redis-cli -a redis --cluster create --cluster-replicas 1 192.168.60.158:6380 192.168.60.158:6381 192.168.60.159:6382 192.168.60.159:6383 192.168.60.156:6384 192.168.60.156:6385

    tips:创建集群的redis节点是不能有数据的,否则集群会创建不成功,如果redis节点中有数据可以参照下面链接将数据清空:[ERR] Node 192.168.0.161:6380 is not empty. Either the node already knows other nodes (check with CL_node 192.168.163.130:6387 is not empty. either the_水煮胡萝卜的博客-CSDN博客

创建集群时报错连不上其他节点可以关闭防火墙:

        关闭防火墙  systemctl stop firewalld          查看防火墙状态: systemctl status firewalld

创建成功的输出如下,16384个槽分配到三个主节点上,主从节点的关系不是按上面命令的节点先后顺序,而是随机分配,这样一个主节点挂了其他机器上的从节点可以成为主节点,可以避免一台服务器挂了后集群不可用;

          redis集群默认会对 key 值使用 crc16 算法进行 hash 得到一个整数值,然后用这个整数值对 16384 进行取模来得到具体槽位。
        HASH_SLOT = CRC16(key) mod 16384

集群搭建成功后随机登录一个节点(redis目录下执行 src/redis-cli -a redis -p 6080,执行src目录下的redis-cli文件,-a指定登录密码、-p指定端口 )进行验证,

        1、cluster info(查看集群信息)、cluster nodes(查看节点列表)

        2、set的时候根据key的hash值分配到对应的redis节点    

关闭集群则需要逐个进行关闭,使用命令:
       /usr/local/redis-5.0.3/src/redis-cli -a redis -c -h 192.168.60.158 -p 6380 shutdown

下次启动集群直接将所有集群节点启动即可,不要再重新创建集群

Redis的集群选举:

       (1)、当master节点挂了以后,slave节点发现master节点的状态是fail时,广播FAILOVER_AUTH_REQUEST 给所有的节点,其他的节点收到消息后只有master节点返回FAILOVER_AUTH_ACK,当这个slave节点收到超过半数master的返回ack,则此slave节点变成master节点(所有redis集群最少需要3个master,如果只有两个master,其中一个挂了后另一个不能选举成功);

        (2)、从节点并不是在主节点一进入 FAIL 状态就马上尝试发起选举,而是有一定延迟,一定的延迟确保我们等待FAIL状态在集群中传播,slave如果立即尝试选举,其它masters或许尚未意识到FAIL状态,可能会拒绝投票;

        (3)、理论上持有最新数据的slave将会首先发起选举;

集群是否完整才能对外提供服务:
       当redis.conf的配置cluster-require-full-coverage为no时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群仍然可用,如果为yes则集群不可用。

       为no时,表示当前节点对应的插槽范围无法读写数据,其他节点及插槽可正常使用;

       为yes时,表示需要集群完整才能对外提供服务,所以此时所有master节点都将不可用;       
 

详细课件见附件03:链接:https://pan.baidu.com/s/1-HQdi5exXHr2vYDiXt72iQ?pwd=fj7j 

下面demo用两种方式访问redis集群,用的jdk8、idea、maven3.8.4:

       链接:https://pan.baidu.com/s/19roIZ6Iw1cQ6rJuUFfsFVg?pwd=nqaa 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值