一、概述

  • REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储体系,是跨平台的非关系型数据库
  • Redis 是一个开源的运用 ANSI C 言语编写、恪守 BSD 协议、支持网络、可依据内存、分布式、可选耐久性的键值对(Key-Value)存储数据库,并供给多种言语的 API。
  • Redis 一般被称为数据结构服务器,由于值(value)能够是字符串(String)哈希(Hash)列表(list)调集(sets)有序调集(Sorted Set:)
  • Redis耐久化方法:全量数据(RDB:Redis DataBase)增量恳求(AOF:Append Only File)。全量数据在指定的时刻间隔内生成数据集的时刻点快照(point-in-time snapshot);增量恳求则是把内存中的数据序列转化为操作恳求,用于读取文件进行replay得到数据,这种类似于mysql的binlog。Redis的存储分为内存存储、磁盘存储和log文件三部分。
  • Redis有三种集群形式:主从形式Sentinel(岗兵)形式Cluster形式

官方文档:redis.io/docs/

二、Redis原理介绍

原理介绍能够参考我之前的文章:Redis原理介绍

三、主从形式 布置

1)架构与简介

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

主从形式特色:

  • 主数据库能够进行读写操作,当读写操作导致数据变化时会主动将数据同步给从数据库

  • 从数据库一般都是只读的,并且接纳主数据库同步过来的数据

  • 一个master能够拥有多个slave,可是一个slave只能对应一个master

  • slave挂了不影响其他slave的读和master的读和写,从头发动后会将数据从master同步过来

  • master挂了今后,不影响slave的读,但redis不再供给写服务,master重启后redis将从头对外供给写服务

  • master挂了今后,不会在slave节点中从头选一个master

作业机制:

  • 当slave发动后,主意向master发送SYNC指令。master接纳到SYNC指令后在后台保存快照(RDB耐久化)和缓存保存快照这段时刻的指令,然后将保存的快照文件和缓存的指令发送给slave。slave接纳到快照文件和指令后加载快照文件和缓存的履行指令。
  • 仿制初始化后,master每次接纳到的写指令都会同步发送给slave,确保主从数据共同性。

2)环境预备

IP 主机名 人物
local-168-182-110 192.168.182.110 master
local-168-182-111 192.168.182.111 slave1
local-168-182-112 192.168.182.112 slave2
### 3)下载解压Redis安装包(一切节点)
下载地址:download.redis.io/releases/
cd /opt/software
wget http://download.redis.io/releases/redis-7.0.3.tar.gz
# 解压
tar -xf redis-7.0.3.tar.gz
cd redis-7.0.3
# 设置环境变量
echo "export REDIS_HOME=/opt/software/redis-7.0.3">> /etc/profile
source /etc/profile

4)编译安装(一切节点)

cd $REDIS_HOME
yum -y install gcc gcc++
make && make install
# 默认安装目录 /usr/local/bin

5)装备成服务(一切节点)

cat << EOF > /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/redis-server /usr/local/redis/redis.conf --supervised systemd
ExecStop=/usr/libexec/redis-shutdown
Type=forking
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=65536
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

装备描绘:

Description: # 描绘服务 
After: # 描绘服务类别 
[Service] # 服务运转参数的设置 
Type=forking # 是后台运转的形式 
ExecStart # 为服务的具体运转指令 
ExecReload # 为重启指令 
ExecStop # 为中止指令 
LimitNOFILE=65536 # 翻开文件数和进程数有限制,默认限制为1024,假如不设置,或许设置为LimitNOFILE=unlimited(不识别),则得到了1024
PrivateTmp=True # 表明给服务分配独立的暂时空间 
#【留意】[Service]的发动、重启、中止指令悉数要求运用绝对途径 
[Install] #运转级别下服务安装的相关设置,可设置为多用户,即体系运转级别为3
重载体系服务:systemctl daemon-reload

/usr/libexec/redis-shutdown

#!/bin/bash
#
# Wrapper to close properly redis and sentinel
test x"$REDIS_DEBUG" != x && set -x
REDIS_CLI=/usr/local/bin/redis-cli
# Retrieve service name
SERVICE_NAME="$1"
if [ -z "$SERVICE_NAME" ]; then
   SERVICE_NAME=redis
