Redis 集群的工作原理

Redis Cluster中的各个节点之间保持相互连接,并且彼此之间可以通信,客户端随意连接到任何一个集群节点就能将整个Redis集群作为一个整体来访问,同时客户端也无需知道Redis Cluster将其提交的数据存入哪个Redis节点中,数据存储完全由Redis Cluster根据自己的算法来决定。在Redis Cluster中,数据被分散存储到不同的Redis节点上,Redis Cluster并没有采用一致性HASH来分配数据存放到不同的节点,而是采用了一种称为哈希槽(HASHSlot)的技术来分配数据。

为了保证数据的高可用,Redis Cluster用到了Master-Slave的主从数据复制模式,即为每个Master都设置一个或多个Slave, Master负责数据存取,而Slave负责数据的同步复制,当Master故障时,其中的某个Slave会被提升为Master。假如有三个节点,且没有为节点设置Slave,假如其中一台节点服务器故障,则该节点上的数据将无法访问,因此从高可用角度考虑,需要在Redis Cluster中设置Master节点和Slave节点,假设集群中有A、B、C三个主节点,同时分别为其设置了A1、B1、C1三个Slave节点,此时如果B节点故障,则集群会将B1节点选取为Master节点继续提供服务,当B节点恢复之后,它就变成了B1的Slave节点。

Redis集群的优势
自动分割数据到不同的节点上,整个集群的部分节点失败或者不可达的情况下能够继续处理命令。Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个Key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。

Redis 集群的搭建

假如:集群中具有A、B、C三个redis节点服务器,节点A包含0到5500号哈希槽,节点B包含5501到11000号哈希槽,节点C包含11001到16384号哈希槽。
如果节点B故障,整个集群就会因缺少5501-11000这个范围的槽而不可以用,所以为每个节点添加一个从节点A1、B1、C1,整个集群便有三个master节点和三个slave节点组成,在节点B故障不可用后,集群选举B1位新的主节点继续服务,当B和B1都失败后,集群将不可用。

准备6台centos7.6,实验环境,不需要上网,这里选用仅主机VM1,配置固定IP

1、安装Redis

(1) 配静态IP地址(6个节点同步操作)

# vi /etc/sysconfig/network-scripts/ifcfg-ens33
dhcp 改为 static
ONBOOT=no 改为yes
添加:
IPADDR=192.168.100.11
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

# systemctl restart network
# ping 192.168.100.1

(2)关闭防火墙和核心防护(6个节点同步操作)

# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vi /etc/selinux/config 
改为 SELINUX=disabled

(3)配本地yum 源(6个节点同步操作)

挂载光盘,永久挂载
# mount /dev/cdrom /mnt
# df -h
# vi /etc/fstab
末行添加:
/dev/cdrom  /mnt  iso9660   defaults  0 0

# cd /etc/yum.repos.d/
# mkdir backup          
# mv C* backup/        
# cp backup/CentOS-Base.repo local.repo
# vi  local.repo 
删除 写入
[centos]
name=CentOS
baseurl=file:///mnt
gpgcheck=0
enabled=1

# yum clean all
# yum makecache
# init 6

redis集群注册到nacos redis怎么做的集群_redis


(4)解压源码包,编译安装(6个节点同步操作)

安装基本命令环境
# yum -y install net-tools vim bash-completion
# yum -y install gcc gcc-c++ make cmake pcre pcre-devel expat-devel perl 

多种方法可上传解压源码包,这里用samba命令共享 上传解压
# mount.cifs //192.168.100.1/share  /mnt
# df -h
# cd /mnt/
# tar zxvf redis-5.0.4.tar.gz -C /usr/src/
# cd /usr/src/redis-5.0.4/
# make        
# make PREFIX=/usr/local/redis install    

设置Redis相关配置文件
# ln -s /usr/local/redis/bin/* /usr/local/bin/
# cd /usr/src/redis-5.0.4/utils/
# ./install_server.sh 
回车......
Please select the redis executable path [/usr/local/bin/redis-server] 手动输入  /usr/local/bin/redis-server  
回车
2、修改配置文件(6个节点同步操作)
# vi /etc/redis/6379.conf
bind 20.0.0.40                          --70行 删除原来的127.0.0.1,添加各主机对应IP地址
logfile /var/log/redis_6379.log              --不改
daemonize yes                                --不改。独立守护进程启动
port 6379                                    --不改。6379端口
cluster-enabled yes                          --839行 前的#号去掉。打开集群 
cluster-config-file nodes-6379.conf          --847行 前的#号去掉。集群配置文件名称
cluster-node-timeout 15000                   --853行 前的#号去掉。集群超时时间设置
cluster-require-full-coverage no             --930行 前的#号去掉, yes改成no
appendonly  yes		                         --700行 no改为yes , 开启持久化

# /etc/init.d/redis_6379 restart       启动redis
# netstat -antp | grep  6379

redis集群注册到nacos redis怎么做的集群_redis集群注册到nacos_02


redis集群注册到nacos redis怎么做的集群_redis_03


redis集群注册到nacos redis怎么做的集群_redis_04


redis集群注册到nacos redis怎么做的集群_redis_05


redis集群注册到nacos redis怎么做的集群_redis集群注册到nacos_06


redis集群注册到nacos redis怎么做的集群_redis_07

3、下载依赖包
# yum -y install ruby rubygems 
# cd /abc/redis
# cp redis-3.2.0.gem /opt
# cd /opt
# gem install redis --version 3.2.0	装编排工具
# cd /usr/src/redis-5.0.4/src/
# redis-cli --cluster create --cluster-replicas 1 192.168.100.11:6379 192.168.100.12:6379 192.168.100.13:6379 192.168.100.14:6379 192.168.100.15:6379 192.168.100.16:6379
..............
Can I set the above configuration? (type 'yes' to accept): 输入   yes

redis集群注册到nacos redis怎么做的集群_数据_08


#redis-cli --cluster check 20.0.0.40:6379 --查看群集状态

redis集群注册到nacos redis怎么做的集群_数据_09

4、测试集群
# redis-cli -h 192.168.100.12 -p 6379 -c     --远程连接Redis数据库
20.0.0.41:6379> set centos 7.6                            
20.0.0.41:6379> quit 

# redis-cli -h 192.168.100.11 -p 6379 -c     --远程连接Redis数据库
20.0.0.42:6379> get centos
"7.6"    
20.0.0.42:6379> cluster info      --查看集群状态
cluster_state:OK
20.0.0.42:6379> cluster nodes     --查看节点信息