个人专题目录
NoSql入门和概述
Redis入门介绍
Redis数据类型
解析配置文件 redis.conf
Redis的持久化
Redis的事务
Redis的发布订阅
Redis的复制(Master/Slave)
Redis的Java客户端Jedis
https://github.com/caoxinyu/RedisClient
https://github.com/MicrosoftArchive/redis/releases
redis_cloud模式研究一下
架构细节:
1. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
2. 节点的fail是通过集群中超过半数的节点检测失效时才生效.
客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<-
redis-cluster选举:容错
领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
-
什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
- 如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态.
- 如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
包括:
1、包含redis cloud集群的压测的qps
安装问题可见:https://blog.csdn.net/banqgg/article/details/79309636
相关文章:http://www.aboutyun.com/thread-15315-1-1.html
redis集群要求必须最好3个master节点
redis集群总槽数16384,slot
redis集群安装
1、安装ruby环境,
在线安装:yum install ruby
离线安装:
可参考:http://www.cnblogs.com/xuliangxing/p/7132656.html
下载ruby地址:https://cache.ruby-lang.org/pub/ruby/,这里下载版本:ruby-2.5.0.tar.gz,最好2.5版本
解压ruby-2.5.0.tar.gz包,然后进入目录
安装执行 ./configure --prefix=/usr/local/ruby,完成后执行make && make install
2、安装rubygems
在线安装:yum install rubygems
离线安装:
可参考:http://www.cnblogs.com/xuliangxing/p/7133544.html
下载ruby地址:https://rubygems.org/pages/download,这里下载版本:rubygems-2.7.7.tgz
解压并进入目录,执行命令:ruby setup.rb
如果报错:59:in `require': cannot load such file -- zlib
需要下载zlib安装:
下载:http://www.zlib.net/fossils/
安装:
tar -vxf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure --prefix=/usr/local/zlib
make
make install
用zlib编译ruby
切到ruby的解压包目录
1 $ cd /opt/ruby-2.5.0/ext/zlib
备注:/home/cmfchina/ruby/ruby-2.4.1这个目录是ruby安装包后解压的目录,就是前面提到的ruby离线安装
2 $ ruby extconf.rb --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib //会生成一个Makefile文件
备注:/usr/local/zlib是我的zlib安装目录
3 替换Makefile中top_srcdir为../..,sed -i s#$(top_srcdir)#../..# Makefile
4 直接在/home/cmfchina/ruby/ruby-2.4.1/ext/zlib目录下执行make
5 直接在/home/cmfchina/ruby/ruby-2.4.1/ext/zlib目录下执行make install
需要下载openssl安装:
下载:https://www.openssl.org/source/old/1.0.2/
tar -xvf openssl-1.0.2n.tar.gz
./config -fPIC --prefix=/usr/local/openssl enable-shared
./config -t
make && make install
用openssl编译ruby
切到ruby的解压包目录
1 $ cd /opt/ruby-2.5.0/ext/openssl
2 备注:/opt/ruby-2.5.0这个目录是ruby安装包后解压的目录,就是前面提到的ruby离线安装
3 $ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib //会生成一个Makefile文件
4 备注:/usr/local/openssl是我的openssl安装目录
5 替换Makefile中top_srcdir为../..,sed -i 's#$(top_srcdir)#../..#g' Makefile 6 直接在/home/cmfchina/ruby/ruby-2.4.1/ext/openssl目录下执行make 7 直接在/home/cmfchina/ruby/ruby-2.4.1/ext/openssl目录下执行make install
安装redis.gem
下载:https://rubygems.org/gems/redis/versions
安装:gem install redis-3.3.0.gem
安装启动redis-cluster
下载:http://download.redis.io/releases/
1、解压redsi包:tar -zxvf redis-4.0.11.tar.gz
2、安装redis,到redis的解压包下,make && make install
3、切到集群(空闲)目录下新建6个目录 mkdir redis7001 ...7006
4、从安装目录中Redis的安装目录usr/local/bin,将redis-cli、redis-server复制到redis7001 ...7006下
5、从解压包中将redis.conf复制到redis7001中,修改配置文件
bind 0.0.0.0 //设置为所有主机都可访问
port 7001 //服务启动端口
daemonize yes//redis后台运行
pidfile /var/run/redis_7001.pid //pidfile文件对应7001,7002...
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7001.conf//集群的配置 配置文件首次启动自动生成7001,7002 cluster-node-timeout 15000/请求超时 默认15秒,可自行设置
6、将配置文件复制到其他包下,同上修改配置文件
7、分别将这6个redis服务启动起来(命令redis-server redis.conf)
8、使6个几点变为集群,解压的文件/opt/redis-4.0.11/src目录下找到文件为:redis-trib.rb,执行命令
./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客户端连接:
redis-cli -c -h 127.0.0.1 -p 7001
redis集群命令:
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 槽中的键