fi
# Get the proper config file based on service name
CONFIG_FILE="/usr/local/redis/$SERVICE_NAME.conf"
# Use awk to retrieve host, port from config file
HOST=`awk '/^[[:blank:]]*bind/ { print $2 }' $CONFIG_FILE | tail -n1`
PORT=`awk '/^[[:blank:]]*port/ { print $2 }' $CONFIG_FILE | tail -n1`
PASS=`awk '/^[[:blank:]]*requirepass/ { print $2 }' $CONFIG_FILE | tail -n1`
SOCK=`awk '/^[[:blank:]]*unixsocket\s/ { print $2 }' $CONFIG_FILE | tail -n1`
# Just in case, use default host, port
HOST=${HOST:-127.0.0.1}
if [ "$SERVICE_NAME" = redis ]; then
    PORT=${PORT:-6379}
else
    PORT=${PORT:-26739}
fi
# Setup additional parameters
# e.g password-protected redis instances
[ -z "$PASS"  ] || ADDITIONAL_PARAMS="-a $PASS"
# shutdown the service properly
if [ -e "$SOCK" ] ; then
        $REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdown
else
        $REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdown
fi

装备完就能够经过systemctl启停redis了

6)授权发动服务(一切节点)

chmod +x /usr/libexec/redis-shutdown
useradd -s /sbin/nologin redis
mkdir /usr/local/redis ; cp $REDIS_HOME/redis.conf /usr/local/redis/ && chown -R redis:redis /usr/local/redis
mkdir -p /opt/software/redis-7.0.3/data && chown -R redis:redis /opt/software/redis-7.0.3/data
yum install -y bash-completion && source /etc/profile                 # 指令补全
systemctl daemon-reload
systemctl enable redis

7)装备(redis.conf)

修正linux内核参数

# 暂时收效
sysctl  -w  vm.overcommit_memory=1
# 永久收效
echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf && sysctl -p
### 可选值:0,1,2。
# 0,:表明内核将检查是否有满足的可用内存供运用进程运用;假如有满足的可用内存,内存恳求答应;不然,内存恳求失利,并把过错回来给运用进程。
# 1:表明内核答应分配一切的物理内存,而不论当时的内存状况如何。
# 2: 表明内核答应分配超越一切物理内存和交换空间总和的内存。

1、master节点装备

修正装备如下: vi /usr/local/redis/redis.conf

bind 192.168.182.110               # 监听ip,多个ip用空格分隔
daemonize yes               # 答应后台发动
logfile "/usr/local/redis/redis.log"                # 日志途径
dir /opt/software/redis-7.0.3/data                 # 数据库备份文件寄存目录
masterauth 123456               # slave衔接master暗码,master可省掉
requirepass 123456              # 设置master衔接暗码,slave可省掉
appendonly yes                  # 在/opt/software/redis-7.0.3/data目录生成appendonly.aof文件,将每一次写操作恳求都追加到appendonly.aof 文件中

2、slave1节点装备

修正装备如下: vi /usr/local/redis/redis.conf

bind 192.168.182.111               # 监听ip,多个ip用空格分隔
daemonize yes               # 答应后台发动
logfile "/usr/local/redis/redis.log"                # 日志途径
dir /opt/software/redis-7.0.3/data                 # 数据库备份文件寄存目录
#  replicaof用于跟随某个节点的redis,被跟随的节点为主节点,跟随的为从节点。便是设置master节点
replicaof 192.168.182.110 6379
masterauth 123456               # slave衔接master暗码,master可省掉
requirepass 123456              # 设置master衔接暗码,slave可省掉
appendonly yes                  # 在/opt/software/redis-7.0.3/data目录生成appendonly.aof文件,将每一次写操作恳求都追加到appendonly.aof 文件中

3、slave2节点装备

修正装备如下: vi /usr/local/redis/redis.conf

