redis集群

配置redis高可用集群:redis集群规定至少有3台master,因此最少需要6台redis主机。

1、环境准备:
通过一台管理主机(MGM)对redis集群进行管理,MGM可以在一台redis服务器上,也可以是单独的主机。
redis集群_第1张图片
client:192.168.4.50
MGM:192.168.4.100
A:192.168.4.51,redis端口6351
B:192.168.4.52,redis端口6352
C:192.168.4.53,redis端口6353
D:192.168.4.54,redis端口6354
E:192.168.4.55,redis端口6355
F:192.168.4.56,redis端口6356

2、配置MGM管理主机:(192.168.4.100)

# 集群是通过ruby编写的管理脚本进行管理的,
# redis中有编写好的脚本redis-4.0.8/src/redis-trib.rb

yum -y install ruby rubygems	#ruby是解释器,rubygems用于安装gem软件
gem install redis-3.2.1.gem

tar -zxvf redis-4.0.8.tar.gz	#解压redis源码包
cd  redis-4.0.8/src/
cp  redis-trib.rb   /root/bin/ #放到/root/bin下方便直接使用
chmod  +x   /root/bin/redis-trib.rb	#赋予执行权限
redis-trib.rb   help  #查看命令帮助

3、创建集群:

# 为每台redis服务器开启redis集群功能,并且启动redis服务

①、开启redis集群功能:(redis服务器上)
vim /etc/redis/6379.conf
bind 192.168.4.51        #修改ip
port 6351        #修改端口(可选配置)
cluster-enabled yes     #启用集群功能,814行左右
cluster-config-file nodes-6379.conf #存储集群信息的配置文件,822行左右
cluster-node-timeout 5000        #集群节点通信超时时间,828行左右

②、启动redis服务:(redis服务器上)
rm -fr /var/lib/redis/6379/*	#清空redis数据

vim  +43 /etc/init.d/redis_6379	#修改启动脚本
$CLIEXEC -h 192.168.4.51 -p 6351 shutdown

/etc/init.d/redis_6379 start	#启动redis服务
# 集群配置文件(nodes-6379.conf)会在启动服务的时候自动在数据库目录下生成

netstat -utnlp  | grep redis-server	#查看redis端口,一个是redis本身的,一个是集群的

③、创建集群:(在MGM上运行ruby脚本)
redis-trib.rb create  --replicas 1 \	
192.168.4.51:6351  192.168.4.52:6352  192.168.4.53:6353 \
192.168.4.54:6354  192.168.4.55:6355  192.168.4.56:6356
# 一般选择前3个当做master
# --replicas 1 表示一台master配置一台slave
# master对应的slave是随机分配的
# 集群创建完毕之后,只会为主服务器分配槽(slot)用于存取数据,从服务器没有槽

④、检查集群信息:(MGM上)
# ip可以是集群中的任意ip,端口是ip对应的端口
redis-trib.rb info 192.168.4.51:6351 #查看集群信息
redis-trib.rb check 192.168.4.51:6351 #检测集群,详细信息

四、client访问集群:(192.168.4.50)

redis-cli  -c  -h 192.168.4.51 -p 6351
# -c表示集群,ip可以是集群中的任意ip,端口是ip对应的端口
xxx> set name bob	#存数据
xxx> get name		#取数据

五、集群存取数据的方式:

前面提到过,在集群创建完毕之后会为每一个master分配对应范围的槽(slot)
存取数据的时候会根据对应的key算出一个槽的值,然后进行存取
数据只会存到master主机当中,slave会自动从master中同步数据
槽的编号是:0~16383
key--->crc16--->hash值---->槽值		#hash值对16383取余

六、故障

master发生故障以后,与其对应的slave会自动升级成为master
当主机故障被修复之后,会自动成为当前master的slave,并且自动同步数据
一对主从仅能坏一个,如果master和slave全部故障,则丢失数据

写总结的第四十八天!!!

补充:

1. 主从同步无磁盘复制:
master在内存中直接创建rdb文件,然后发送给slave,无需落盘
vim /etc/redis/6379.conf
	repl-diskless-sync no		# 349行,开启无磁盘复制
	repl-diskless-sync-delay 5		# 361行,等待5秒钟开始复制


2. 过期key的处理:
slave不会处理过期的key,当master的一个key过期了(某个key被淘汰了),会向slave发送一个模拟的del命令,slave会删除对应的key。

你可能感兴趣的:(redis集群)