redis301集群安装详细步骤.docx
《redis301集群安装详细步骤.docx》由会员分享,可在线阅读,更多相关《redis301集群安装详细步骤.docx(13页珍藏版)》请在冰豆网上搜索。
![redis301集群安装详细步骤.docx](https://file1.bdocx.com/fileroot1/2022-11/26/14e5469e-4af8-4cc3-a659-799b466b386f/14e5469e-4af8-4cc3-a659-799b466b386f1.gif)
redis301集群安装详细步骤
redis3.0.0集群安装详细步骤
一:
关于rediscluster
1rediscluster的现状
目前redis支持的cluster特性(已亲测):
1):
节点自动发现
2):
slave->master选举,集群容错
3):
Hotresharding:
在线分片
4):
进群管理:
clusterxxx
5):
基于配置(nodes-port.conf)的集群管理
6):
ASK转向/MOVED转向机制.
2rediscluster架构
1)redis-cluster架构图
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster负责维护node<->slot<->value
2)redis-cluster选举:
容错
(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
(2):
什么时候整个集群不可用(cluster_state:
fail),当集群不可用时,所有对集群的操作做都不可用,收到((error)CLUSTERDOWNTheclusterisdown)错误
a:
如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态.
b:
如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
二:
rediscluster的使用
1安装rediscluster前的准备
1):
安装redis-cluster依赖:
redis-cluster的依赖库在使用时有兼容问题,在reshard时会遇到各种错误,请按指定版本安装.
确保系统安装zlib,否则geminstall会报(nosuchfiletoload--zlib)
#download:
zlib-1.2.6.tar
./configure
make
make install
(1)安装ruby:
version(1.9.2)
# ruby1.9.2
cd /path/ruby
./configure -prefix=/usr/local/ruby
make
make install
sudo cp ruby /usr/local/bin
(2)安装rubygem:
version(1.8.16)
# rubygems-1.8.16.tgz
cd /path/gem
sudo ruby setup.rb
sudo cp bin/gem /usr/local/bin
(3)安装gem-redis:
version(3.0.0)
gem install redis --version 3.0.0
#由于源的原因,可能下载失败,就手动下载下来安装
#download地址:
http:
//rubygems.org/gems/redis/versions/3.0.0
gem install -l /data/soft/redis-3.0.0.gem
2安装redis-cluster
cd /path/redis
make
sudo cp /opt/redis/src/redis-server /usr/local/bin
sudo cp /opt/redis/src/redis-cli /usr/local/bin
sudo cp /opt/redis/src/redis-trib.rb /usr/local/bin
三Redis集群部署(RedHat6.0)
(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)
1集群环境准备
主机1:
10.10.105.30(7001/7002/7003)
主机2:
10.10.105.50(8001/8002/8003)
2创建集群需要的目录
主机1:
10.10.105.30(path为redis程序所在目录,下同)
mkdir -p /path/cluster
cd /path/cluster
mkdir 7000
mkdir 7001
mkdir 7002
主机2:
10.10.105.50
mkdir -p /path/cluster
cd /path/cluster
mkdir 8000
mkdir 8001
mkdir 8002
3修改配置文件redis.conf
cp /path/redis3.0/redis.conf /path/cluster
vi redis.conf
##修改配置文件中的下面选项
port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到两台主机7000/7001/7002/8000/8001/7002目录下面
主机1:
10.10.105.30
cp /path/cluster/redis.conf /path/cluster/7000
cp /path/cluster/redis.conf /path/cluster/7001
cp /path/cluster/redis.conf /path/cluster/7002
主机2:
10.10.105.50
cp /path/cluster/redis.conf /path/cluster/8000
cp /path/cluster/redis.conf /path/cluster/8001
cp /path/cluster/redis.conf /path/cluster/8002
##注意:
拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称
4分别启动这6个redis实例
cd /path/cluster/7000
redis-server redis.conf
cd /path/cluster/7001
redis-server redis.conf
cd /path/cluster/7002
redis-server redis.conf
cd /path/cluster/8000
redis-server redis.conf
cd /path/cluster/8001
redis-server redis.conf
cd /path/cluster/8002
redis-server redis.conf
##启动之后使用命令查看redis的启动情况ps -ef|grep redis
如下显示则说明启动成功,注意显示信息的最后面要有”[cluster]”字样,否则表示redis未工作在集群模式。
bl460g8-30:
ps-ef|grepredis
rcsm98411008:
40?
00:
00:
19./redis-server*:
7001[cluster]
rcsm98481008:
40?
00:
00:
19./redis-server*:
7002[cluster]
rcsm98551008:
40?
00:
00:
19./redis-server*:
7003[cluster]
5执行redis的创建集群命令创建集群
cd /usr/local/redis3.0/src
./redis-trib.rb create --replicas 1 10.10.105.30:
7000 10.10.105.30:
7001 10.10.105.30:
7002 10.10.105.50:
8000 10.10.105.50:
8001 10.10.105.50:
8002
命令说明:
1redis-trib.rb:
是用ruby脚本语言编写的命令,脚本里面调用的是redis里面的集群指令,关于集群的指令在附录中有描述
2replicas:
代表创建master的同时也创建slave,slave的数量为1
如果看到下面的信息,则表示集群创建成功(图片供参考)
输入yes,然后配置完成。
至此redis集群即搭建成功!
6使用redis-cli命令进入集群环境
redis-cli -c –h10.10.105.30-p 7000
:
-c代表以支持集群的方式访问方式
:
-pport
:
-hhostname
7redis集群功能演示
/home/rcsm/zhangj/redis-3.0.1/src>:
./redis-cli-c-p8001-h10.10.105.50
10.10.105.50:
8001>setab
->Redirectedtoslot[15495]locatedat10.10.105.50:
8003
OK
10.10.105.50:
8003>setcd
->Redirectedtoslot[7365]locatedat10.10.105.30:
7002
OK
10.10.105.30:
7002>setef
->Redirectedtoslot[15363]locatedat10.10.105.50:
8003
OK
10.10.105.50:
8003>geta
"b"
10.10.105.50:
8003>getb
->Redirectedtoslot[3300]locatedat10.10.105.50:
8001
(nil)
10.10.105.50:
8001>getc
->Redirectedtoslot[7365]locatedat10.10.105.30:
7002
"d"
10.10.105.30:
7002>
/home/rcsm/zhangj/redis-3.0.1/src>:
附录
1) redis通用配置
#GENERAL
daemonize no
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
databases 16
dir /opt/redis/data
slave-serve-stale-data yes
#slave只读
slave-read-only yes
#not use default
repl-disable-tcp-nodelay yes
slave-priority 100
#打开aof持久化
appendonly yes
#每秒一次aof写
appendfsync everysec
#关闭在aof rewrite的时候对新的写操作进行fsync
no-appendfsync-on-rewrite yes
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
2)redis集群配置
cluster-enabled yes
#节点互连超时的阀值
cluster-node-timeout 15000
cluster-migration-barrier 1
slowlog-log-slower-than 10000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
3)redis特殊配置
#包含通用配置
include /opt/redis/redis-common.conf
#监听tcp端口
port 6379
#最大可用内存
maxmemory 100m
#内存耗尽时采用的淘汰策略:
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key accordingly to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
maxmemory-policy allkeys-lru
#aof存储文件
appendfilename "appendonly-6379.aof"
#rdb文件,只用于动态添加slave过程
dbfilename dump-6379.rdb
#cluster配置文件(启动自动生成)
cluster-config-file nodes-6379.conf
#部署在同一机器的redis实例,把 1em; line-height:
1.5;">auto-aof-rewrite搓开,防止瞬间fork所有redis进程做rewrite,占用大量内存
auto-aof-rewrite-percentage 80-100
4)cluster操作
cluster集群相关命令,更多redis相关命令见文档:
http:
//redis.readthedocs.org/en/latest/
集群
CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
节点
CLUSTER MEET 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET 从集群中移除 node_id 指定的节点。
CLUSTER REPLICATE 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
槽(slot)
CLUSTER ADDSLOTS [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER DELSLOTS [slot ...] 移除一个或多个槽对当前节点的指派。
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER SETSLOT NODE 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
CLUSTER SETSLOT MIGRATING 将本节点的槽 slot 迁移到 node_id 指定的节点中。
CLUSTER SETSLOT IMPORTING 从 node_id 指定的节点中导入槽 slot 到本节点。
CLUSTER SETSLOT STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
键
CLUSTER KEYSLOT 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT 返回槽 slot 目前包含的键值对数量。
CLUSTER GETKEYSINSLOT 返回 count 个 slot 槽中的键。