bind 192.168.182.112               # 监听ip,多个ip用空格分隔
daemonize yes               # 答应后台发动
logfile "/usr/local/redis/redis.log"                # 日志途径
dir /opt/software/redis-7.0.3/data                 # 数据库备份文件寄存目录
#  replicaof用于跟随某个节点的redis,被跟随的节点为主节点,跟随的为从节点。便是设置master节点
replicaof 192.168.182.110 6379
masterauth 123456               # slave衔接master暗码,master可省掉
requirepass 123456              # 设置master衔接暗码,slave可省掉
appendonly yes                  # 在/opt/software/redis-7.0.3/data目录生成appendonly.aof文件,将每一次写操作恳求都追加到appendonly.aof 文件中

8)发动Redis服务

systemctl start redis
systemctl status redis

9)检查集群状况

# 交互式
redis-cli -h 192.168.182.110 -a 123456
192.168.182.110:6379> info replication
# 交互式
redis-cli -h 192.168.182.110
192.168.182.110:6379> auth 123456
192.168.182.110:6379> info replication
# 非交互式
redis-cli -h 192.168.182.110 -a 123456 info replication

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

在这里Redis的主从形式就布置完了(一主两从)

【温馨提示】在slave节点上只能读,无法写入数据

四、Sentinel(岗兵)形式 布置

1)架构与简介

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

主从形式的弊端便是不具有高可用性,当master挂掉今后,Redis将不能再对外供给写入操作,因而sentinel应运而生。

sentinel中文含义为岗兵,顾名思义,它的效果便是监控redis集群的运转状况,特色如下:

  • sentinel形式是建立在主从形式的基础上,假如只有一个Redis节点,sentinel就没有任何含义

  • 当master挂了今后,sentinel会在slave中挑选一个做为master,并修正它们的装备文件,其他slave的装备文件也会被修正,比方slaveof特色会指向新的master

  • 当master从头发动后,它将不再是master而是做为slave接纳新的master的同步数据

  • sentinel由于也是一个进程有挂掉的可能,所以sentinel也会发动多个形成一个sentinel集群

  • 多sentinel装备的时分,sentinel之间也会主动监控

  • 当主从形式装备暗码时,sentinel也会同步将装备信息修正到装备文件中,不需要担心

  • 一个sentinel或sentinel集群能够办理多个主从Redis,多个sentinel也能够监控同一个redis

  • sentinel最好不要和Redis布置在同一台机器,不然Redis的服务器挂了今后,sentinel也挂了

作业机制:

  • 每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发送一个 PING 指令

  • 假如一个实例间隔最终一次有用回复 PING 指令的时刻超越 down-after-milliseconds 选项所指定的值, 则这个实例会被sentinel符号为片面下线。

  • 假如一个master被符号为片面下线,则正在监督这个master的一切sentinel要以每秒一次的频率承认master确实进入了片面下线状况

  • 当有满足数量的sentinel(大于等于装备文件指定的值)在指定的时刻范围内承认master确实进入了片面下线状况, 则master会被符号为客观下线

  • 在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的一切master,slave发送 INFO 指令

  • 当master被sentinel符号为客观下线时,sentinel向下线的master的一切slave发送 INFO 指令的频率会从 10 秒一次改为 1 秒一次

  • 若没有满足数量的sentinel同意master现已下线,master的客观下线状况就会被移除;若master从头向sentinel的 PING 指令回来有用回复,master的片面下线状况就会被移除

2)环境预备

IP 主机名 人物
local-168-182-110 192.168.182.110 master,sentinel
local-168-182-111 192.168.182.111 slave1,sentinel
local-168-182-112 192.168.182.112 slave2,sentinel

【温馨提示】 sentinel 最好跟redis布置在不同的机器上,sentinel 端口:26379

3)装备sentinel(一切节点)

【温馨提示】前面现已安装过了redis主从形式了,由于岗兵形式是依据主从形式的,所以redis的装备这里就省掉了,直接修正sentinel装备文件,装备3个岗兵,每个岗兵的装备都是相同的。

