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. Linux内核跟踪之ring buffer的实现【转】

      转自:http://blog.chinaunix.net/uid-20543183-id-1930845.html ---------------------------------------- ...

  2. asp.net操作word 配置在IIS上出现的问题

    异常: 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问. (异常来自 ...

  3. openjudge-NOI 2.5-1789 算24

    题目链接:http://noi.openjudge.cn/ch0205/1789/ 题解: 并不是非常简单的搜索,需要考虑一些东西…… 首先有运算符优先级的限制,还有括号,数字的顺序也可以调整,如果只 ...

  4. 爬虫基础---HTTP协议理解、网页的基础知识、爬虫的基本原理

    一.HTTP协议的理解 URL和URI 在学习HTTP之前我们需要了解一下URL.URI(精确的说明某资源的位置以及如果去访问它) URL:Universal Resource Locator 统一资 ...

  5. Spring Boot连接Mysql数据库问题解决

    在spring Boot项目中使用mysql数据库进行数据库的增删查改,出现以下错误: Error starting ApplicationContext. To display the auto-c ...

  6. Git系统学习网址

    https://code.csdn.net/help/CSDN_Code/progit/zh/07-customizing-git/01-chapter7

  7. hihoCoder #1183 : 连通性一·割边与割点(求割边与各点模板)

    #1183 : 连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢 ...

  8. (二)Mybatis项目配置

    第一节:environments Mybatis支持多个环境,可以任意配置 <environments default="development"> <envir ...

  9. MySQL学习笔记:while循环

    思考:while循环是否只能使用在存储过程或者存储函数之中,不能直接在查询语句中使用? ———— 循环一般在存储过程和存储函数中使用. 直接放几个例子: 例一: 1.创建存储过程 DELIMITER ...

  10. poj 3270(置换群+贪心)

    Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6993   Accepted: 2754 Descr ...