Memcached&Redis构建缓存服务器 (主从,持久化,哨兵)

memcached

1、特点

1.内置内存存储方式-----------为了提高性能,memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中,重启操作系统会导致全部数据消失
2.简单key/value存储---------------服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由"键、过期时间、可选的标志及数据"四个部分组成;
3.不互相通信的分布式 ------------- memcached尽管是"分布式"缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。

服务框架

原理

1、检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作,路径操作为①②③⑦。 2、如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),路径操作为①②④⑤⑦⑥。

3.保持缓存的"新鲜性",每当数据发生变化的时候(比如,数据有被修改,或被删除的情况下),要同步的更新缓存信息,确保用户不会在缓存取到旧的数据。

配置安装memcached

memcached能存放多少数据,取决于服务器本身的内存有多大。

复制代码
1.安装----准备一台服务器
[root@memcached ~]# yum install memcached -y
[root@memcached ~]# systemctl start memcached  #启动
2.修改配置文件
[root@memcached ~]# cat /etc/sysconfig/memcached 
PORT="11211"  # 监听端口
USER="memcached"  # 用户
MAXCONN="1024"    # 最大并发数
CACHESIZE="64"    # 分配内存大小
OPTIONS=""        # 监听网络地址
然后把ip地址发给开发人员,开发的会使用api接口连接memcached.
测试:
[root@memcached ~]# yum install -y telnet   #安装telent
[root@memcached ~]# telnet 192.168.246.188 11211
Trying 192.168.246.188...
Connected to 192.168.246.188.
Escape character is '^]'.
set name 0 60 7    #设置名称为name的key
newrain        #给name的值
STORED         #出现stored表示已经存储成功。
get name       #查询key值
VALUE name 0 7
newrain
END
参数解释:
name:key的名字 自己定义
0:key的id号,需要和其他的key不一样
60:缓存过期时间,单位为秒,0为永远
7:字符串最大长度

Redis服务

介绍

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库

redis的官网:redis.io 注:域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地

redis特点

1.丰富的数据结构 -----string,list,set,zset,hash等数据结构的存储

2.支持持久化

3.支持事务 ---------------事务是指"一个完整的动作,要么全部执行,要么什么也没有做"。

4.支持主从

缓存

二.缓存

1.类型

1).数据缓存

2).页面缓存(Smarty)

在开发网站的时候如果有一些数据在短时间之内不会发生变化,而它们还要被频繁访问,为了提高用户的请求速度和降低网站的负载,就把这些数据放到一个读取速度更快的介质上(或者是通过较少的计算量就可以获得该数据) ,该行为就称作对该数据的缓存。

该介质可以是文件、数据库、内存,内存经常用于数据缓存

2.形式

页面缓存经常用在内存管理系统里边

数据缓存经常用在页面的具体数据里边

redis和memcache比较

1).Redis不仅仅支持简单的k/v类型的数据,同时还提供了list,set,zset,hash等数据结构的存储

2).Redis支持master-slave(主-从)模式应用

3).Redis支持数据的持久化

安装redis

安装单机版redis

复制代码
创建工作目录
mkdir -p /data/application

下载redis
 wget http://download.redis.io/releases/redis-5.0.10.tar.gz 

解压
tar xzf redis-5.0.10.tar.gz -C /data/application/   

改名
cd /data/application/
mv redis-5.0.10/ redis

cd redis
安装编译工具
yum -y insatll make gcc


[root@redis-master redis]# make
注:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。

修改redis的配置文件

复制代码
cp redis.conf redis.conf.bak

 vim redis.conf 

修改如下
bind 192.168.231.185  #只监听内网IP,可以连接哪个IP
daemonize yes     #开启后台模式将on改为yes
timeout 300      #连接超时时间
port 6379                      #端口号
dir /data/application/redis/data  #本地数据库存放持久化数据的目录该目录-----需要存在
pidfile /var/run/redis_6379.pid  #定义pid文件
logfile /var/log/redis.log  #定义log文件

创建存放数据的目录
# mkdir /data/application/redis/data

配置redis为systemctl启动

复制代码
[root@redis-master redis]# cd /lib/systemd/system
[root@redis-master system]# vim redis.service
[Unit]
Description=Redis
After=network.target

[Service]
ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf  --daemonize no
ExecStop=/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown

[Install]
WantedBy=multi-user.target

参数详解:

Unit 表示这是基础信息

• Description 是描述

• After 是在那个服务后面启动,一般是网络服务启动后启动

Service 表示这里是服务信息

• ExecStart 是启动服务的命令