# 三个节点创立存储目录
mkdir /opt/software/redis-7.0.3/sentinel
mkdir /opt/software/redis-7.0.3/sentinel ; chown -R redis:redis /opt/software/redis-7.0.3/
cat >/usr/local/redis/sentinel.conf<<EOF
daemonize yes
logfile "/usr/local/redis/sentinel.log"
# sentinel作业目录
dir "/opt/software/redis-7.0.3/sentinel"
# 判别master失效至少需要2个sentinel同意,主张设置为n/2+1,n为sentinel个数
# sentinel monitor <master-name> <ip> <port> <count>
sentinel monitor mymaster 192.168.182.110 6379 2
sentinel auth-pass mymaster 123456
# 判别master片面下线时刻,默认30s
sentinel down-after-milliseconds mymaster 30000
EOF

4)发动sentinel(一切节点)

/usr/local/bin/redis-sentinel /usr/local/redis/sentinel.conf
netstat -tnlp|grep 26379

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

5)模拟毛病测试

# 停掉master
systemctl stop redis
redis-cli -h 192.168.182.111 -a 123456 info replication

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

发现master节点现已切换到其它节点了。再测试一下读写

[root@local-168-182-110 redis-7.0.3]# redis-cli -h 192.168.182.112 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.182.112:6379> set k2 v2
OK

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

新的master节点写才能也正常,接下来便是康复毛病了。

redis-cli -h 192.168.182.112 -a 123456 info replication

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

发现就算原先的master节点康复了,也不会切换到master人物,而是作为slave人物。

五、Cluster形式 布置

1)架构与简介

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

  • sentinel形式基本能够满足一般出产的需求,具有高可用性。可是当数据量过大到一台服务器寄存不下的情况时,主从形式或sentinel形式就不能满足需求了,这个时分需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster形式的出现便是为了解决单机Redis容量有限的问题,将Redis的数据依据必定的规矩分配到多台机器。

  • cluster能够说是sentinel+主从形式的结合体,经过cluster能够实现主从和master重选功能,所以假如装备两个副本三个分片的话,就需要六个Redis实例。由于Redis的数据是依据必定规矩分配到cluster的不同机器的,当数据量过大时,能够新增机器进行扩容。

  • 运用集群,只需要将redis装备文件中的cluster-enable装备翻开即可。每个集群中至少需要三个主数据库才能正常运转,新增节点非常方便。

cluster集群特色:

  • 多个redis节点网络互联,数据同享

  • 一切的节点都是一主一从(也能够是一主多从),其中从不供给服务,仅作为备用

  • 不支持一起处理多个key(如MSET/MGET),由于redis需要把key均匀分布在各个节点上,并发量很高的情况下一起创立key-value会下降性能并导致不行预测的行为

  • 支持在线增加、删去节点

  • 客户端能够衔接任何一个主节点进行读写

2)环境预备

三台机器,分别敞开三个redis服务,也便是每个节点便是一主两从形式

IP 主机名 端口 节点
local-168-182-110 192.168.182.110 7001,7002,7003 node1
local-168-182-111 192.168.182.111 7001,7002,7003 node2
local-168-182-112 192.168.182.112 7001,7002,7003 node3

3)修正装备(一切节点)

【温馨提示】这里是依据主从形式的装备修正,不是依据主从形式布置,岗兵形式是依据主从形式布置。

# 创立存储目录
mkdir -p /opt/software/redis-7.0.3/cluster/redis_{7001..7003}
cp /usr/local/redis/redis.conf /usr/local/redis/cluster_redis_7001.conf
cp /usr/local/redis/redis.conf /usr/local/redis/cluster_redis_7002.conf
cp /usr/local/redis/redis.conf /usr/local/redis/cluster_redis_7003.conf
chown -R redis:redis /usr/local/redis ;chown -R redis:redis /opt/software/redis-7.0.3/cluster

修正装备文件/usr/local/redis/cluster_redis_7001.conf

# 【留意】节点不相同,IP不相同,记住修正这个bind装备
bind 192.168.182.110
port 7001
daemonize yes
pidfile "/var/run/cluster_redis_7001.pid"
logfile "/usr/local/redis/cluster_redis_7001.log"
dir "/opt/software/redis-7.0.3/cluster/redis_7001"
#replicaof 192.168.182.110 6379
masterauth "123456"
requirepass "123456"
appendonly yes
# 敞开集群形式
cluster-enabled yes
# 尽管此装备的名字叫"集群装备文件",可是此装备文件不能人工修改,它是集群节点主动保护的文件,首要用于记录集群中有哪些节点、他们的状况以及一些耐久化参数等,方便在重启时康复这些状况。一般是在收到恳求之后这个文件就会被更新。
cluster-config-file nodes_7001.conf
cluster-node-timeout 15000

