Linux云计算架构-redis介绍及部署redis高可用集群

Linux云计算架构-redis介绍及部署redis高可用集群

1. 介绍并安装redis

1.1 redis介绍

redis是一种NoSQL数据库,基于键-值型存储。【全称remote dictionary server,远程字典服务器】
主要提供键-值数据结构的远程存储功能。

官网地址:https://redis.io/download

在这里插入图片描述

数据结构:列表、字典、hash表等。
数据类型:string(字符串,包含整数)、list(列表)、hash(关联数组)、sets(集合)、sorted sets(有序集合)、bitmaps(位图)、hyperloglog。

Redis 性能评估

  1. 100 万较小的键存储字符串,大概消耗100M内存。

  2. 由于Redis是单线程,如果服务器主机上有多个 CPU,只有一个能够使用,但并不意味着 CPU 会成为瓶颈,因为 Redis 是一个比较简单的 K-V 数据存储,CPU通常不会成为瓶颈的。

  3. 在常见的 linux 服务器上,500K(50 万)的并发,只需要一秒钟处理,如果主机硬件较好的情况下,每秒钟可以达到上百万的并发。

Redis 与 Memcache 对比

  1. Memcache 只能使用内存来缓存对象,若要持久化,需要第三方插件的支持。而 Redis 除了可以使用内存来缓存对像,还可以周期性的将数据保存到磁盘上,对数据进行永久存储。当服务器突然断电或死机后, redis 基于磁盘中的数据进行恢复。

  2. Redis是单线程服务器,只有一个线程来响应所有的请求。Memcache 是多线程的。

  3. Redis 支持更多的数据类型。

1.2 redis安装

1.2.1 windows安装

下载地址:https://github.com/microsoftarchive/redis/releases

redis3.0.504版本: https://github.com/microsoftarchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.zip

双击redis-server即可启动,关闭小黑窗即关闭redis。

在这里插入图片描述

使用客户端登录redis,关闭小黑窗就关闭了redis客户端。
在这里插入图片描述

在这里插入图片描述

1.2.2 linux 安装

redis中文社区:http://www.redis.cn/download.html
这里有安装教程,可以参考下。
安装的是redis-6.0.6版本。

# redis官网下载最新版的redis源码包,并上传到linux服务器。
[root@master local]# cd /usr/local/
[root@master local]# rz

[root@master local]# ll redis-6.0.6.tar.gz
-rw-r--r-- 1 root root 2228781 8月  29 11:37 redis-6.0.6.tar.gz
[root@master local]# tar xzf redis-6.0.6.tar.gz
[root@master local]# mv redis-6.0.6 redis
[root@master local]# cd redis/

# 源码编译reids,需要gcc版本5以上,我这里升级到9.3.1了。
[root@master redis]# scl enable devtoolset-9 bash
# 再次make特别顺利,舒服!!!
[root@master redis]# make
Hint: It's a good idea to run 'make test' ;)

make[1]: 离开目录“/usr/local/redis/src”

# 查看redis服务端和客户端版本
[root@master redis]# /usr/local/redis/src/redis-server --version
Redis server v=6.0.6 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=39d0c792f232dbb6
[root@master redis]# /usr/local/redis/src/redis-cli --version
redis-cli 6.0.6

# redis服务启动后,是一个前台进程,在启动的时候就把该进程放到后台进行。
[root@master ~]# /usr/local/redis/src/redis-server &
[root@master ~]# jobs
[1]+  运行中               /usr/local/redis/src/redis-server &

# 查看redis占用端口号,默认监听6379端口号
[root@master ~]# ps aux | grep redis
root      13500  0.4  0.2 162264  8172 pts/0    Sl   09:19   0:00 /usr/local/redis/src/redis-server *:6379
root      13524  0.0  0.0 112728   992 pts/0    S+   09:20   0:00 grep --color=auto redis

# 设置开机自启
[root@master ~]# mkdir /etc/redis
[root@master ~]# cp /usr/local/redis/redis.conf /etc/redis/
[root@master ~]# vim /lib/systemd/system/redis.service
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/src/redis-server /etc/redis/redis.conf
PrivateTmp=true

[Install]
WantedBy=graphical.target
============================================================================
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
multi-user.target   多用户模式,字符界面,系统运行级别3
graphical.target    图形界面模式,系统运行级别5
=============================================================================

测试启动:

# 停止redis服务
[root@master ~]# systemctl stop redis.service 
# 后台启动redis服务
# 这里没有使用systemctl start redis.service启动,是因为redis服务默认是前台启动,无法使用该命令启动redis,要修改配置文件使得redis后台启动才可以使用该命令。2.1后面会有介绍
[root@master ~]# /usr/local/redis/src/redis-server &
# 设置开机自启,graphical.target.wants图形化界面开机自启
[root@master ~]# systemctl enable redis
Created symlink from /etc/systemd/system/graphical.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
# 关机,重新开机
[root@master ~]# shutdown -r now
# 可以看到redis仍然启动着。
[root@master ~]# netstat -antup | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      9309/redis-server 1 

2. redis基本使用

2.1 修改redis配置文件

# 修改redis绑定的IP地址,一般为IP地址或0.0.0.0
[root@master ~]# vim /etc/redis/redis.conf 
69 bind 0.0.0.0

# 其他配置介绍,一般不用设置
  88 protected-mode yes   # 禁止外网访问redis
  92 port 6379            # 默认监听端口号
 101 tcp-backlog 511      # backlog是一个等待队列,redis来不及处理的请求会通过backlog进行缓存(排队),backlog的值决定了可以缓存的请求数。
 109 # unixsocket /tmp/redis.sock    # 指定使用sock文件通信,并设置sock文件位置。服务端和客户端在同一台主机上,建议打开,基于sock方式通信可以直接在内存中进行交换数据,不用再经过tcp/ip协议栈进行封装、拆封。
 113 timeout 0            # 当redis客户端连接成功后,可空闲多久才算超时,0表示不启用该功能。即空闲即超时。
 130 tcp-keepalive 300    # 是否启用长链接功能,300表示300s内不断开客户端的连接,即使连接处于空闲。
 222 daemonize no        # 是否需要后台启动,默认是不需要。
 233 supervised no       # 定义是upstart还是systemd接管redis进程。默认无监督互动。
 244 pidfile /var/run/redis_6379.pid
 252 loglevel notice   # 定义日志级别
 257 logfile ""        # 日志文件位置,默认不生成日志。
 272 databases 16      # 定义redis默认有多少个数据库。
 392 # masterauth <master-password>   # 连接主数据库时的密码
 400 # masteruser <username>    # 连接主数据库时的用户名
 829 # maxclients 10000   # 设置同时连接redis客户端的最大数量。
# 启动方式daemonize为后台启动,值为yes。
# 设置日志存放位置logfile为/var/log/redis/redis.log
[root@master ~]# vim /etc/redis/redis.conf
 222 daemonize yes
 257 logfile "/var/log/redis/redis.log"
 
# 创建日志文件
[root@master ~]# mkdir /var/log/redis
[root@master ~]# touch /var/log/redis/redis.log
[root@master ~]# netstat -antup | grep redis
# 可以看到已经支持systemctl start redis.service启动redis服务了。
[root@master ~]# systemctl start redis.service
[root@master ~]# netstat -antup | grep redis
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      13349/redis-server  

2.2 redis登录

[root@master ~]# redis-cli
127.0.0.1:6379> exit
[root@master ~]# redis-cli -h 192.168.8.188 -p 6379
192.168.8.188:6379> exit

-h 指定主机IP,默认本机。
-p 指定端口号,默认6379

2.3 字符串操作

redis的功能之一是存储K-V键值数据,故对键的命名设定了一些规则:
①可以使用ASCII码
②键的长度越长,消耗的空间越多。
③同库(名字空间),键的名字不可重复。复制键的名字,即修改键中的值。
④异库,键的名字可以重复。
⑤键可以实现自动过期。

在这里插入图片描述

[root@master ~]# redis-cli
127.0.0.1:6379> set system centos
OK
127.0.0.1:6379> get system
"centos"
127.0.0.1:6379> set name abong EX 60
OK
127.0.0.1:6379> get name
"abong"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> 

有效期:
EX 单位秒
PX 单位毫秒

2.4 开启redis用户认证

# 设置认证密码
[root@master ~]# vim /etc/redis/redis.conf
 786 requirepass 123456
[root@master ~]# systemctl restart redis.service

# 测试用户认证
[root@master ~]# redis-cli
127.0.0.1:6379> get system
(error) NOAUTH Authentication required.  
127.0.0.1:6379> auth 123456       # auth认证
OK
127.0.0.1:6379> get system
"centos"
127.0.0.1:6379> exit

3. redis持久化

redis工作时所有数据都是存储在内存中的,当redis崩溃或者断电时所有数据都会丢失。故redis提供了持久化功能来保证数据的可靠性。redis持久化的实现方式有两种:RDBAOF

