Redis Cluster .0搭建与使用

 介绍:
特性:使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现:
一个 Redis 集群包含 个哈希槽(hash slot),数据库中的每个键都属于这16384个哈希槽的其中一个,
使用公式 CRC16(key) % 来计算键 key 属于哪个槽,其中 CRC16(key)语句用于计算键 key 的 CRC16 校验和 举例:一个集群中三主节点,如何分配哈希槽
节点A负责处理0号 至 5500号哈希槽
节点B负责处理5501 至 11000号哈希槽
节点C负责处理11001 至 号哈希槽 注意:其中的A B C 都可以有N个从,所以当A挂掉后 A的slave自动转换为master ,A的所有slave全部挂掉 集群停止服务 优点:
. 一个可以在多个节点之间进行数据共享的方案; . 通过分区(partition)来提供一定程度的可用性(availability)即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。 缺点:
. 不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据,
并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为; Redis Cluster 环境搭建 一. 下载redis
wget http://download.redis.io/releases/redis-3.0.0.tar.gz 二. 解压,安装
tar zxvf redis-3.0..tar.gz
cd redis-3.0.
make && make install 三. 配置文件处理
mkdir /usr/local/redis/ /usr/local/redis/ /usr/local/redis/ /usr/local/redis/ /usr/local/redis/ /usr/local/redis/
cp /redis_install_dir/redis.conf /usr/local/redis//redis.conf
cp /redis_install_dir/redis.conf /usr/local/redis//redis.conf
cp /redis_install_dir/redis.conf /usr/local/redis//redis.conf
cp /redis_install_dir/redis.conf /usr/local/redis//redis.conf
cp /redis_install_dir/redis.conf /usr/local/redis//redis.conf
cp /redis_install_dir/redis.conf /usr/local/redis//redis.conf
vi /usr/local/redis//redis.conf
port
daemonize yes
cluster-enabled yes ---用于开实例的集群模式
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes vi /usr/local/redis//redis.conf
....... 四。启动redis
[root@localhost redis]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf &
[root@localhost redis]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf &
[root@localhost redis]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf &
[root@localhost redis]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf &
[root@localhost redis]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf &
[root@localhost redis]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf & [root@localhost redis]# ps -ef|grep redis
root : ? :: /usr/local/redis/src/redis-server 10.100.100.82: [cluster]
root : pts/ :: /usr/local/redis/src/redis-server 10.100.100.82: [cluster]
root : pts/ :: /usr/local/redis/src/redis-server 10.100.100.82: [cluster]
root : pts/ :: /usr/local/redis/src/redis-server 10.100.100.82: [cluster]
root : pts/ :: /usr/local/redis/src/redis-server 10.100.100.82: [cluster]
root : pts/ :: /usr/local/redis/src/redis-server 10.100.100.82: [cluster] 五.执行命令创建集群,首先安装依赖,否则创建集群失败。
[root@localhost redis]# yum install ruby rubygems -y 安装gem-redis
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.2.gem --no-check-certificate
gem install redis-3.2.2.gem
[root@localhost redis]# cp redis/src/redis-trib.rb /usr/local/bin/redis-trib 六.创建集群
[root@localhost redis]# /usr/local/redis/src/redis-trib.rb create --replicas 10.100.100.82: 10.100.100.82: 10.100.100.82: 10.100.100.82: 10.100.100.82: 10.100.100.82:
命令的意义如下:
set-timeout host:port milliseconds
add-node new_host:new_port existing_host:existing_port
--master-id <arg>
--slave
fix host:port
help (show this help)
del-node host:port node_id
import host:port
--from <arg>
check host:port
call host:port command arg arg .. arg
create host1:port1 ... hostN:portN
--replicas <arg>
reshard host:port
--yes
--to <arg>
--from <arg>
--slots <arg> 选项 --replicas 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
简单来说, 以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。 输入 yes 并按下回车确认之后, 集群就会将配置应用到各个节点, 并连接起(join)各个节点 —— 也即是, 让各个节点开始互相通讯: 七。测试
[root@localhost redis-3.2.]# /usr/local/redis-3.2./src/redis-cli -c -h 10.100.100.82 -p
10.100.100.82:> set names shunxiao
-> Redirected to slot [] located at 10.100.100.82:
OK
10.100.100.82:> get names
"shunxiao"
10.100.100.82:> exit
[root@localhost redis-3.2.]# /usr/local/redis-3.2./src/redis-cli -c -h 10.100.100.82 -p
10.100.100.82:> get names
-> Redirected to slot [] located at 10.100.100.82:
"shunxiao"
10.100.100.82:> exit 八。状态
[root@redis-server ~]# ps -ef | grep
root : ? :: redis-server *: [cluster]
root : pts/ :: grep
[root@redis-server ~]# kill [root@redis-server ~]# redis-cli -c -p cluster nodes
2d03b862083ee1b1785dba5db2987739cf3a80eb 127.0.0.1: myself,master - connected -
0456869a2c2359c3e06e065a09de86df2e3135ac 127.0.0.1: master - connected -
37b251500385929d5c54a005809377681b95ca90 127.0.0.1: master - connected -
e2e2e692c40fc34f700762d1fe3a8df94816a062 127.0.0.1: slave 2d03b862083ee1b1785dba5db2987739cf3a80eb connected
2774f156af482b4f76a5c0bda8ec561a8a1719c2 127.0.0.1: master,fail - disconnected 注意这里 已经停止服务
9923235f8f2b2587407350b1d8b887a7a59de8db 127.0.0.1: slave 0456869a2c2359c3e06e065a09de86df2e3135ac connected 好了服务端已经妥妥的现在开始客户端 今天采用: ngx-lua连接Redis Cluster  准备材料:
  下载   https://github.com/cuiweixie/lua-resty-redis-cluster 编译so扩展文件:
1. 进入到luajit创建test目录
   [root@www luajit]#cd /usr/local/openresty/luajit
   [root@www luajit]#mkdir test
   
2. 将redis_slot.c文件移动到test目录
    [root@www luajit]#mv /root/lua-resty-redis-cluster/redis_slot.c ./test 3. ldd命令用于打印程序或者库文件所依赖的共享库列表。
    [root@www luajit]#  ldd  lib/libluajit-5.1.so
        linux-vdso.so.1 =>  (0x00007ffff0b29000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f9ca1d34000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f9ca1b30000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f9ca1919000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f9ca1585000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f9ca2235000)
 
 
 4.编译
  [root@www luajit]# gcc -fPIC -c ./test/redis_slot.c -o ./test/redis_slot.o -L ../ -lluajit-5.1 -I ./include/luajit-2.1/
   
     参数说明:
            -c  只是编译不链接,生成目标文件”.o"
            -S  只是编译不汇编,生成汇编代码   
            -E  只进行预编译,不做其他处理     
            -g  在可执行程序中包含标准调试信息  
            -o file 把输出文件输出到file里   
            -v  打印出编译器内部编译各过程的命令行信息和编译器的版本
            -I dir  在头文件的搜索路径列表中添加dir目录   (即: -I ./include/luajit-2.1/ 表示头文件的搜索路径 )
            -L dir  在库文件的搜索路径列表中添加dir目录  (即:  -L ../  表示要连接的库在上级目录中)
            -static   链接静态库      
            -l   连接名为library的库文件  (即: 编译器查找 名字为 libluajit-5.1.so  的 动态连接库)
            -fPIC  表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
            -shared  该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件
 
 
 
 
 5.加入到共享库列表
  [root@www luajit]# gcc -shared redis_slot.o -o libluaredis.so
 
 
 注意:常见问题
   第一点:引入so文件的名字 改成 上面第五步生成的so文件的名字
 local clib = load_shared_lib("libluaredis.so")  
 
   第二点: 加载so文件的位置
  lua_package_cpath "/usr/local/openresty/lualib/?.so;/usr/local/openresty/luajit/test/?.so";
 