修正装备文件/usr/local/redis/cluster_redis_7002.conf

# 【留意】节点不相同,IP不相同,记住修正这个bind装备
bind 192.168.182.110
port 7002
daemonize yes
pidfile "/var/run/cluster_redis_7002.pid"
logfile "/usr/local/redis/cluster_redis_7002.log"
dir "/opt/software/redis-7.0.3/cluster/redis_7002"
#replicaof 192.168.182.110 6379
masterauth "123456"
requirepass "123456"
appendonly yes
# 装备yes则敞开集群功能,此redis实例作为集群的一个节点,不然,它是一个一般的单一的redis实例。
cluster-enabled yes
# 尽管此装备的名字叫"集群装备文件",可是此装备文件不能人工修改,它是集群节点主动保护的文件,首要用于记录集群中有哪些节点、他们的状况以及一些耐久化参数等,方便在重启时康复这些状况。一般是在收到恳求之后这个文件就会被更新。
cluster-config-file nodes_7002.conf
cluster-node-timeout 15000

修正装备文件/usr/local/redis/cluster_redis_7002.conf

# 【留意】节点不相同,IP不相同,记住修正这个bind装备
bind 192.168.182.110
port 7003
daemonize yes
pidfile "/var/run/cluster_redis_7003.pid"
logfile "/usr/local/redis/cluster_redis_7003.log"
dir "/opt/software/redis-7.0.3/cluster/redis_7003"
#replicaof 192.168.182.110 6379
masterauth "123456"
requirepass "123456"
appendonly yes
# 装备yes则敞开集群功能,此redis实例作为集群的一个节点,不然,它是一个一般的单一的redis实例。
cluster-enabled yes
# 尽管此装备的名字叫"集群装备文件",可是此装备文件不能人工修改,它是集群节点主动保护的文件,首要用于记录集群中有哪些节点、他们的状况以及一些耐久化参数等,方便在重启时康复这些状况。一般是在收到恳求之后这个文件就会被更新。
cluster-config-file nodes_7003.conf
cluster-node-timeout 15000

其它两台机器装备与192.168.182.110共同,只是ip不同,此处省掉

# 将装备copy到别的两个节点
scp -r /usr/local/redis/cluster_redis_{7001..7003}.conf local-168-182-111:/usr/local/redis/
scp -r /usr/local/redis/cluster_redis_{7001..7003}.conf local-168-182-112:/usr/local/redis/
# 在node2上履行
sed -i 's/192.168.182.110/192.168.182.111/g' /usr/local/redis/cluster_redis_{7001..7003}.conf
# 在node3上履行
sed -i 's/192.168.182.110/192.168.182.112/g' /usr/local/redis/cluster_redis_{7001..7003}.conf

4)发动Redis服务(一切节点)

redis-server /usr/local/redis/cluster_redis_7001.conf
netstat -tnlp|grep 7001
redis-server /usr/local/redis/cluster_redis_7002.conf
netstat -tnlp|grep 7002
redis-server /usr/local/redis/cluster_redis_7003.conf
netstat -tnlp|grep 7003
tail -f /usr/local/redis/cluster_redis_7001.log
tail -f /usr/local/redis/cluster_redis_7002.log
tail -f /usr/local/redis/cluster_redis_7003.log

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

5)创立集群

# –cluster-replicas 2 : 表明集群的一个主节点有2个从节点,便是一主两从形式
redis-cli -a 123456 --cluster create \
192.168.182.110:7001 192.168.182.110:7002 192.168.182.110:7003 \
192.168.182.111:7001 192.168.182.111:7002 192.168.182.111:7003 \
192.168.182.112:7001 192.168.182.112:7002 192.168.182.112:7003 \
--cluster-replicas 2

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

会主动生成nodes.conf文件

ll /opt/software/redis-7.0.3/cluster/redis_{7001..7003}

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

6)集群操作

1、登录集群