• ExecStop 是停止服务的指令

Install 表示这是是安装相关信息

• WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行

启动服务:

复制代码
[root@redis-master system]# systemctl daemon-reload
[root@redis-master system]# systemctl start redis.service

制作软链接

复制代码
ln -s /data/application/redis/src/redis-cli /usr/bin/redis-cli

登录redis

复制代码
[root@redis-master system]# cd /data/application/redis/src/
[root@redis-master src]# ./redis-cli -h 192.168.246.202 -p 6379
192.168.246.202:6379> ping     ---测试redis是否可以用
PONG
192.168.246.202:6379> set name newrain    #设置key--name,并设置值
OK
192.168.246.202:6379> get name    #获取到key
"newrain"
192.168.246.202:6379>
单机版redis已经部署完成。将ip和端口发给开发就可以了。

redis数据持久化

开启持久化功能后,重启redis,数据会自动通过持久化文件恢复!!

持久化俩种方式

一、redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。

RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;

特点:

1.周期性

2.不影响数据写入 #RDB会启动子进程,备份所有数据。当前进程,继续提供数据的读写。当备份完成,才替换老的备份文件。

3.高效 #一次性还原所有数据

4.完整性较差 #故障点到上一次备份,之间的数据无法恢复。

====================================================================================

AOF(Append Only File)则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

特点:

1.实时性

2.完整性较好

3.体积大 #记录数据的指令,删除数据的指令都会被记录下来。

====================================================================================

二、RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。

如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。

三、如何选择方式?

缓存:不用开启任何持久方式

双开:因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。

redis持久化 -- 如何选择RDB和AOF

对于我们应该选择RDB还是AOF,官方的建议是两个同时使用。这样可以提供更可靠的持久化方案。

写入速度快 ------------AOF

写入速度慢 ------------RDB

持久化配置

复制代码
1、RDB默认开启:
[root@redis-master src]# cd ..
[root@redis-master redis]# vim redis.conf
#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb
#dir:持久化数据存储在本地的路径
dir /data/application/redis/data
##snapshot触发的时机,save <seconds> <changes>  
##如下为900秒后,至少有一个变更操作,才会snapshot  
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度  
##可以通过"save ""来关闭snapshot功能  
#save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
save 900 1
save 300 10
save 60 10000
##当snapshot时出现错误无法继续时,是否阻塞客户端"变更操作","错误"可能因为磁盘已满/磁盘故障/OS级别异常等  
stop-writes-on-bgsave-error yes  
##是否启用rdb文件压缩,默认为"yes",压缩往往意味着"额外的cpu消耗",同时也意味这较小的文件尺寸以及较短的网络传输时间  
rdbcompression yes 

2、客户端使用命令进行持久化save存储:
方式一
[root@redis-master src]# ./redis-cli -h 192.168.246.202 -p 6379 save   #前台进行存储
OK
方式二
./redis-cli -h ip -p port bgsave  #后台进行存储
注意:每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步新数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能。
save方式:持久化前面的所有数据(rdb模式没开时,后续的数据不会进行备份)


3、AOF默认关闭--开启
[root@redis-master src]# cd ..
[root@redis-master redis]# vim redis.conf
修改如下:

1、此选项为aof功能的开关,默认为"no",可以通过"yes"来开启aof功能,只有在"yes"下,aof重写/文件同步等特性才会生效

2、指定aof文件名称

appendfilename appendonly.aof

3、指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec

appendfsync everysec

4、在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示"不暂缓","yes"表示"暂缓",默认为"no"

no-appendfsync-on-rewrite no

5、触发aof rewrite的最小文件尺寸

auto-aof-rewrite-min-size 64mb

6、当Aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。

auto-aof-rewrite-percentage 100 修改完配置文件后重启生效

redis做一机多实例

复制代码
在/data/application 下有redis
直接
cp -rf redis redis1

cp -rf redis redis2

[root@111 application]# ls
redis  redis1  redis2

修改配置文件

复制代码
[root@111 application]# vim redis1/redis.conf
修改4个  端口,日志,pid,持久化文件名字 


port 6380

pidfile /var/run/redis_6380.pid

logfile  /var/log/redis80.log

dbfilename dump80.rdb

appendfilename "appendonly80.aof"

修改完重启生效

复制代码
cd /data/application

redis-server redis1/redis.conf

如果显示redis-server  no found
那么设置软链接

[root@111 ~]# ln -s /data/application/redis/src/redis-server  /usr/bin
 即可


重载配置文件
[root@111 application]# redis-server redis/redis.conf
[root@111 application]# redis-server redis1/redis.conf
[root@111 application]# redis-server redis2/redis.conf