RDB存储为二进制格式的数据文件,redis默认的持久化机制。按事先定制的策略,周期性的将数据保存到磁盘。【保存数据本身】

AOF:Append Only File类似mysql二进制日志,记录每一次redis的写操作命令,以顺序IO方式附加在文件的尾部,使用追加方式实现,即附加日志类型的持久化机制。由于记录每一次写操作,则会随着时间长而增大文件的容量,并且有些记录的命令是多余的。但是AOF进程能够自动的去扫描AOF文件,把冗余的日志操作合并成一个,以实现将来一次性数据恢复。【记录写操作日志】

[root@master ~]# vim /etc/redis/redis.conf
 321 stop-writes-on-bgsave-error yes    # 备份数据时发生错误是否停止
 327 rdbcompression yes                 # 是否压缩存储
 336 rdbchecksum yes                    # 是否对rdb文件做校验码检测。在redis生成rdb文件时会生成校验码,当redis重启或重载时rdb文件时,会对rdb文件进行校验,导致redis启动较慢,但可以判断rdb文件是否报错。
 339 dbfilename dump.rdb                # rdb文件名
 362 dir /var/lib/redis                 # 定义rdb文件存放路径

[root@master ~]# mkdir /var/lib/redis
[root@master ~]# systemctl restart redis

# 使用redis客户端执行set操作,然后重启服务器,看是否会生成rdb文件。可以看到是有的。
[root@master ~]# ll /var/lib/redis/dump.rdb
-rw-r--r-- 1 root root 139 8月  30 19:51 /var/lib/redis/dump.rdb

4. 搭建redis主从复制架构

4.1 reids主从复制原理

Redis 的主从复制是自动进行的,并不需要用户的介入,slave 端会自动连接 master 并进行数据同步。如果同步连接时 slave 端短暂的与 master 端断开了连接,那连接恢复后 slave 端会与 master 端再进行一次同步。从而保证数据一致。

redis主从同步原理图:
在这里插入图片描述

4.2 部署redis主从同步架构

部署主从redis服务器,按照上面的步骤重新做一台。我这里直接克隆一台,配置如下:
master redis:192.168.8.188
slave redis:192.168.8.189

# 开放master端的6379端口
[root@master ~]# firewall-cmd --permanent --zone=public --add-port=6379/tcp
success
[root@master ~]# firewall-cmd --reload
success

# slave端配置master端信息,可根据配置向master端发送ping命令
[root@slave ~]# vim /etc/redis/redis.conf
 385 replicaof 192.168.8.188 6379
 392 masterauth 123456
