使用两台机器,搭建redis三主三从的集群环境,我同时在两台机器上安装
IP:192.168.3.102和192.168.3.10
1.安装环境依赖
我安装的时候,官网的最新版是6.0.5,但是安装错误,本人Linux知识有限,故降版本进行安装,5.0.8
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
tar -zxf ./redis-5.0.8.tar.gz
3.编译安装
cd redis-6.0.5
make MALLOC=libc
make install
cd /usr/local/bin/
检查/usr/local/bin/下是否有如下图的几个文件,没有的话切换到redis的src目录复制,执行一下命令:
cp redis-server redis-cli redis-sentinel redis-benchmark redis-check-aof redis-check-rdb /usr/local/bin/
4.配置内核参数,避免数据被截断
sysctl -w vm.overcommit_memory=1
5.创建多个实例的文件夹
cd /usr/local/
mkdir redis-cluster
cd redis-cluster/
mkdir 7000 7001 7002
6.修改配置文件
将原有的配置文件拷贝到之前创建的各个实例的目录中
cd /usr/local/redis-5.0.8/
cp redis.conf ../redis-cluster/7000
cp redis.conf ../redis-cluster/7001
cp redis.conf ../redis-cluster/7002
vi /usr/local/redis-cluster/7000/redis.conf
通用的配置
bind 192.168.3.102 #设置当前服务器的IP
protected-mode no #不同的服务器进行节点的联通,不能设为yes
daemonize yes #设置后台运行redis
appendonly yes #aof日志开启,每次进行写操作都记录日志
cluster-enabled yes #开启集群
cluster-node-timeout 15000 #设置请求超时时间,默认为15秒
不同实例不同的配置
port 7000
pidfile /var/run/redis_7000.pid
logfile /var/log/redis/redis_7000.log
dbfilename dump_7000.rdb
appendfilename "applendonly_7000.aof"
cluster-config-file nodes_7000.conf
7.启动测试
./redis-server /usr/local/redis-cluster/7000/redis.conf
./redis-server /usr/local/redis-cluster/7001/redis.conf
./redis-server /usr/local/redis-cluster/7002/redis.conf
使用ps -ef|grep redis | grep cluster查看是否都启动成功
8.防火墙开通策略,防火墙关闭无需配置
firewall-cmd --zone=public --add-port=7000-7002/tcp --permanent
firewall-cmd --zone=public --add-port=17000-17002/tcp --permanent
注意:必须开集群总线端口,集群总线端口=端口号 +10000,例:7000的集群总线端口是17000。这个集群总线端口不开放,集群的时候外部服务器的节点添加不进来
9.验证服务
telnet 192.168.3.10X 700X
10.安装ruby环境
yum -y install ruby rubygems
gem sources -a http://ruby.taobao.org/
12.创建集群
cd /usr/local/bin/
/redis-cli --cluster create 192.168.3.102:7000 192.168.3.102:7001 192.168.3.102:7002 192.168.3.103:7000 192.168.3.103:7001 192.168.3.103:7002 --cluster-replicas 1
注意:Redis5.0使用./redis-cli 命令创建集群
屏幕出现type 'yes' to accept,输入 yes ,就是接受自动分配的三主三从
出现以下内容代表成功!
13.连接验证
redis-cli -h 192.168.33102 -c -p 7000
info replication
查看集群信息
cluster info
查看所有集群节点
cluster nodes
至此集群搭建完成。
篇外(上述已配置完集群,下述为参考操作):(1)手动在slave节点上指定master节点,把当前节点设置为node_id的slave,即指定当前节点的master节点,在每个slave节点上执行:cluster replicate masterid(可使用cluster nodes查看)
(2)把集群配置写入磁盘,每个节点都需要执行:cluster saveconfig
总结:
1、 去中心化,分片存储,把所有的物理节点映射到[0-16383]共16384个slot(槽位)上,并不一定平均分配。
2、 Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
3、 支持主从机制,一个master可以有一个或多个从节点来保证集群的高可用性。
4、 master宕机需要经过集群中的所有master投票,如果有半数以上节点通信超时,则认为当前master宕掉。
5、 如果Cluster集群中的master没有slave,那么任意一台master宕掉后,集群不可用。
6、 集群如果超多半数以上master挂掉,无论是否有slave,集群进入fail状态。
7、 slave节点不会分配槽位
8、 Cluster集群最多支持1000个节点