端口

复制代码
[root@111 application]# netstat -nplt | grep redis
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      1373/redis-server 0 
tcp        0      0 0.0.0.0:6380            0.0.0.0:*               LISTEN      1383/redis-server 0 
tcp        0      0 0.0.0.0:6381            0.0.0.0:*               LISTEN      1390/redis-server 0 

基于一机多实例做redis主从配置

主从同步原理

从服务器会向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。

在BGSAVE指令执行完成后,主服务器会将持久化好的RDB文件发送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后再将其读取到内存中。这个动作完成后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。

另外,要说的一点是,即使有多个从服务器同时发来SYNC指令,主服务器也只会执行一次BGSAVE,然后把持久化好的RDB文件发给多个下游。在redis2.8版本之前,如果从服务器与主服务器因某些原因断开连接的话,都会进行一次主从之间的全量的数据同步;而在2.8版本之后,redis支持了效率更高的增量同步策略,这大大降低了连接断开的恢复成本。

主服务器会在内存中维护一个缓冲区,缓冲区中存储着将要发给从服务器的内容。从服务器在与主服务器出现网络瞬断之后,从服务器会尝试再次与主服务器连接,一旦连接成功,从服务器就会把"希望同步的主服务器ID"和"希望请求的数据的偏移位置(replication offset)"发送出去。主服务器接收到这样的同步请求后,首先会验证主服务器ID是否和自己的ID匹配,其次会检查"请求的偏移位置"是否存在于自己的缓冲区中,如果两者都满足的话,主服务器就会向从服务器发送增量内容。

增量同步功能,需要服务器端支持全新的PSYNC指令。这个指令,只有在redis-2.8之后才具有。

主从用法

像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构。 主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担。 redis的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会降低redis的处理性能。 主从架构中,可以考虑关闭主服务器的数据持久化功能,只让从服务器进行持久化,这样可以提高主服务器的处理性能。 在主从架构中,从服务器通常被设置为只读模式,这样可以避免从服务器的数据被误修改。但是从服务器仍然可以接受CONFIG等指令,所以还是不应该将从服务器直接暴露到不安全的网络环境中。

部署主从

我们现在有reids redis1 redis2 端口分别为6379 6380 6381

我们将端口6379设置为主

多级从结构

由于6379是主,因此不需要修改配置文件,修改6380的配置文件

复制代码
vim /data/application/redis1/redis.conf


# Master-Replica replication. Use replicaof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
#
# 1) Redis replication is asynchronous, but you can configure a master to
#    stop accepting writes if it appears to be not connected with at least
#    a given number of replicas.
# 2) Redis replicas are able to perform a partial resynchronization with the
#    master if the replication link is lost for a relatively small amount of
#    time. You may want to configure the replication backlog size (see the next
#    sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
#    network partition replicas automatically try to reconnect to masters
#    and resynchronize with them.
#
 replicaof  192.168.231.185 6379   第一个是主的ip,第二个是主的端口

让配置文件生效

[root@111 application]# ps aux | grep redis
root       1373  0.1  0.6 161672 13968 ?        Ssl  16:26   0:11 /data/application/redis/src/redis-server 0.0.0.0:6379
root       1383  0.1  0.6 167304 13128 ?        Ssl  16:26   0:13 redis-server 0.0.0.0:6380
root       1390  0.1  0.7 169864 14540 ?        Ssl  16:26   0:12 redis-server 0.0.0.0:6381
root       1820  0.0  0.0 112824   980 pts/0    R+   19:06   0:00 grep --color=auto redis
[root@111 application]# pkill -9 1383
[root@111 application]# redis-server redis1/redis.conf
查看主从

查看主从状态的语法:info replication

复制代码
[root@111 application]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1     ####6379是主,他有一个从 端口是6380
slave0:ip=192.168.231.185,port=6380,state=online,offset=14212,lag=0
master_replid:b88559b650a04c2e83e16aac80d64c52b283c39e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14212
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14212

[root@111 application]# redis-cli -p 6380
127.0.0.1:6380> ping
PONG
127.0.0.1:6380> info replication  ###查看主从状态
# Replication
role:slave
master_host:192.168.231.185   #主是185,因为是基于一台redis做的多实例
master_port:6379              #主的端口是6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:13596
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=192.168.231.185,port=6381,state=online,offset=13596,lag=0
master_replid:b88559b650a04c2e83e16aac80d64c52b283c39e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:13596
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:13596

将6381作为6380的从,那么6380就是6381的主

修改6381的配置文件

