Redis Cluster
Redis是一个由ANSI C语言编写,性能优秀、支持网络、可持久化的K-K内存数据库,并提供多种语言的API。
它常用的类型主要是 String、List、Hash、Set、ZSet 这5种。
- 以 redis-3.2.8 运行3个实例为例,比如,建立如下目录结构
1 | redis-3.2.8_cluster |
- 一些配置项
1 | bind <ip> |
参数的具体意义参考redis doc。
config下的三个文件 redis_31337.conf
- 运行redis instances
如:
1 | /home/test/redis-3.2.8_cluster/redis-3.2.8/redis-server /home/test/redis-3.2.8_cluster/config/redis_31337.conf |
- Create cluster
执行命令
1 | ./redis-trib.rb create --replicas 0 192.168.137.128:31337 192.168.137.128:31338 192.168.137.128:31339 |
- 测试
执行命令 "./redis-cli -c -h <ip> -p <port>"
登录 redis server;之后 键入 "cluster info"
查看集群信息,
如果 cluster-state显示ok,那就真的ok啦。
举个栗子,可能会看到如下的信息,那表示是ok的:
1 | <ip>:<port>> cluster info |
ERROR-1:若提示 increase "ulimit -n"则,以root用户登录主机
在文件/etc/security/limits.d/20-nproc.conf
添加如下行:
1 | <redis安装用户> soft nofile 65535 |
ERROR-2:如果执行./redis-trib.rb
命令报错
确保机器有ruby的环境下,下载 redis gem,执行 gem install ./redis-3.2.2.gem
命令安装。
ERROR-3:警告:过量使用内存设置为0!在低内存环境下,后台保存可能失败。为了修正这个问题,
在/etc/sysctl.conf 添加一项 ‘vm.overcommit_memory = 1’ ,
然后重启(或者运行命令’sysctl vm.overcommit_memory=1’ )使其生效。
查看,sysctl -a | grep vm.overcommit_memory
有三种方式修改内核参数,但要有root权限:
-
(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
-
(2)sysctl vm.overcommit_memory=1
-
(3)echo 1 > /proc/sys/vm/overcommit_memory
redis集群修复
先forget fail 结点,完了再重启挂掉的结点。
如redis异常关闭后,节点A加入不到集群中,解决方法:
-
1.从原集群节点中移除故障节点A.
cluster forget <nodeid>
-
2.移动节点A的数据到新位置(备份).
mv dump.rdb ../
-
3.启动A节点
redis-server redis.conf
-
4.在集群中添加恢复后的节点A.
redis-trib.rb add-node <host:port> <cluster-host:port>
-
5.停止节点A.
-
6.移动节点A的数据到原目录,启动(数据量大时恢复需要一段时间).