深入浅出Redis05-Redis集群环境的配置
一、安装redis
1,下载redis最新版
从以下redis地址下载最新版本的redis,使用使用redis-3.2.9.tar版本。
http://download.redis.io/releases/
此次,介绍安装redis的环境, 以下是安装环境的详细信息。
Linux版本: CentOS 6.5
IP 地址 : 192.168.253.140
查看Linux版本,IP地址的命令:
cat /etc/issue
ifconfig
为了安装Redis环境,需要进行必要的测试,首先需要关闭Linux的防火墙。
# 关闭命令:
service iptables stop
# 永久关闭防火墙
chkconfig iptables off
两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status
2,需要gcc环境,如果没有执行命令安装gcc
yum install gcc-c++
3,下载redis3.0的源码包并上传至服务器
4,解压源码包
tar -zxvf redis-3.0..tar.gz
5,进入解压目录编译
make
6,安装redis
make install PREFIX=/usr/local/redis
二、启动redis
1,从redis-3.0.0文件中复制redis-conf到redis的安装目录中
2,然后修改redis.conf文件
daemonize yes
3,在bin目录下启动redis
./bin/redis-server redis.conf
注意:redis默认占用端口是6379 。
4,停止redis服务
./bin/redis-cli shutdown
5, 连接到 redis服务器
使用以下命令连接到redis远程服务器。
redis-cli -h 192.168.253.140 -p
参数解释:
-h 远程redis服务器的IP地址。
-p redis服务器对外开发的端口。
遇到问题:
1,开启远程登录连接。
从本地远程连接CentOS 服务器上的Redis,一直报错连接不成功。经过查询资料,发现原来redis默认只能localhost登陆,所以需要开启远程登陆。解决方法如下:
1)在redis的配置文件redis.conf中,找到bind对应的项,将bind 127.0.0.1 改成了bind 0.0.0.0 。代表着局域网内的所有计算机都能访问。
如果redis服务器启动了,先关闭它。
# 注释掉原有的bind项目
#bind 127.0.0.1 bind 0.0.0.0
band localhost 只能本机访问,局域网内计算机不能访问。
bind 局域网IP 只能局域网内IP的机器访问, 本地localhost都无法访问。
bind 0.0.0.0 表示本机和局域网内IP的机器都能访问。
2)重新启动redis服务,终于一切正常了,在本地连接上redis服务器后存储数据name ,可以在远程服务器正常显示。如下图所示:
三、redis集群的搭建
该集群中有三个节点,每个节点有一主一备。原本需要6台虚拟机,但是为了节省资源,可以在一台虚拟机上启动6个redis实例。在此搭建一个伪分布式的集群,使用6个redis实例来模拟。向着目标前进吧,just do it 。
1,安装ruby环境
yum install ruby
yum install rubygems
使用以下命令安装ruby的redis的接口
gem install redis
如果返回以下错误信息,表示无法安装redis接口,因为无法连接到gem服务器。
需要手工下载并安装:
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2..gem
还需要将redis集群管理工具redis-trib.rb上传至服务器。
2, 在/usr/local/redis目录下创建cluster目录
cd /usr/local/redis mkdir cluster
3,进入cluster目录,创建以下目录 7001,7002,7003,7004,7005,7006 。
cd /usr/local/redis/cluster
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
mkdir 7006
4,然后将/usr/local/redis/redis-3.*/redis.conf依次复制到7000 7002 7003 7004 7005 7006这6个目录
可以参考以下命令完成操作。
cp /usr/local/redis/redis.conf /usr/local/redis/cluster/
cp /usr/local/redis/redis.conf /usr/local/redis/cluster/
cp /usr/local/redis/redis.conf /usr/local/redis/cluster/
cp /usr/local/redis/redis.conf /usr/local/redis/cluster/
cp /usr/local/redis/redis.conf /usr/local/redis/cluster/
cp /usr/local/redis/redis.conf /usr/local/redis/cluster/
5,修改配置文件redis.conf
首先修改7001目录文件下的redis.conf配置文件
vi /usr/local/redis/cluster//redis.conf
修改配置文件中的下面选项
port
daemonize yes
cluster-enabled yes
cluster-config-file nodes7001.conf
cluster-node-timeout
appendonly yes
同样再对其它配置文件进行修改
vi /usr/local/redis/cluster/7002/redis.conf
vi /usr/local/redis/cluster/7003/redis.conf
vi /usr/local/redis/cluster/7004/redis.conf
vi /usr/local/redis/cluster/7005/redis.conf
vi /usr/local/redis/cluster/7006/redis.conf
注意:不同的目录配置不同的redis.conf中的port,cluster-config-file值。
6,启动6个redis
cd /usr/local/redis
./bin/redis-server /usr/local/redis/cluster/7001/redis.conf
./bin/redis-server /usr/local/redis/cluster//redis.conf
./bin/redis-server /usr/local/redis/cluster/7003/redis.conf
./bin/redis-server /usr/local/redis/cluster/7004/redis.conf
./bin/redis-server /usr/local/redis/cluster/7005/redis.conf
./bin/redis-server /usr/local/redis/cluster/7006/redis.conf
启动之后使用命令查看redis的启动情况 ps -ef|grep redis
[root@localhost redis]# ps -ef | grep redis
root 17243 1 0 13:25 ? 00:00:00 ./bin/redis-server 0.0.0.0:7001 [cluster]
root 17248 1 0 13:25 ? 00:00:00 ./bin/redis-server 0.0.0.0:7002 [cluster]
root 17256 1 0 13:26 ? 00:00:00 ./bin/redis-server 0.0.0.0:7003 [cluster]
root 17260 1 0 13:26 ? 00:00:00 ./bin/redis-server 0.0.0.0:7004 [cluster]
root 17264 1 0 13:26 ? 00:00:00 ./bin/redis-server 0.0.0.0:7005 [cluster]
root 17268 1 0 13:26 ? 00:00:00 ./bin/redis-server 0.0.0.0:7006 [cluster]
root 17275 17149 0 13:27 pts/0 00:00:00 grep redis
[root@localhost redis]#
看到以上信息说明都启动成功。
7,创建redis集群
cd /usr/local/redis ./redis-trib.rb create --replicas 1 192.168.253.140:7001 192.168.253.140:7002 192.168.253.140:7003 192.168.253.140:7004 192.168.253.140:7005 192.168.253.140:7006
命令的意义如下:
给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
简单来说, 以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
如果redis实例配置正常的话,返回如下信息,成功生成redis集群。注意:如果创建redis集群失败,只要把redis.conf中定义的 cluster-config-file 所在的文件删除,重新启动redis-server及运行redis-trib即可。
>>> Creating cluster
>>> Performing hash slots allocation on nodes...
Using masters:
127.0.0.1:
127.0.0.1:
127.0.0.1:
Adding replica 127.0.0.1: to 127.0.0.1:
Adding replica 127.0.0.1: to 127.0.0.1:
Adding replica 127.0.0.1: to 127.0.0.1:
M: 98ce3e1be69335521e5928d82f7ea0214a751d2b 127.0.0.1:
slots:- ( slots) master
M: f8856471eb35e874035d38c5bb54f2ff8987f665 127.0.0.1:
slots:- ( slots) master
M: 8ef8e2758c91327bc78f383e7303c0164fe47adb 127.0.0.1:
slots:- ( slots) master
S: 9a2ea466d8f3a4abac890ab752249e3eab0f4d74 127.0.0.1:
replicates 98ce3e1be69335521e5928d82f7ea0214a751d2b
S: e960ae156a4942437ef9e4d6bc07b1b162eaa697 127.0.0.1:
replicates f8856471eb35e874035d38c5bb54f2ff8987f665
S: 7a2046a101e338de2f78876b7798854e709a21fe 127.0.0.1:
replicates 8ef8e2758c91327bc78f383e7303c0164fe47adb
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 127.0.0.1:)
M: 98ce3e1be69335521e5928d82f7ea0214a751d2b 127.0.0.1:
slots:- ( slots) master
additional replica(s)
S: e960ae156a4942437ef9e4d6bc07b1b162eaa697 127.0.0.1:
slots: ( slots) slave
replicates f8856471eb35e874035d38c5bb54f2ff8987f665
S: 7a2046a101e338de2f78876b7798854e709a21fe 127.0.0.1:
slots: ( slots) slave
replicates 8ef8e2758c91327bc78f383e7303c0164fe47adb
M: 8ef8e2758c91327bc78f383e7303c0164fe47adb 127.0.0.1:
slots:- ( slots) master
additional replica(s)
M: f8856471eb35e874035d38c5bb54f2ff8987f665 127.0.0.1:
slots:- ( slots) master
additional replica(s)
S: 9a2ea466d8f3a4abac890ab752249e3eab0f4d74 127.0.0.1:
slots: ( slots) slave
replicates 98ce3e1be69335521e5928d82f7ea0214a751d2b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All slots covered.
[root@localhost redis]#
至此集群环境搭建成功了,遇到的问题终于解决了。: )
四、操作redis集群
1, 使用 redis-cli命令进入集群环境
使用redis-cli命令进入集群,注意: 输入redis-cli 命令时,附带的参数 -c 不能省略,详情看redis-cli的参考资料。
本地连接redis集群例子
cd /usr/local/redis ./bin/redis-cli -c -p 7001
远程连接redis集群 例子
redis-cli.exe -c -h 192.168.253.140 -p
2, 停止集群
cd /usr/local/redis ./bin/redis-cli redis-cli -p shutdown
./bin/redis-cli redis-cli -p shutdown
./bin/redis-cli redis-cli -p shutdown
./bin/redis-cli redis-cli -p shutdown
./bin/redis-cli redis-cli -p shutdown
./bin/redis-cli redis-cli -p shutdown
3,集群重启
有时候机器被重启了,需要重新启动集群,只需要将6台redis启起来,集群自动就会加载,恢复之前保存过的数据,不需要再次创建集群。
五、Jedis操作redis集群
1, example1
模拟的集群环境.在一台机器上启动多个redis..每个redis对应的是不同端口.在c192.168.253.140上启动的....总共3主3从 端口号对应的的是7001~7006。
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig; public class TestCluster {
@Test
public void test1() throws Exception {
JedisPoolConfig poolConfig = new JedisPoolConfig();
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
HostAndPort hostAndPort = new HostAndPort("192.168.253.140", );
HostAndPort hostAndPort1 = new HostAndPort("192.168.253.140", );
HostAndPort hostAndPort2 = new HostAndPort("192.168.253.140", );
HostAndPort hostAndPort3 = new HostAndPort("192.168.253.140", );
HostAndPort hostAndPort4 = new HostAndPort("192.168.253.140", );
HostAndPort hostAndPort5 = new HostAndPort("192.168.253.140", );
nodes.add(hostAndPort);
nodes.add(hostAndPort1);
nodes.add(hostAndPort2);
nodes.add(hostAndPort3);
nodes.add(hostAndPort4);
nodes.add(hostAndPort5);
JedisCluster jedisCluster = new JedisCluster(nodes, poolConfig);//JedisCluster中默认分装好了连接池.
//redis内部会创建连接池,从连接池中获取连接使用,然后再把连接返回给连接池
String string = jedisCluster.get("a");
System.out.println(string);
}
}
六、使用redis-py-cluster模块操作redis集群
使用python操作redis集群,需要安装redis-py-cluster模块。使用以下命令安装。
pip install redis-py-cluster
2, 实例
from rediscluster import StrictRedisCluster
import sys def redis_cluster():
redis_nodes = [{'host':'192.168.253.140','port':},
{'host':'192.168.253.140','port':},
{'host':'192.168.253.140','port':},
{'host':'192.168.253.140','port':},
{'host':'192.168.253.140','port':},
{'host':'192.168.253.140','port':}
]
try:
redisconn = StrictRedisCluster(startup_nodes=redis_nodes)
except Exception as msg :
print( msg ) redisconn.set('name','admin')
redisconn.set('age',)
print( "name is: ", redisconn.get('name') )
print( "age is: ", redisconn.get('age') ) redisconn.flushdb() redis_cluster()
总结:
- 集群中各台机器的配置信息一致,Master/Slaver关系是在创建集群时由系统分配
- redis集群公用16384个slot,分配给不同的Master
- 每个key最终都会位于某一个slot,读取key时会先转向到某一个slot,然后读取其中的值
- 新增集群或减少集群(如新增或减少Master)会重新分配slot
补充资料:
1,Redis-cli使用时各参数的含义和使用方法
[root@localhost redis]# redis-cli --help
redis-cli 3.2. Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <hostname> Server hostname (default: 127.0.0.1).
-p <port> Server port (default: ).
-s <socket> Server socket (overrides hostname and port).
-a <password> Password to use when connecting to the server.
-r <repeat> Execute specified command N times.
-i <interval> When -r is used, waits <interval> seconds per command.
It is possible to specify sub-second times like -i 0.1.
-n <db> Database number.
-x Read last argument from STDIN.
-d <delimiter> Multi-bulk delimiter in for raw formatting (default: \n).
-c Enable cluster mode (follow -ASK and -MOVED redirections).
--raw Use raw formatting for replies (default when STDOUT is
not a tty).
--no-raw Force formatted output even when STDOUT is not a tty.
--csv Output in CSV format.
--stat Print rolling stats about server: mem, clients, ...
--latency Enter a special mode continuously sampling latency.
--latency-history Like --latency but tracking latency changes over time.
Default time interval is sec. Change it using -i.
--latency-dist Shows latency as a spectrum, requires xterm colors.
Default time interval is sec. Change it using -i.
--lru-test <keys> Simulate a cache workload with an - distribution.
--slave Simulate a slave showing commands received from the master.
--rdb <filename> Transfer an RDB dump from remote server to local file.
--pipe Transfer raw Redis protocol from stdin to server.
--pipe-timeout <n> In --pipe mode, abort with error if after sending all data.
no reply is received within <n> seconds.
Default timeout: . Use to wait forever.
--bigkeys Sample Redis keys looking for big keys.
--scan List all keys using the SCAN command.
--pattern <pat> Useful with --scan to specify a SCAN pattern.
--intrinsic-latency <sec> Run a test to measure intrinsic system latency.
The test will run for the specified amount of seconds.
--eval <file> Send an EVAL command using the Lua script at <file>.
--ldb Used with --eval enable the Redis Lua debugger.
--ldb-sync-mode Like --ldb but uses the synchronous Lua debugger, in
this mode the server is blocked and script changes are
are not rolled back from the server memory.
--help Output this help and exit.
--version Output version and exit. Examples:
cat /etc/passwd | redis-cli -x set mypasswd
redis-cli get mypasswd
redis-cli -r lpush mylist x
redis-cli -r -i info | grep used_memory_human:
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
redis-cli --scan --pattern '*:12345*' (Note: when using --eval the comma separates KEYS[] from ARGV[] items) When no command is given, redis-cli starts in interactive mode.
Type "help" in interactive mode for information on available commands
and settings. [root@localhost redis]#
2,往redis中缓存数据的时候,它怎么知道该缓存到哪个服务器上呢??
Redis 集群中内置了16384 个哈希槽,搭建集群时,每台服务器上已经分配了固定的哈希槽编号。当需要在 Redis 集群中放置一个key-value(数据) 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据求余的结果,把数据映射到不同的redis服务器上。
3,基本redis集群的操作命令:
redis 127.0.0.1:6379> info #查看server版本内存使用连接等信息
redis 127.0.0.1:6379> client list #获取客户连接列表
redis 127.0.0.1:6379> client kill 127.0.0.1:33441 #终止某个客户端连接
redis 127.0.0.1:6379> dbsize #当前保存key的数量
redis 127.0.0.1:6379> save #立即保存数据到硬盘
redis 127.0.0.1:6379> bgsave #异步保存数据到硬盘
redis 127.0.0.1:6379> flushdb #当前库中移除所有key
redis 127.0.0.1:6379> flushall #移除所有key从所有库中
redis 127.0.0.1:6379> lastsave #获取上次成功保存到硬盘的unix时间戳
redis 127.0.0.1:6379> monitor #实时监测服务器接收到的请求
redis 127.0.0.1:6379> slowlog len #查询慢查询日志条数
redis 127.0.0.1:6379> slowlog get #返回所有的慢查询日志,最大值取决于slowlog-max-len配置
redis 127.0.0.1:6379> slowlog get 2 #打印两条慢查询日志
redis 127.0.0.1:6379> slowlog reset #清空慢查询日志信息
更详细的命令请参考官网:http://redisdoc.com/
中文网站:http://www.redis.cn/commands.html
参考资料:
http://www.redis.cn/topics/cluster-tutorial.html
http://blog.csdn.net/myrainblues/article/details/25881535/
http://www.cnblogs.com/wuxl360/p/5920330.html
http://blog.csdn.net/yfkiss/article/details/38944179
http://diaocow.iteye.com/blog/1938032
http://www.cnblogs.com/guxiong/p/6270140.html
http://blog.csdn.net/ziele_008/article/details/51829429
centos配置ruby开发环境
https://my.oschina.net/u/1449160/blog/260764
http://www.cnblogs.com/gossip/p/5993401.html
java
http://blog.csdn.net/junlong750/article/details/51362423
http://www.cnblogs.com/huali/p/5810054.html
使用强大的可视化工具redislive来监控我们的redis
http://www.cnblogs.com/huangxincheng/archive/2016/06/08/5571185.html
理论知识:
http://www.cnblogs.com/wxd0108/p/5798498.html
redis集群密码设置
http://blog.csdn.net/jtbrian/article/details/53691540
深入浅出Redis05-Redis集群环境的配置的更多相关文章
- redis集群环境配置
为什么需要集群 redis是一个开源的 key->value 高速存储系统,但是由于redis单线程运行,在系统中,只能利用单核的性能 当redis的调用越来越频繁时,可能会出现redis过于繁 ...
- SpringBoot系列教程之Redis集群环境配置
之前介绍的几篇redis的博文都是基于单机的redis基础上进行演示说明的,然而在实际的生产环境中,使用redis集群的可能性应该是大于单机版的redis的,那么集群的redis如何操作呢?它的配置和 ...
- 带你自行搭建虚拟机和Redis集群环境,值得收藏!
前言: 我们看到分析 Redis 使用或原理的文章不少,但是完整搭建一套独立的 redis 集群环境的介绍,并不是很多或者说还不够详细. 那么,本文会手把手带着大家搭建一套 Redis 集群环境,Re ...
- Redis集群环境之linux搭建多机版---已完结,跟着一步一步来你就可以集群成功
上一篇踩着各种坑写了Redis集群环境之linux搭建单机版,这一篇准备就多机版集群进行搭建,主要目的一来是在上一篇的基础上进行精华提粹总结,二来是把单机版与多机版的区别进行记录. 首先软硬件环境: ...
- Redis集群环境搭建实践
0 Redis集群简介 Redis集群(Redis Cluster)是Redis提供的分布式数据库方案,通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.相比于主从复制.哨兵模式, ...
- centos7 快速搭建redis集群环境
本文主要是记录一下快速搭建redis集群环境的方式. 环境简介:centos 7 + redis-3.2.4 本次用两个服务6个节点来搭建:192.168.116.120 和 192.168.1 ...
- Redis 集群环境添加节点失败问题
最近在给公司网管系统Redis集群环境添加节点时候遇到一个问题,提示新增的Node不为空: [root@node00 src]# ./redis-trib.rb add-node --slave -- ...
- Springboot 2.0.x 集成基于Centos7的Redis集群安装及配置
Redis简介 Redis是一个基于C语言开发的开源(BSD许可),开源高性能的高级内存数据结构存储,用作数据库.缓存和消息代理.它支持数据结构,如 字符串.散列.列表.集合,带有范围查询的排序集,位 ...
- redis集群环境的搭建和错误分析
redis集群环境的搭建和错误分析 redis集群时,出现的几个异常问题 09 redis集群的搭建 以及遇到的问题
- CentOS7集群环境Elastic配置
CentOS7集群环境Elastic配置 (首先去官网下载elasticsearch的source code并解压到/usr/soft目录下) (以下默认root账户) 1.更改配置文件 文件路径:/ ...
随机推荐
- Linux 线程实现模型
1.Linux 线程的调度实现可以有两种模型, 一种是完全由进程负责,进程内启动一个线程调度器,由进程内的线程调度器完成调度. 缺点是:(1)各个线程自己加主动释放cpu的流程 (2)进程可能阻塞,达 ...
- C# 利用ZXing.Net来生成条形码和二维码
本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...
- 【linux】Can't connect to local MySQL server through socket和Plugin 'auth_socket' is not loaded报错
真的是一次吐血的经历,弄了两个多小时才弄好. 问题1:直接登陆root用户报错 ERROR 2002 (HY000): Can't connect to local MySQL server thro ...
- 键盘ascll码表
键盘ascll码表-自用
- MySQL5.7 搭建主从同步
性能更好的新服务器申请下来了,我们决定在2台新服务器上使用mysql5.7,并且使用主从同步.读写分离架构,很不幸这个任务落到了我的头上.读写分离是在业务代码中实现的,在此不做详述,介绍一下我搭建My ...
- Spark数据倾斜及解决方案
一.场景 1.绝大多数task执行得都非常快,但个别task执行极慢.比如,总共有100个task,97个task都在1s之内执行完了,但是剩余的task却要一两分钟.这种情况很常见. 2.原本能够正 ...
- ORACLE Index Lookup索引访问路径总结
在ORACLE中,索引访问/查找(Index Lookup)路径有五种方式,分别为INDEX UNIQUE SCAN.INDEX RANGE SCAN.INDEX FULL SCAN.INDEX FA ...
- PowerDesigner 12.5 汉化包-CSDN下载
来源 csdn积分下载的. 人们太小家子气,随随便便文件要那么多积分. 地址 链接: https://pan.baidu.com/s/1cwc24Y 密码: cr9k
- 移动端 input样式在安卓与ios上不同的解决方案
input{ -webkit-appearance:none; }
- Linux CFS调度器之pick_next_task_fair选择下一个被调度的进程--Linux进程的管理与调度(二十八)
1. CFS如何选择最合适的进程 每个调度器类sched_class都必须提供一个pick_next_task函数用以在就绪队列中选择一个最优的进程来等待调度, 而我们的CFS调度器类中, 选择下一个 ...