Redis Cluster笔记的更多相关文章

  1. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  2. redis 学习笔记-cluster集群搭建

    一.下载最新版redis 编译 目前最新版是3.0.7,下载地址:http://www.redis.io/download 编译很简单,一个make命令即可,不清楚的同学,可参考我之前的笔记: red ...

  3. 在 Windows 上测试 Redis Cluster的集群填坑笔记

    redis 集群实现的原理请参考http://www.tuicool.com/articles/VvIZje       集群环境至少需要3个节点.推荐使用6个节点配置,即3个主节点,3个从节点. 新 ...

  4. [redis] 与redis cluster有关的学习笔记

    主要是以下三个官方文档,只略读了前两个,第三个还没有读. <redis cluster tutorial> <redis sentinel> <redis cluster ...

  5. Redis cluster Specification 笔记

    ref: http://redis.io/topics/cluster-spec 1. 设计目标: 高性能:线性扩展:不支持合并操作:写操作安全:小概率丢弃:(对于每个key)只要有一个slave工作 ...

  6. K8S部署Redis Cluster集群(三主三从模式) - 部署笔记

    一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...

  7. Redis Cluster集群搭建与应用

    1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...

  8. Redis 学习笔记4: Redis 3.2.1 集群搭建

    在CenOS 6.7 linux环境下搭建Redis 集群环境 1.下载最新的Redis版本 本人下载的Redis版本是3.2.1版本,下载之后,解压,编译(make): 具体操作可以参考我的博文:R ...

  9. 43 【redis cluster】

    有两篇文章不错,可以看下: 1,初步理解redis cluster:https://blog.csdn.net/dc_726/article/details/48552531 2,仔细理解redis ...

随机推荐

  1. 如何基于Spring Boot搭建一个完整的项目

    前言 使用Spring Boot做后台项目开发也快半年了,由于之前有过基于Spring开发的项目经验,相比之下觉得Spring Boot就是天堂,开箱即用来形容是绝不为过的.在没有接触Spring B ...

  2. Percona XtraBackup 实现全备&增量备份与恢复【转】

    percona-xtrabackup主要是有两个工具,其中一个是xtrabackup,一个是innobackupex,后者是前者封装后的一个脚本.在针对MySQL的物理备份工具中,大概是最流行也是最强 ...

  3. 05 Diagnostics 诊断

    Diagnostics 诊断 Introduction 介绍 Profiling 分析 Tracing 跟踪 Debugging 调试 Runtime statistics and events 运行 ...

  4. Vue项目之IE下打开页面是空白

    原因是:Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API ,比如 Iterator.Generator.Set.Maps.Proxy.Reflect.Sym ...

  5. cbow&&skipgram详细

    前面:关于层次huffman树和负例采样也要知道的,这里就不详细写了 来源于:https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=224 ...

  6. MySQL学习笔记:时间差

    1.MySQL计算同一张表中同一列的时间差,同一个id,有多个时间,求出每个id最早时间和最晚时间之间的差值. 原始表如下: 查询语句: SELECT id, MAX(TIME), MIN(TIME) ...

  7. jmock2.5 基本教程

    目录 第0章 概述 第1章 jmock初体验 第2章 期望 第3章 返回值 第4章 参数匹配 第5章 指定方法调用次数 第6章 指定执行序列 第7章 状态机 第0章 概述 现在的dev不是仅仅要写co ...

  8. 20155309 2016-2017-2《Java程序设计》课程总结

    预备作业1http://www.cnblogs.com/nhx19970709/p/6155580.html 第一次写博客,也是第一次用Markdown,具体流程都还不是很熟悉 预备作业2http:/ ...

  9. WINDOWS 2008 采用IP策略解决445,139等病毒攻击问题

    @echo off title 创建IP安全策略,屏蔽135.. . . . 等端口 :: 配置说明文档地址 :: http://blog.csdn.net/lpc_china/article/det ...

  10. Cocos2d-x for Windows Phone 用法总结

    鉴于诺基亚(微软移动这个没人用的手机)开发者比较少,cocos2dx移植方面更是少的问题,总结一下WP8移植方面的资料,希望对大家有用,自己也当作笔记留念. 1.WP8方面有两种方式创建项目,Hell ...