复制代码
[root@111 application]# vim redis2/redis.conf


#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
#
# 1) Redis replication is asynchronous, but you can configure a master to
#    stop accepting writes if it appears to be not connected with at least
#    a given number of replicas.
# 2) Redis replicas are able to perform a partial resynchronization with the
#    master if the replication link is lost for a relatively small amount of
#    time. You may want to configure the replication backlog size (see the next
#    sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
#    network partition replicas automatically try to reconnect to masters
#    and resynchronize with them.
#
 replicaof 192.168.231.185 6380    ------主ip  主端口


让配置文件生效

[root@111 application]# ps aux | grep redis
root       1373  0.1  0.6 161672 13968 ?        Ssl  16:26   0:11 /data/application/redis/src/redis-server 0.0.0.0:6379
root       1383  0.1  0.6 167304 13128 ?        Ssl  16:26   0:13 redis-server 0.0.0.0:6380
root       1390  0.1  0.7 169864 14540 ?        Ssl  16:26   0:12 redis-server 0.0.0.0:6381
root       1820  0.0  0.0 112824   980 pts/0    R+   19:06   0:00 grep --color=auto redis
[root@111 application]# pkill -9 1383
[root@111 application]# redis-server redis1/redis.conf

查看主从状态

复制代码
[root@111 application]# redis-cli -p 6381
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:192.168.231.185
master_port:6380        #######6381的主是6380
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:13946
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b88559b650a04c2e83e16aac80d64c52b283c39e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:13946
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:13946

这是多级从结构就是 6379(主) <------ 6380(从 (主)) <------6381(从)

6379是6380的主,6380是6381的主,但是6379发生改变6380 6381都会发生改变

一主多从

上面实验设置了6380是6381的主,那么一主多从是只能有一个主,也就是6381的主 也必须是6379

修改6381的配置文件

复制代码
[root@111 application]# vim redis2/redis.conf

#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
#
# 1) Redis replication is asynchronous, but you can configure a master to
#    stop accepting writes if it appears to be not connected with at least
#    a given number of replicas.
# 2) Redis replicas are able to perform a partial resynchronization with the
#    master if the replication link is lost for a relatively small amount of
#    time. You may want to configure the replication backlog size (see the next
#    sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
#    network partition replicas automatically try to reconnect to masters
#    and resynchronize with them.
#
 replicaof 192.168.231.185 6379


让配置文件生效
[root@111 application]# ps aux | grep redis
root       1373  0.1  0.7 161672 14292 ?        Ssl  16:26   0:12 /data/application/redis/src/redis-server 0.0.0.0:6379
root       1383  0.1  0.6 167304 13576 ?        Ssl  16:26   0:14 redis-server 0.0.0.0:6380
root       1390  0.1  0.7 169864 15204 ?        Ssl  16:26   0:13 redis-server 0.0.0.0:6381
root       1855  0.0  0.0 112824   980 pts/0    R+   19:19   0:00 grep --color=auto redis
[root@111 application]# pkill -9 1390
[root@111 application]# redis-server redis2/redis.conf
查看主从状态

查看6381的主从

复制代码
[root@111 application]# redis-server redis1/redis.conf
[root@111 application]# redis-cli -p 6381
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:192.168.231.185
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:3173f2d4271fb6939352f9bdfbe1be043b2a8a04
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

查看6379的主从

复制代码
[root@111 application]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2      ###80 81是6379的从
slave0:ip=192.168.231.185,port=6381,state=online,offset=56,lag=1
slave1:ip=192.168.231.185,port=6380,state=online,offset=56,lag=1
master_replid:3173f2d4271fb6939352f9bdfbe1be043b2a8a04
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

要是修改完没有生效,可以查看redis的进程号,然后pkill -9,最后启动redis,

redis-server redis/redis.conf 再次查看即可

哨兵模式

1、哨兵简介:Redis Sentinel

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中是Redis官方推荐的高可用性(HA)解决方案。

2、作用

1):Master状态检测 2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave 3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

3、工作模式

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令

2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。

3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线

4、主观下线和客观下线

主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。 客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover

配置哨兵

主:192.168.231.190

从1:192.168.231.183

从2:192.168.231.191

修改主的哨兵配置文件

复制代码
[root@localhost redis]# pwd
/data/application/redis
[root@localhost redis]# vim sentinel.conf 


sentinel monitor mymaster 192.168.231.183 6379 2  
 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)

logfile "/var/log/redis.log"   创建日志

protected-mode no  #关闭加密模式--新添加到sentinel配置文件中

配置俩从的哨兵配置文件