[root@slave ~]# systemctl restart redis.service
[root@slave ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:slave   # 从redis
master_host:192.168.8.188
master_port:6379
master_link_status:up    # up表示主从同步已经连接上,down为未连接。
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:56
slave_priority:100
slave_read_only:1    # slave端只读,1为只读
connected_slaves:0
master_replid:c543ffa1cb0fd6a21f2ac2b73564f6e9e0ba6d36
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
127.0.0.1:6379> exit

# master端查看slave端信息
[root@master ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master    # 主redis
connected_slaves:1   # 有1个从redis正在连接
slave0:ip=192.168.8.189,port=6379,state=online,offset=252,lag=0   # 从redis信息
master_replid:c543ffa1cb0fd6a21f2ac2b73564f6e9e0ba6d36
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:252
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:252

# 测试redis主从复制
[root@master ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set name haha   # 创建一个键name,值为haha
OK

[root@slave ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> get name   # 可以看到已经复制过来
"haha"
127.0.0.1:6379> exit

4.3 redis从服务器配置介绍

redis从服务器上配置文件的高级配置:
 304 save 900 1    # 900s内有1个键发生变化,做一次持久化,生成一个rdb文件。
 305 save 300 10   # 300s内有10个键发生变化,做一次持久化,生成一个rdb文件。
 306 save 60 10000 # 60内有10000个键发生变化,做一次持久化,生成一个rdb文件。
 418 replica-serve-stale-data yes    # 当slave端在主从复制中与master端断开连接,当再次连接上时,有两种处理方式:①无论数据是否是最新的,都继续提供服务②对请求返回一个错误信息。
 434 replica-read-only yes   # redis从服务器只读
 463 repl-diskless-sync no   # 无磁盘同步
 主从同步策略:
①disk:master端生成rdb文件,先写入从redis服务器的disk中,然后再写入slave端。【磁盘读写速度快,网速慢】
②socket方式(diskless):master端直接将rdb文件传到slave socket,不与disk磁盘进行交互。【磁盘读写速度慢,网速快】
 475 repl-diskless-sync-delay 5   # 无磁盘同步延迟
 507 # repl-ping-replica-period 10  # slave端向master端发送ping的时间间隔,默认10s
 519 # repl-timeout 60    # 设置超时时间,ping
 534 repl-disable-tcp-nodelay no    # 是否启用tcp_nodelay,启用则使用少量的tcp包和带宽进行数据传输,速度较慢。不启用则传输速度较快,但是会占用较多的带宽。【是否限速】
 547 # repl-backlog-size 1mb   # 设置backlog同步缓冲区的大小。当slave失连时,可以存放多大的同步数据。backlog值越大,可失连时间越长。
 560 # repl-backlog-ttl 3600   # backlog同步缓冲区的保留时间,由于backlog会占用slave的内存,故可设置保留时间。0表示不释放内存资源。
 575 replica-priority 100   # slave端的优先级设置,适用于redis一主多从。数字越小,优先级越高,当master故障时,越容易被选择用来进行master端的恢复。0表示不会使用该slave端进行恢复。
 591 # min-replicas-to-write 3     #  
 592 # min-replicas-max-lag 10     # 当master端的可用slave端少于3个或者延迟时间大于10s时,不进行写操作。【检测同步是否及时有效,来不及同步就停止写操作】

5. 使用sentinel实现主从redis集群高可用

5.1 redis主从高可用原理

适用场景:公司的redis主从架构中,如果master端离线,那么所有写操作将无法执行。为了避免此情况发生,redis引入了sentinel(哨兵)机制,当master端挂了,slave端主动变为master端。

sentinel工作原理:sentinel是redis官方提供的一种高可用方案,可以自动监控redis master/slave的运行状态。

①master端宕机,sentinel实例无法访问master端。
②多个sentinel实例投票选举某个sentinel启动failover。
③自动更新sentinel实例和slave端配置文件,升级slave端为master端。
④发送master切换事件(pub/sub事件)消息给jedis client
⑤当jedis client监听到该消息,会将master ip切换到新的master ip继续访问。
这些操作对于调用redis客户端的业务系统而言,是完全透明的。

在这里插入图片描述

主观下线:SDOWN,指当前sentinel实例对某个redis服务器做出下线判断。
客观下线:多个sentinel实例对master端做出SDOWN判断,并且通过sentinel的is-master-down-by-addr命令相互交流,得出master端的下线判断,然后开启failover。

5.2 部署高可用redis主从架构

主机环境
master redis:192.168.8.192
slave1 redis:192.168.8.188
slave2 redis:192.168.8.193

三台主机都是刚配置好redis,未曾修改过配置文件。如果不是新的redis,哨兵可能无法生效。

# 配置master端
[root@master ~]# vim /etc/redis/redis.conf
  69 bind 0.0.0.0
  88 protected-mode no
  222 daemonize yes
  
[root@master ~]# systemctl restart redis.service

# 配置slave1为master端的从服务器
[root@slave1 ~]# vim /etc/redis/redis.conf
  69 bind 0.0.0.0
  88 protected-mode no
 222 daemonize yes
 386 replicaof 192.168.8.192 6379
[root@slave1 ~]# systemctl restart redis.service 

# 配置slave2为master端的从服务器
[root@slave2 ~]# vim /etc/redis/redis.conf
  69 bind 0.0.0.0
  88 protected-mode no
 222 daemonize yes
 386 replicaof 192.168.8.192 6379
[root@slave2 ~]# systemctl restart redis.service 

# 如果无法使用redis-cli命令,要添加环境变量。三台redis主机都要做这个操作。
[root@master ~]# vim /etc/profile.d/redis.sh
export PATH=/usr/local/redis/src:$PATH
[root@master ~]# chmod +x /etc/profile.d/redis.sh
[root@master ~]# source /etc/profile.d/redis.sh

# 开放3台redis服务器的6379端口号
[root@master ~]# firewall-cmd --permanent --zone=public --add-port=6379/tcp
success
[root@master ~]# firewall-cmd --reload
success

# 登录master、slave1、slave2查看主从复制状态
# 可以看到master_replid都是一样的。
[root@master ~]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master   # 主redis
connected_slaves:2    # 2个有效的从redis连接
slave0:ip=192.168.8.188,port=6379,state=online,offset=210,lag=0
slave1:ip=192.168.8.193,port=6379,state=online,offset=210,lag=0
master_replid:967efa57f35f1272f3caa4d1a41e3d1041ae7547
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:210

[root@slave1 ~]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave   # 从redis
master_host:192.168.8.192
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:280
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:967efa57f35f1272f3caa4d1a41e3d1041ae7547
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:280
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:280

[root@slave2 ~]# redis-cli 
127.0.0.1:6379> info replication
# Replication
role:slave    # 从redis
master_host:192.168.8.192
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:210
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:967efa57f35f1272f3caa4d1a41e3d1041ae7547
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:183
repl_backlog_histlen:28

# 配置master上的sentinel实例
[root@master ~]# vim /usr/local/redis/sentinel.conf
 17 protected-mode no  # 开启保护模式,不允许外网访问
 21 port 26379             # sentinel实例监听端口26379
 26 daemonize yes    # 后台运行
 84 sentinel monitor mymaster 192.168.8.192 6379 2   # 设置主master的IP地址和端口号,最后的2指2票通过master离线,此时有3个sentinel实例。
125 sentinel down-after-milliseconds   mymaster 10000   # ping master端,10s不回复pong或者回复错误则表示master端已经挂了。
141 sentinel parallel-syncs mymaster 1   # 同一时间允许多少台slave端复制新的master端。数字1表示一台一台复制,复制时间较长。数字越大,表示同一时间不可用slave端越多,但复制时间较短。
166 sentinel failover-timeout mymaster 60000   # 若第二个sentinel推荐第一个sentinel去实行failover,当第一个进行failover的sentinel失败后,在60s后第二个sentinel将再次进行failover。

# 把配置好的sentinel文件发送到从redis上
[root@master ~]# scp /usr/local/redis/sentinel.conf [email protected]:/usr/local/redis/
[root@master ~]# scp /usr/local/redis/sentinel.conf [email protected]:/usr/local/redis/

# 开放3台redis服务器的26379端口,之前已经开放了6379端口号了。
[root@master ~]# firewall-cmd --permanent --zone=public --add-port=26379/tcp
success
[root@master ~]# firewall-cmd --reload
success

# 开启所有的sentinel实例
# redis-sentinel 配置文件
[root@master ~]# redis-sentinel /usr/local/redis/sentinel.conf
[root@slave1 ~]# redis-sentinel /usr/local/redis/sentinel.conf
[root@slave2 ~]# redis-sentinel /usr/local/redis/sentinel.conf
如果未运行sentinel实例,会出现以下报错:
[root@master ~]# redis-cli -p 26379
Could not connect to Redis at 127.0.0.1:26379: Connection refused

# 重启所有的redis服务器
[root@master ~]# systemctl restart redis.service
[root@slave1 ~]# systemctl restart redis.service
[root@slave2 ~]# systemctl restart redis.service

模拟故障:

# 可以看到此时的主redis是192.168.8.188,并且主从复制是连接上的。
[root@master ~]# clear
[root@master ~]# redis-cli -h 192.168.8.188
192.168.8.188:6379> info replication
# Replication
role:slave
master_host:192.168.8.192    # 主redis
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:11796
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f16b51ffa2b61206d18ce96b349266447f6683d6   # master_replid 第一台主redis的ID
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:11796
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3422
repl_backlog_histlen:8375

# 停止主redis服务
[root@master ~]# systemctl stop redis.service

# 再次查看主redis
192.168.8.188:6379> info replication
# Replication
role:slave
master_host:192.168.8.193    # 原来的主redis停止后,从redis升级为新的主redis
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:22887
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8b0b8cf49fd0454ace7f2b13b53aa5e3ceede6a0
master_replid2:f16b51ffa2b61206d18ce96b349266447f6683d6   # 第一台主redis的ID放到了master_replid2,新生成了一个master_replid。
master_repl_offset:22887
second_repl_offset:21314
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3422
repl_backlog_histlen:19466

# 重新启动原来的主redis
[root@master ~]# systemctl start redis.service

# 主redis并没有迁移回来。这是正常的。
192.168.8.188:6379> info replication
# Replication
role:slave
master_host:192.168.8.193
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:81535
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8b0b8cf49fd0454ace7f2b13b53aa5e3ceede6a0
master_replid2:f16b51ffa2b61206d18ce96b349266447f6683d6
master_repl_offset:81535
second_repl_offset:21314
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3422
repl_backlog_histlen:78114

# 查看下sentinel的信息,可以sentinel正在监听193这台主机。2个slave,3个sentinel。
[root@master ~]# redis-cli -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.8.193:6379,slaves=2,sentinels=3

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/108393576