Memcached管理与Redis

1 Memcached应用实战配置

在这里插入图片描述
环境规划
在这里插入图片描述
首先关闭防火墙,同步时间

systemctl stop firewalld
yum install ntp ntpdate -y     
ntpdate cn.pool.ntp.org    
hwclock --systohc

1.web 服务器配置
在192.168.74.151上安装软件,启动服务
检查http端口是否为80

vim /etc/httpd/conf/httpd.conf

在这里插入图片描述
安装数据库软件,如未安装请参考Centos安装mysql数据库

安装lnmp环境
yum install httpd php php-gb php-mysql php-memcache
启动apache服务
systemctl restart httpd
stemctl enable httpd
2.在mysql服务端创建用户(192.168.74.138)
mysql8.0中默认的身份认证插件是caching_sha2_password,替代了之前的mysql_navtive_password

create user 'memcache'@'%' identified by 'Nebula@123';
ALTER USER'memcache'@'%' IDENTIFIED WITH mysql_native_password BY 'Nebula@123';
flush privileges

检查mysql用户表中有刚才创建的用户信息
select user,host,plugin from mysql.user;
在这里插入图片描述
测试http功能

vim /var/www/html/index.html

在这里插入图片描述
在这里插入图片描述
测试PHP测试功能
vim /var/www/html/index.php

<?php phpinfo(); ?>

在这里插入图片描述
在这里可以发现php链接是正常的.接下来,我们来测试mysql
连接mysql使用MySQL服务端的IP地址,之前创建好的memcache用户名和对相应的密码,若连接正常,返回success,失败则返回fail!!

vim /var/www/html/mysql.php
<?php
$link=mysql_connect(‘192.168.74.138:3306','memcache',‘Nebula@123');
if($link);
else echo "Fail!!";
echo "<h1>Success!!</h1>";
mysql_close();
?>

在这里插入图片描述
通过测试,可见MySQL数据库是可以正常链接的。
如果数据库连接失败,可以查看

tail -f /var/log/httpd/error_log

错误日志进行改正
3.memcache 服务配置
yum安装
Linux系统安装memcached,首先要先安装依赖库。

yum install gcc gcc-c++ libevent-devel

安装memcahched

 yum install memcached

启动memcached
memcached -u root -p 11211 -vv
这里显示了调试信息。这样就在前台启动了memcached,监听TCP端口11211。调试信息的内容大部分是关于存储的信息。
Memcached 连接

telnet localhost 11211

在这里插入图片描述
测试web和memcache的连通性
修改客户端监听所有地址
注意:先杀死之前创建的memcached进程
在这里插入图片描述
memcached -d -l 0.0.0.0 -p 11211 -u root -m 64 -c 1024 -P /var/run/memcached.pid
在这里插入图片描述
Web服务器(192.168.74.151)做
代码测试
这里的IP地址为memcached端,和他的端口号

vim /var/www/html/memcache.php
<?php $memcache = new Memcache; $memcache->connect('192.168.74.150', 11211) or die ("Could not connect"); $version = $memcache->getVersion(); echo "Server's version: ".$version."
"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server"); echo "Store data in the cache (data will expire in 10 seconds)
"; $get_result = $memcache->get('key'); echo "Data from the cache:
"; var_dump($get_result); ?>

在这里插入图片描述
配置session(web端192.168.74.151)
vim /etc/php.ini
// 把这段放在最下面即可,IP地址为memcache端地址
session.save_handler = memcache
session.save_path =“tcp://192.168.74.150:11211?persistent=1&weight=1&timeout=1&retry_interval=15”
测试memcached的可用性
vim /var/www/html/memcached1.php

<?php session_start(); if (!isset($_SESSION['session_time'])) { $_SESSION['session_time'] = time(); } echo "session_time:".$_SESSION['session_time']."
"; echo "now_time:".time()."
"; echo "session_id:".session_id()."
"; ?>

在这里插入图片描述
在mysql端数据库节点(192.168.74.138)上创建测试数据库

 create database testab1;