redis-cli -c -h 192.168.182.110 -p 7001
192.168.182.110:7001> auth 123456

2、检查集群信息

redis-cli -c -h 192.168.182.129 -p 7001
192.168.182.110:7001> auth 123456
192.168.182.110:7001> CLUSTER INFO

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

3、列出节点信息

redis-cli -c -h 192.168.182.129 -p 7001
192.168.182.110:7001> auth 123456
192.168.182.110:7001> CLUSTER INFO
192.168.182.110:7001> CLUSTER NODES

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

4、增加节点

node1上增加一节点

【1】装备
# copy装备
cp /usr/local/redis/cluster_redis_7003.conf /usr/local/redis/cluster_redis_7004.conf
# 创立存储目录
mkdir /opt/software/redis-7.0.3/cluster/redis_7004
# 修正装备
vi /usr/local/redis/cluster_redis_7004.conf
bind 192.168.182.110
port 7004
daemonize yes
pidfile "/var/run/redis_7004.pid"
logfile "/usr/local/redis/cluster_redis_7004.log"
dir "/opt/software/redis-7.0.3/cluster/redis_7004"
#replicaof 192.168.182.110 6379
masterauth "123456"
requirepass "123456"
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7004.conf
cluster-node-timeout 15000
# 授权
chown -R redis:redis /usr/local/redis && chown -R redis:redis /opt/software/redis-7.0.3/cluster/redis_7004
【2】发动服务
redis-server /usr/local/redis/cluster_redis_7004.conf
netstat -tnlp|grep :7004
【3】集群中增加节点
[root@local-168-182-110 ~]# redis-cli -c -h 192.168.182.110 -p 7001
192.168.182.110:7001> auth 123456
# 增加节点
192.168.182.110:7001> CLUSTER MEET 192.168.182.110 7004
# 检查节点信息
192.168.182.110:7001> CLUSTER NODES

能够看到,新增的节点都是以master身份参加集群的

【4】更换节点身份

将新增的192.168.182.110:7004节点身份改为192.168.182.130:7001的slave

redis-cli -c -h 192.168.182.110 -p 7004
192.168.182.110:7004> auth 123456
# 改变节点类型
192.168.182.110:7004> cluster replicate 0a9d68b75d529b611b4bae5753be602006fcef74
192.168.182.110:7004> CLUSTER NODES

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

5、删去节点

redis-cli -c -h 192.168.182.110 -p 7001
192.168.182.110:7001> auth 123456
# 检查节点
192.168.182.110:7001> CLUSTER NODES
# 删去节点
192.168.182.110:7001> CLUSTER FORGET 378ef2a24fb4138496b8da85bb66143800b53686
# 检查节点信息
192.168.182.110:7001> CLUSTER NODES

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

6、保存装备

redis-cli -c -h 192.168.182.110 -p 7001
192.168.182.110:7001> auth 123456
# 将节点的装备文件保存到硬盘里边
192.168.182.110:7001> CLUSTER SAVECONFIG

能够看到,之前删去的节点又康复了,这是由于对应的装备文件没有删去,履行CLUSTER SAVECONFIG康复。

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

7、模拟master节点挂掉

netstat -lntp |grep :7001|awk '{print $NF}'|cut -d '/' -f 1|xargs kill -9
redis-cli -c -h 192.168.182.111 -p 7001 -a 123456 CLUSTER NODES

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

对应192.168.182.110:7001的一行能够看到,master fail,状况为disconnected;而对应192.168.182.110:7004的一行,slave现已变成master。

【毛病康复】从头发动192.168.182.110:7001节点

redis-server /usr/local/redis/cluster_redis_7001.conf
redis-cli -c -h 192.168.182.111 -p 7001 -a 123456 CLUSTER NODES

Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)

能够看到,192.168.182.110:7001节点发动后为slave节点,并且是192.168.182.110:7004的slave节点。即master节点假如挂掉,它的slave节点变为新master节点持续对外供给服务,而本来的master节点假如重启,则变为新master节点的slave节点。

【温馨提示】cluster不能挑选db,只能默认db为0,所以select切库适当于是不能运用的。

六、简单运用

1)集群常用操作

1、检查集群信息