复制代码
俩台从库相同的操作

[root@localhost redis]# pwd
/data/application/redis
[root@localhost redis]# vim sentinel.conf 


sentinel monitor mymaster 192.168.231.183 6379 2 
#当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)

protected-mode no  #关闭加密模式--新添加到sentinel配置文件中

启动三台服务器的哨兵

复制代码
cd /data/application/redis 

 ./src/redis-sentinel   sentinel.conf 

注意:在生产环境下将哨兵模式启动放到后台执行: ./src/redis-sentinel sentinel.conf &

这时候停掉master的redis

复制代码
 systemctl stop redis

查看从库的主从状态

复制代码
[root@localhost redis]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.231.191,port=6379,state=online,offset=183685,lag=0
master_replid:3ff2f327fca5aa6e8415dc61487ace517f37bbd2
master_replid2:bd11b688254201e526802e50f70f12d34fd05412
master_repl_offset:183685
second_repl_offset:15667
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:393
repl_backlog_histlen:183293
127.0.0.1:6379> 



之前190是主,183 191是从,现在停掉190,在哨兵模式下 183成了主

查看被停掉192.168.231.190的日志

复制代码
[root@localhost redis]# tailf /var/log/redis.log 

5798:X 06 Nov 2023 21:34:27.801 # +switch-master mymaster 192.168.231.190 6379 192.168.231.191 6379
5798:X 06 Nov 2023 21:34:27.801 * +slave slave 192.168.231.183:6379 192.168.231.183 6379 @ mymaster 192.168.231.191 6379
5798:X 06 Nov 2023 21:34:27.801 * +slave slave 192.168.231.190:6379 192.168.231.190 6379 @ mymaster 192.168.231.191 6379
5798:X 06 Nov 2023 21:34:28.119 # +new-epoch 2
5798:X 06 Nov 2023 21:34:28.120 # +vote-for-leader 813f4a385c89c36203f637cea53c26f11da46048 2
5798:X 06 Nov 2023 21:34:28.921 # +config-update-from sentinel 813f4a385c89c36203f637cea53c26f11da46048 192.168.231.191 26379 @ mymaster 192.168.231.191 6379
5798:X 06 Nov 2023 21:34:28.921 # +switch-master mymaster 192.168.231.191 6379 192.168.231.183 6379
5798:X 06 Nov 2023 21:34:28.922 * +slave slave 192.168.231.190:6379 192.168.231.190 6379 @ mymaster 192.168.231.183 6379
5798:X 06 Nov 2023 21:34:28.922 * +slave slave 192.168.231.191:6379 192.168.231.191 6379 @ mymaster 192.168.231.183 6379
5798:X 06 Nov 2023 21:34:31.956 # +sdown slave 192.168.231.190:6379 192.168.231.190 6379 @ mymaster 192.168.231.183 6379

查看192.168.231.190的哨兵配置文件

复制代码
[root@localhost ~]# cd /data/application/redis/
[root@localhost redis]# vim  sentinel.conf 


#
# SENTINEL rename-command mymaster CONFIG CONFIG
# Generated by CONFIG REWRITE
protected-mode no
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2
sentinel known-replica mymaster 192.168.231.190 6379
sentinel known-replica mymaster 192.168.231.191 6379
sentinel known-sentinel mymaster 192.168.231.191 26379 813f4a385c89c36203f637cea53c26f11da46048
sentinel known-sentinel mymaster 192.168.231.183 26379 1c5fb75fa5974310868e726d0576e7c40d9c536b
sentinel current-epoch 2
"sentinel.conf" 253L, 10191C   

最底下生成信息
相关推荐
独行侠影a11 小时前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式
梅孔立12 小时前
两种免费的翻译API调用方式详解 - Edge官方API与个人缓存服务
前端·缓存·edge
gwf21612 小时前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件
番茄炒鸡蛋加糖14 小时前
缓存三大问题
缓存
不在逃避q15 小时前
Golang笔记之Redis
redis·笔记·golang
江晓鱼未暖19 小时前
十七、Redis 核心原理与架构详解
大数据·数据库·数据仓库·redis·缓存·架构
红莲凪是19 小时前
Redis有哪些部署方案?了解哨兵机制吗?
java·redis·eureka
小罗水20 小时前
第13章 Redis 缓存、幂等锁与任务状态
数据库·redis·缓存
热心市民lcj20 小时前
Spring Boot 整合 Caffeine 本地缓存实战
spring boot·后端·缓存
zx11545021 小时前
【热点 Key 探测与加长缓存 TTL 实战】
缓存