use testab1;
create table test1(id int not null auto_increment,name varchar(20) default null,primary key(id)) engine=innodb auto_increment=1 default charset=utf8;
insert into test1(name) values ('tom1'),('tom2'),('tom3'),('tom4'),('tom5');

对memcache用户赋予库testab1的查看权限

 grant select on testab1.* to memcache@'%';

在这里插入图片描述
web端

<?php $*memcachehost = '192.168.74.150'; //memcached端地址* $memcacheport = 11211; $memcachelife = 60; $memcache = new Memcache; $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect"); $query="select * from test1 limit 10"; $key=md5($query); if(!$memcache->get($key)) { *$conn=mysql_connect("192.168.74.138","memcache",“Nebula@123"); //数据库节点,地址,用户,密码* mysql_select_db(testab1); $result=mysql_query($query); while ($row=mysql_fetch_assoc($result)) { $arr[]=$row; } $f = 'mysql'; $memcache->add($key,serialize($arr),0,30); $data = $arr ; } else{ $f = 'memcache'; $data_mem=$memcache->get($key); $data = unserialize($data_mem); } echo $f; echo "
"; echo "$key"; echo "
"; //print_r($data); foreach($data as $a) { echo "number is $a[id]"; echo "
"; echo "name is $a[name]"; echo "
"; } ?>

在这里插入图片描述

memcache监控

请参考文章memcached管理与监控web工具

2 Redis

在这里插入图片描述
Redis 是当前互联网世界最为流行的 NoSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。
Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。对于那些结构化、多范式规则的数据库系统而言,它更具性能优势。作为缓存,它可以支持大数据存入内存中,只要命中率高,它就能快速响应,因为在内存中的数据读/写比数据库读/写磁盘的速度快几十到上百倍。
redis 和 memcached 的区别
在这里插入图片描述
Redis安装
安装源码编译支持库:yum install gcc gcc-c++
下载包:wget https://download.redis.io/releases/redis-6.2.3.tar.gz
解压包:tar xzf redis-6.2.3.tar.gz
进入redis目录:cd redis-6.2.3
编译安装:make
启动redis
src/redis-server
启动警告的解决
在这里插入图片描述
在这里插入图片描述
启动 redis 服务进程后,就可以使用测试客户端程序 redis-cli 和 redis 服务交互了。 比如:
在这里插入图片描述
前端启动的关闭命令:
强制关闭:Ctrl+c
正常关闭:./redis-cli shutdown
强制关闭只需在Redis控制台直接执行即可(redis可能会丢失部分数据)。
正常关闭需要另开一个终端窗口才可执行(redis不会丢失数据,推荐使用)。
后端启动与停止
1)后端启动的配置
修改redis.conf文件,将daemonize的值改为yes后保存。
在这里插入图片描述
2) 后端启动的命令
src/redis-server redis.conf
3)后端启动的关闭命令
强制关闭:kill -9 进程id
正常关闭:src/redis-cli shutdown
Redis客户端
1)启动
src/redis-cli
2)关闭
ctrl+c
127.0.0.1:6379> quit
2、图形界面客户端(RedisDesktopManager)
1、修改redis文件夹下redis.conf文件,在bind 127.0.0.1行前面加#注释掉这一行,使能远程连接(默认只能使用本地连接)。在这里插入图片描述
2、执行命令 ps -ef|grep redis 杀掉redis-server进程。
在这里插入图片描述
3、在redis目录下执行 src/redis-server redis.conf 用redis.conf设置的参数重启redis-server服务。
在这里插入图片描述
4、命令行执行src/redis-cli 进入redis命令行,执行config set requirepass 123456 也可以设置为其他
在这里插入图片描述
5、在RedisDesktopManager客户端输入用户名、密码、服务器地址、端口连接服务器,点击测试连接。
在这里插入图片描述
在这里插入图片描述

redis服务器环境下mysql实现la/nmp架构缓存