cluster info :打印集群的信息
cluster nodes :列出集群当时已知的一切节点( node),以及这些节点的相关信息。

2、节点操作

cluster meet <ip> <port> :将 ip 和 port 所指定的节点增加到集群傍边,让它成为集群的一份子。
cluster forget <node_id> :从集群中移除 node_id 指定的节点。
cluster replicate <node_id> :将当时节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的装备文件保存到硬盘里边。

3、槽(slot)

cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指使( assign)给当时节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当时节点的指使。
cluster flushslots :移除指使给当时节点的一切槽,让当时节点变成一个没有指使任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指使给 node_id 指定的节点,假如槽现已指使给
另一个节点,那么先让另一个节点删去该槽>,然后再进行指使。
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :撤销对槽 slot 的导入( import)或许迁移( migrate)。

4、键

cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot <slot> :回来槽 slot 现在包括的键值对数量。
cluster getkeysinslot <slot> <count> :回来 count 个 slot 槽中的键

2)redis 常用操作

1、字符串(String)

# 登录master节点,slave节点是只读的
redis-cli -c -h 192.168.182.112 -p 7001
192.168.182.112:7001> auth 123456
OK
192.168.182.112:7001> set k1 v1
OK
192.168.182.112:7001> get k1
"v1"
# 获取多个值
192.168.182.112:7001> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

2、哈希(Hash)

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别合适用于存储对象。

# 登录master节点,slave节点是只读的
redis-cli -c -h 192.168.182.112 -p 7001
192.168.182.112:7001> auth 123456
# 设置
192.168.182.112:7001> HSET myhash field1 "foo"
(integer) 1
# 获取
192.168.182.112:7001> hget myhash field1
"foo"

3、列表(List)

Redis列表是简单的字符串列表,按照插入次序排序。你能够增加一个元素到列表的头部(左面)或许尾部(右边)

# 登录master节点,slave节点是只读的
redis-cli -c -h 192.168.182.112 -p 7001
192.168.182.112:7001> auth 123456
192.168.182.112:7001> LPUSH larr v1
(integer) 1
192.168.182.112:7001> LPUSH larr v2
(integer) 2
192.168.182.112:7001> LPUSH larr v3
(integer) 3
# 获取0到10个元素
192.168.182.112:7001> LRANGE larr  0 10
1) "v3"
2) "v2"
3) "v1"

4、调集(Set)

Redis 的 Set 是 String 类型的无序调集。调集成员是仅有的,这就意味着调集中不能出现重复的数据。

# 登录master节点,slave节点是只读的
redis-cli -c -h 192.168.182.112 -p 7001
192.168.182.112:7001> auth 123456
192.168.182.112:7001> SADD myset "hello"
(integer) 1
192.168.182.112:7001> SADD myset "foo"
(integer) 1
# 现已存在,则不能增加该元素
192.168.182.112:7001> SADD myset "hello"
(integer) 0
# 获取
192.168.182.112:7001> SMEMBERS myset
1) "foo"
2) "hello"
192.168.182.112:6379>

5、 有序调集(sorted set)

Redis 有序调集和调集相同也是 string 类型元素的调集,且不答应重复的成员。不同的是每个元素都会相关一个 double 类型的分数。redis 正是经过分数来为调集中的成员进行从小到大的排序。有序调集的成员是仅有的,但分数(score)却能够重复

# 登录master节点,slave节点是只读的
redis-cli -c -h 192.168.182.112 -p 7001
192.168.182.112:7001> auth 123456
192.168.182.112:7001> ZADD key1 1 redis
(integer) 1
192.168.182.112:7001> ZADD key1 2 mongodb
(integer) 1
192.168.182.112:7001> ZADD key1 3 mysql
(integer) 1
# 现已存在,不能增加
192.168.182.112:7001> ZADD key1  3 mysql
(integer) 0
# 现已存在,不能增加
192.168.182.112:7001> ZADD key1  4 mysql
(integer) 0
# 获取数据
192.168.182.112:7001> ZRANGE key1  0 10 WITHSCORES
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"

主从形式、岗兵形式、集群形式的环境布置就到这里了,redis更多操作请检查官方文档,小伙伴有什么疑问欢迎给我留言哦~