Redis笔记:redis基础使用和自带集群方案搭建

来源:互联网 发布:网络语 老司机 编辑:程序博客网 时间:2024/05/16 06:25
1 系统环境
系统:CentOS 7.0。
版本:Redis 3.2 Stable。
2 下载安装
官网:https://redis.io。
# wget http://download.redis.io/releases/redis-3.2.7.tar.gz
# tar -xzf redis-3.2.7.tar.gz
# cd redis-3.2.7
# make
# make install (make install后自动将bin加到path,之后可直接在命令行输入redis启动等相关指令)
注:需安装gcc。
3 基本操作
3.1 启动Redis服务器
# redis-server [--port 指定的端口] &
加&后缀后程序可在后台运行。
不指定端口的话,默认使用6379端口,端口可在redis.conf里配置。
3.2 关闭Redis服务器
# redis-cli [-p redis服务端口] shutdown
若Redis服务有指定端口,则关闭时需要指定相同的端口。
3.3 连接Redis服务器
启动Redis客户端连接服务器:
# redis-cli [-p redis服务端口]
3.4 远程连接
Redis提供多种方式来支持客户端的远程连接,本文使用设置密码验证的方式。
3.4.1 设置访问密码
在redis解压目录下,找到redis.conf,操作如下:
找到 #requirepass foobared,去掉注释,修改foobared为需要的密码。
注释掉bind 127.0.0.1:#bind 127.0.0.1。
重启Redis服务并指定conf文件:
# redis-server conf路径 [--port 指定的端口] &
3.4.2 远程连接
# redis-cli -h IP -p 端口 -a 密码
可成功连接并执行命令。
4 Java连接redis
本例使用Jedis远程连接redis服务器,Jedis下载:
http://repo1.maven.org/maven2/redis/clients/jedis/2.1.0/jedis-2.1.0-sources.jar
示例代码如下:
Jedis jedis = new Jedis("192.168.1.210", 9999);
jedis.auth("myredispassword");
String value = jedis.get("foo");
jedis.close();
System.out.println(value);
5 Redis集群搭建
本例集群结构:6主6从,一个集群需要最少3个主节点。
IP Port
192.168.1.210 7001 7002 7003 7004 7005 7006
192.168.1.211 7001 7002 7003 7004 7005 7006
5.1 方案1:Redis Cluster(官方3.0版本以上自带的集群方案)
官方教程:https://redis.io/topics/cluster-tutorial 
中文翻译参考:http://ifeve.com/redis-cluster-tutorial/ 
5.1.1 创建集群目录
在合适的位置创建用于保存集群数据的目录,目录名用端口号命名,如:
192.168.1.210:
redis-my-cluster/7001
……
redis-my-cluster/7006
5.1.2 创建配置集群节点文件
开启集群模式只需打开cluster-enabled配置项即可。每一个redis实例都包含一个配置文件,默认是nodes.conf,用于存储此节点的一些配置信息。这个配置文件由redis集群的节点自行创建和更新,不能由人手动地去修改。
最小的redis集群节点的配置文件内容:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
在7001-7006的每个目录中创建配置文件redis.conf,内容就用上面的最简配置做模板,注意修改端口号,改为跟目录一致的端口。
5.1.3 启动节点
依次进入每个节点目录,启动redis实例,如:
# cd /tools/redis-my-cluster/7001
# redis-server redis.conf &
启动后将在目录下生成aof文件和nodes.conf文件。
查看启动的redis实例:
# ps -ef | grep redis
查看redis监听端口:
# netstat -tnlp | grep redis
5.1.4 安装ruby和redis接口
使用redis自带的redis-trib.rb工具,将启动的节点组成集群。redis-trib是一个用ruby写的脚本,用于给各节点发指令创建集群、检查集群状态或给集群重新分片等。redis-trib在Redis源码的src目录下,需要gem redis来运行redis-trib。
安装ruby:
# yum -y install ruby ruby-devel rubygems rpm-build
使用 gem 命令安装 redis接口:
# gem install redis
安装后可以在/usr/local/share/gems/gems路径下找到安装的组件。
gem查看组件安装路径:
# gem environment
RubyGems Environment:
  ……
  - INSTALLATION DIRECTORY: /usr/local/share/gems
  ……
5.1.5 基于启动的节点创建集群
本地模式创建集群(无身份验证配置):
# ./redis-trib.rb create --replicas 1 \
127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 \
127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
本地模式创建集群(添加密码身份验证):
本例里每台redis节点使用同样的密码添加身份验证,添加配置如下:
requirepass myredispassword
masterauth myredispassword
修改gem的redis工具的client.rb文件,修改passord的值为上面的值(myredispassword)
本例中client.rb文件位于/usr/local/share/gems/gems/redis-3.3.3/lib/redis下。
class Redis
  class Client
    DEFAULTS = {
      :url => lambda { ENV["REDIS_URL"] },
      :scheme => "redis",
      :host => "127.0.0.1",
      :port => 6379,
      :path => nil,
      :timeout => 5.0,
      :password => "myredispassword",
      :db => 0,
      :driver => nil,
      :id => nil,
      :tcp_keepalive => 0,
      :reconnect_attempts => 1,
      :inherit_socket => false
}
……
创建集群:
创建集群前需先删掉appendonly.aof和nodes.conf文件:
# rm -rf /tools/redis-my-cluster/7001/appendonly.aof
……
# ./redis-trib.rb create --replicas 1 \
192.168.1.210:7001 192.168.1.210:7002 192.168.1.210:7003 \
192.168.1.210:7004 192.168.1.210:7005 192.168.1.210:7006
集群成功创建。
网络模式创建集群(适用于多服务器,添加密码身份验证):
参考以上步骤,每台服务器的配置一致(特别是密码),则可使用如下脚本创建多服务器redis集群:
# ./redis-trib.rb create --replicas 1 \
192.168.1.210:7001 192.168.1.210:7002 192.168.1.210:7003 \
192.168.1.210:7004 192.168.1.210:7005 192.168.1.210:7006 \
192.168.1.211:7001 192.168.1.211:7002 192.168.1.211:7003 \
192.168.1.211:7004 192.168.1.211:7005 192.168.1.211:7006
5.1.6 redis-cli连接集群
连接集群里的任何一个端口都可以,记得加 -c 表示连接集群:
# redis-cli -c -a myredispassword -p 7001
之后即可执行redis命令。
5.1.7 redis-cli关闭集群
依次关闭各个redis实例,并删除每个实例目录下的nodes.conf文件。如:
# redis-cli -a myredispassword -p 7001 shutdown
# rm -rf /tools/redis-my-cluster/7001/nodes.conf
# rm -rf /tools/redis-my-cluster/7001/appendonly.aof
5.1.8 Java连接redis集群
本例使用Jedis连接集群,jedis需用到commons-pool2的jar包。示例代码如下:
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
for (int i = 1; i <= 3; i++) {
jedisClusterNodes.add(new HostAndPort("192.168.1.210", 7000 + i));
}
JedisCluster cluster = new JedisCluster(jedisClusterNodes, 3000, 3000, 5, "myredispassword", new GenericObjectPoolConfig());
//JedisCluster cluster = new JedisCluster(new HostAndPort("192.168.1.210", 7001), 3000, 3000, 5, "myredispassword", new GenericObjectPoolConfig());
String value2 = cluster.get("foo");
cluster.close();
System.out.println(value2);
5.2 方案2:Twemproxy(twitter开源方案)
6 常见问题
6.1 Could not connect to Redis at 192.168.1.211:7001: No route to host
防火墙拦截,开放redis的连接端口即可。
7 附录

0 0
原创粉丝点击