在这里插入图片描述
场景实例搭建:(基于Memcached实例基础搭建)
在这里插入图片描述
关闭防火墙:在这里插入图片描述
同步时间:
在这里插入图片描述
1、PHP安装(web端):
yum install php php-fpm php-cli php-common php-gd php-mbstring php-mysql php-pdo php-devel php-xmlrpc php-xml php-bcmath php-dba php-enchant
在这里插入图片描述
安装gcc依赖
yum install gcc gcc-c++ libevent-devel

安装php的redis扩展(web服务器)
wget http://pecl.php.net/get/redis-2.2.7.tgz
tar -zxvf redis-2.2.7.tgz
cd redis-2.2.7/
phpize
./configure
make install
编译完成后可以看到安装的目录如下,进入后可以看到编译的模块redis.so
在这里插入图片描述

vim修改/etc/php.ini,添加redis的扩展

extension=redis.so
在这里插入图片描述
重启web服务器的httpd服务

systemctl  restart httpd

在httpd的发布目录下编辑如下php页面,然后访问
在这里插入图片描述
最后查看phpinfo,显示如下,代表安装成功:
在这里插入图片描述

2.安装redis(192.168.74.150)
wget -c -t 0 http://download.redis.io/releases/redis-2.8.19.tar.gz
tar xvf redis-2.8.19.tar.gz
#安装很简单、直接make就可以了
cd redis-2.8.19
make在这里插入图片描述
启动redis
修改redis.con将daemonize no改为yes
在这里插入图片描述
启动redis
src/redis-server redis.conf
动如果没有报错,则配置正确
查看进程

ps -ef | grep redis

在这里插入图片描述
编写php的测试代码(web端)

vim /var/www/html/redis.php
<?php $redis = new Redis(); $redis->connect('192.168.42.30',6379) or die ("could net connect redis server"); $query = “select * from dog limit 8”; //红色代表这里是你的数据库里的表名 //为了简单一点,这里就读取了8条数据 for ($key = 1; $key < 9; $key++) { if (!$redis->get($key)) { $connect = mysql_connect('192.168.42.28','root','Nebula@123'); mysql_select_db(mytest); //红色这里是你的数据库名 $result = mysql_query($query); //如果没有找到$key,就将该查询sql的结果缓存到redis while ($row = mysql_fetch_assoc($result)) { $redis->set($row['id'],$row['name']); } $myserver = 'mysql'; break; } else { $myserver = "redis"; $data[$key] = $redis->get($key); } } echo $myserver; echo "
"; for ($key = 1; $key < 9; $key++) { echo "number is $key"; echo "
"; echo "name is $data[$key]"; echo "
"; } ?>

在这里插入图片描述
测试验证
第一次访问,redis中没有对应的KEY时
在这里插入图片描述
刷新,再次访问时
在这里插入图片描述

redis持久化和订阅

Redis持久化分为RDB持久化和AOF持久化:前者将当前数据保存到硬盘,后者则是将每次执行的写命令保存到硬盘(类似于MySQL的binlog);由于AOF持久化的实时性更好,即当进程意外退出时丢失的数据更少,因此AOF是目前主流的持久化方式,不过RDB持久化仍然有其用武之地。

RDB持久化
是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),保存的文件后缀是rdb,默认的文件名为dump.rdb。当Redis重新启动时,可以读取快照文件恢复数据。
1.触发条件
手动触发
bgsave命令可以生成RDB文件
自动触发
自动触发最常见的情况是在配置文件中通过save m n,指定当m秒内发生n次变化时,会触发bgsave。
例如,查看redis的默认配置文件(Linux下为redis根目录下的redis.conf),可以看到如下配置信息:
在这里插入图片描述
其中save 900 1的含义是:
当时间到900秒时,如果redis数据发
生了至少1次变化,则执行bgsave;
save 300 10和save 60 10000同理。
当三个save条件满足任意一个时,
都会引起bgsave的调用。
2.RDB备份恢复
此案例使用bgsave命令触发
在这里插入图片描述
在这里插入图片描述
灾难备份
在这里插入图片描述

使用flushall命令释放数据
在这里插入图片描述
数据恢复
先停止服务,可使用kill或pkill命令
在这里插入图片描述
将备份文件恢复回来
在这里插入图片描述
重新启动服务,并进行验证,发现数据又有了,至此我们使用RDB方式备份恢复成功
在这里插入图片描述
配置文件恢复参考此博客
AOF
全称是Append Only File,是 redis 记录执行指令的日志文件。
在这里插入图片描述
三种触发机制
(1)每修改同步always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
(2)每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失
(3)不同no:从不同步
AOF备份恢复
因为配置文件默认备份方式是RDB,所以如果想以AOF方式备份,需要开启appendonly参数,将
no改为yes。演示使用默认的触发机制everysec。
在这里插入图片描述
修改后重新启动服务,会产生一个空的aof文件,这是因为之前都是采用rdb方式的,使用这种方式还没有数据
在这里插入图片描述
构造数据在这里插入图片描述
发现文件增大在这里插入图片描述
备份并清空数据
在这里插入图片描述
停止服务

pkill redis

恢复备份数据
在这里插入图片描述

Redis 发布订阅

在这里插入图片描述
在这里插入图片描述
实例中我们创建了订阅频道名为 redisChat:
在这里插入图片描述
现在,我们先重新开启个 redis 客户端,然后在同一个频道 redisChat 发布两次消息,订阅者就能接收到消息。
在这里插入图片描述
Redis主从复制
在这里插入图片描述
准备三台服务器
192.168.74.138 为主服务器
192.168.74.150 为从服务器
192.168.74.151 为从服务器

一、安装redis
参考前文
二、配置主服务器

 cd redis-6.2.3/
 vim redis.conf

将bind 127.0.0.1这行注释或者指定ip
在这里插入图片描述
关闭守护进程
在这里插入图片描述

设置访问密码(由于redis性能非常高,撞库风险极大,建议线上把密码设置非常复杂,最好能在第2步中指定ip)。
在这里插入图片描述
三、配置从服务器
前四步与主服务器配置基本一致
配置所属主服务器ip和端口
在这里插入图片描述
配置所属主服务器的密码
在这里插入图片描述
需要注意的是,从服务器通常是只读,所以要配置只读(默认是只读,不要更改即可
四、测试
进入主服务器(192.168.42.28)
进入redis客户端,由于设置了密码,所以需要鉴权
在这里插入图片描述
设置一个值
在这里插入图片描述
进入从服务器
用get命令获取name的值
在这里插入图片描述

主从复制

环境准备
192.168.74.138 为主服务器(master)
192.168.74.150 为从服务器(slave)
192.168.74.151为从服务器(slave)

一、安装redis
首先给服务器分别安装redis,过程可参考前文
二、配置主服务器
1、进入192.168.42.28服务器,打开redis配置文件。

cd redis-6.2.3/
vim redis.conf

2、将bind 127.0.0.1这行注释或者指定ip
设置访问密码(由于redis性能非常高,撞库风险极大,建议线上把密码设置非常复杂,最好能在第2步中指定ip)。
在这里插入图片描述

在这里插入图片描述
3、开启守护进程

 daemonize yes

在这里插入图片描述
至此主服务器配置完毕!
启动redis服务

 ./src/redis-server redis.conf

三、配置从服务器
前四步与主服务器配置基本一致
5、配置所属主服务器ip和端口
6、配置所属主服务器的密码
在这里插入图片描述
配置完成,启动服务
四、测试
1、进入主服务器在这里插入图片描述
2、进入从服务器
使用get命令获取name的值,可以看到
在这里插入图片描述
如果在从服务器上写,则会报错,如下图在这里插入图片描述
至此,redis主从复制配置完成

哨兵模式

在这里插入图片描述
环境准备
在这里插入图片描述
1、三个节点修改哨兵配置文件sentinel.conf

 cd redis-6.2.3/
 vim sentinel.conf

在这里插入图片描述
scp拷贝到其他两台从机上

scp sentlnel.conf 192.168.74.150:/root/redis-6.2.3/
scp sentlnel.conf 192.168.74.151:/root/redis-6.2.3/

将server1上配好的sentinel文件发送给server2和server3,一定要在server1开启sentinel之前。这是因为sentinel是一个动态的服务。

2、在server1/2/3开启服务sentinel
启动redis服务(先主机后从机)
启动sentinel(先主机后从机)
cd /root/redis-6.2.3
src/redis-server sentinel.conf --sentinel在这里插入图片描述
提示socket连接数设置的太低了,需要修改后重启服务就不会有警告提示了

echo 1024 > /proc/sys/net/core/somaxconn

搭建好哨兵之后,哨兵一启动,过了几秒就会判断master sdown
在这里插入图片描述
原因是没有设置节点认证的密码,也就是我的redis设置了节点通信的密码,那么在哨兵里面也是需要配置的。
在这里插入图片描述
主节点可以查看到如下信息,slave两个节点已经加入
在这里插入图片描述
3、在server1上查看master信息

redis-cli
info

在这里插入图片描述

4、模拟server1(Master)宕机故障,进行测试:

 shutdown

此时我们,在server2上,可以看到订阅的消息:在这里插入图片描述
备Redis(server3)上:在这里插入图片描述
我们可以看到server3变为master。
5、我们再将server1的redis恢复,重新加入主从复制

 src/redis-server redis.conf

此时,在server1上,我们可以看到,server1重新上线后,是server3(192.168.42.30)的备机。
在这里插入图片描述
在server1上:Redis的配置文件自动添加了最后一行,表明server1是server3的slave
在这里插入图片描述
哨兵配置文件最后自动添加了,sentinel监控状况
在server2上:
在这里插入图片描述

在这里插入图片描述

集群模式

cluster可以说是sentinel和主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。
cluster集群特点:
多个redis节点网络互联,数据共享
所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用
不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上, 并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为
支持在线增加、删除节点
客户端可以连接任何一个主节点进行读写
1、集群的作用
(1)数据分区:数据分区(或称数据分片)是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

(2)高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。
2、集群的数据分片
1、Redis集群的数据分片:
Redis集群引入了哈希槽的概念
Redis集群有16384个哈希槽( 编号0-16383)
集群的每个节点负责一部分哈希槽
每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
2、以3个节点组成的集群为例:
节点A包含0到5460号哈希槽
节点B包含5461到10922号哈希槽
节点C包含10923到16383号哈希槽
3、Redis集群的主从复制模型
集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1 都失败后,集群将不可用。
3、群集模式的搭建
在这里插入图片描述
修改配置文件:

cp /root/redis-6.2.3/redis.conf /root/redis-6.2.3/redis_7001.conf
cp /root/redis-6.2.3/redis.conf /root/redis-6.2.3/redis_7002.conf
mdir -p /var/log/redis/cluster
mkdir -p /root/redis-6.2.3/cluster/{redis_7001,redis_7002}

以下是要手动修改或添加的,其他配置不需要修改

 vim redis_7001.conf

bind 192.168.74.151
port 7001
daemonize yes
pidfile “/var/run/redis_7001.pid”
logfile “/var/log/redis/cluster/redis_7001.log”
dir “/root/redis-6.2.3/cluster/redis_7001”
masterauth “123456”
requirepass “123456”
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 15000

vim redis_7002.conf

bind 192.168.74.151
port 7002
daemonize yes
pidfile “/var/run/redis_7002.pid”
logfile “/var/log/redis/cluster/redis_7002.log”
dir /root/redis-6.2.3/cluster/redis_7002"
masterauth “123456”
requirepass “123456”
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7002.conf
cluster-node-timeout 15000
在这里插入图片描述
其它两台机器配置与192.168.74.151一致,参照上面
启动redis服务

./src/redis-server redis_7001.conf
tail -f /var/log/redis/cluster/redis_7001.log
src/redis-server redis_7002.conf
tail -f /var/log/redis/cluster/redis_7002.log

其它两台机器启动与192.168.42.28一致
在这里插入图片描述

  echo 1024 > /proc/sys/net/core/somaxconn

再次重新登陆即可
创建集群

src/redis-cli -a 123456 --cluster create 192.168.74.151:7001 192.168.74.151:7002 192.168.74.138:7003192.168.74.138:7004 192.168.74.151:7005 192.168.74.151:7006 --cluster-replicas 1

手动输入yes,接受上面的配置
在这里插入图片描述

 cd redis-6.2.3/cluster/redis_7001/
 ll

在这里插入图片描述
vim /root/redis/cluster/redis_7001/nodes-7001.conf
在这里插入图片描述
集群操作
登录集群:

./src/redis-cli -c -h 192.168.74.151 -p 7001 -a 123456                  # -c,使用集群方式登录
  
 cluster info 

在这里插入图片描述列出节点信息:

cluster nodes

在这里插入图片描述
写入数据
在这里插入图片描述
在这里插入图片描述
可以看出redis cluster集群是去中心化的,每个节点都是平等的,连接哪个节点都可以获取和设置数据。
当然,平等指的是master节点,因为slave节点根本不提供服务,只是作为对应master节点的一个备份。

增加节点
192.168.74.138上增加一节点(7007)

cp /root/redis-6.2.3/redis_7003.conf /root/redis-6.2.3/redis_7007.conf
vim /root/redis-6.2.3/redis_7007.conf

bind 192.168.74.138
port 7007
daemonize yes
pidfile "/var/run/redis_7007.pid“
logfile "/usr/local/redis/cluster/redis_7007.log“
dir "/data/redis/cluster/redis_7007“
#replicaof 192.168.74.151 6379
masterauth "123456“
requirepass "123456“
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7007.conf
cluster-node-timeout 15000

mkdir /root/redis-6.2.3/cluster/redis_7007
./src/redis-server redis_7007.conf

192.168.74.150上增加一节点

cp /root/redis-6.2.3/redis_7005.conf /root/redis-6.2.3/redis_7008.conf
vim /root/redis-6.2.3/redis_7008.conf

bind 192.168.74.150
port 7008
daemonize yes
pidfile "/var/run/redis_7008.pid“
logfile "/usr/local/redis/cluster/redis_7008.log“
dir "/data/redis/cluster/redis_7008“
masterauth "123456“
requirepass "123456“
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7008.conf
cluster-node-timeout 15000

mkdir /root/redis-6.2.3/cluster/redis_7008
./src/redis-server redis_7008.conf

集群中增加节点:

192.168.74.138:7003> cluster meet 192.168.74.150 7008
192.168.74.138:7003> cluster nodes

在这里插入图片描述在这里插入图片描述
可以看到,新增的节点都是以master身份加入集群的
更换节点身份
将新增的192.168.42.30:7008节点身份改为192.168.42.29:7007的slave

./src/redis-cli -c -h 192.168.74.150 -p 7008  -a 123456 cluster replicate 22097f46f8740176f93570001f9132cbab9bbdbc

在这里插入图片描述
查看相应的nodes.conf文件,可以发现有更改,它记录当前集群的节点信息
cat /root/redis/cluster/redis_7001/nodes_7001.conf
在这里插入图片描述
删除节点:

CLUSTER FORGET
CLUSTER NODES

保存配置:
CLUSTER SAVECONFIG
模拟master节点挂掉
在这里插入图片描述
在这里插入图片描述

     CLUSTER NODES

在这里插入图片描述
重新启动7001节点

./src/redis-server redis_7001.conf
CLUSTER NODES

在这里插入图片描述
可以看到,7001节点启动后为slave节点,并且是7004的slave节点。即master节点如果挂掉,它的slave节点变为新master节点继续对外提供服务,
而原来的master节点如果重启,则变为新master节点的slave节点。
另外,如果这里是拿7007节点做测试的话,会发现7008节点并不会切换,这是因为7007节点上根本没数据。集群数据被分为三份,采用哈希槽 (hash slot)的方式来分配16384个slot的话,它们三个节点分别承担的slot 区间是
节点7004覆盖0-5460
节点7003覆盖5461-10922
节点7005覆盖10923-16383

缓存穿透、击穿、雪崩、预热、更新、降级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值