一、redis简介
-
redis介绍
redis是一个key-value存储系统。包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。redis可以持久化存储数据
-
redis集群介绍
redis 集群是一个提供在多个redis间节点的共享数据。redis 集群通过分区share来提供一定程度的可用性,在实际环境中当某一个节点宕机或者不可达的请况下继续处理命令。
redis 集群的优势:
自动分割数据到不同的节点上。
整个集群的部分节点失败或者不可达的情况下能够继续处理命令。redis 集群的数据分片:
redis使用hash槽,每个key通过CRC16校验后对16384去模来决定防止那个槽,集群的每一个节点来负责一部分hash槽
例如当前集群有三个节点:- 节点A:包含0-5500号hash槽,
- 节点B:包含5501-11000号hash槽,
- 节点C:包含11000-16384号hash槽,
数据究竟存放在那个槽上,数据hash运算除以16384取余。
集群的主从服复制模型:
- redis的一致性保证
redis并不能保证数据的强一致性,这意味着在实际中集群在特定条件下操作可能丢失一些数据。
集群是用了异步复制写操作过程
二、配置redis集群
环境准备:
192.168.192.137:7000、7001、7002
192.168.192.138:7003、7004、7005
-
在两台机器上安装redis
下载地址: https://redis.io/download[root@localhost ~]# wget http://download.redis.io/releases/redis-5.0.4.tar.gz [root@localhost ~]# tar xzf redis-5.0.4.tar.gz [root@localhost ~]# cd redis-5.0.4/ [root@localhost redis-5.0.4]# make [root@localhost redis-5.0.4]# make PREFIX=/data/redis install [root@localhost redis-5.0.4]# mkdir /data/redis/conf [root@localhost redis-5.0.4]# cp -p redis.conf /data/redis/conf/ [root@localhost redis-5.0.4]# cd /data/redis/bin/ [root@localhost bin]# ls redis-benchmark redis-check-rdb redis-sentinel redis-check-aof redis-cli redis-server [root@localhost bin]# echo "export PATH=$PATH:/data/redis/bin/" >> /etc/profile [root@localhost bin]# source /etc/profile #开启服务 [root@localhost ~]# redis-server /data/redis/conf/redis.conf
解决方法:(永久性)[root@localhost ~]# vim /etc/sysctl.conf net.core.somaxconn=511 vm.overcommit_memory = 1 [root@localhost ~]# sysctl -p [root@localhost ~]# vim /etc/rc.local echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@localhost ~]# source /etc/rc.local
[root@localhost ~]# ps -ef|grep redis root 8353 1118 0 15:45 pts/0 00:00:00 redis-server 127.0.0.1:6379 root 8366 1118 0 15:46 pts/0 00:00:00 grep --color=auto redis #关闭redis [root@localhost ~]# redis-cli shutdown
-
创建redis节点
#192.168.192.137 [root@localhost ~]# mkdir /data/redis/cluster [root@localhost ~]# mkdir /data/redis/cluster/700{0..2} #192.168.192.138 [root@localhost ~]# mkdir /data/redis/cluster [root@localhost ~]# mkdir /data/redis/cluster/700{3..5}
[root@localhost ~]# cp -p /usr/local/src/redis-5.0.4/redis.conf /data/redis/cluster/7000 #修改7000的配置文件,加上绝对路径可以避免文件乱存放 [root@localhost ~]# vim /data/redis/cluster/7000/redis.conf bind 192.168.192.137 port 7000 #使用的端口 pidfile /var/run/redis_7000.pid logfile "/data/redis/cluster/7000/redis_7000.log" dir /data/redis/cluster/7000/ #确定dump.rdb文件的绝对路径 appendonly yes #开启集群 cluster-enabled yes cluster-config-file /data/redis/cluster/7000/nodes-7000.conf cluster-node-timeout 15000 #7001、7002只要把文件里面的7000改成7001、7002就可以 #192.168.192.138的7003、7004、7005把bind改成本机ip,再把7000改成对应数字就行
-
启动各实例
[root@localhost ~]# redis-server /data/redis/cluster/7000/redis.conf & .......
[root@localhost ~]# ps -ef | grep redis root 4374 1208 0 16:13 pts/0 00:00:11 redis-server 192.168.192.137:7 root 4426 1208 0 16:14 pts/0 00:00:11 redis-server 192.168.192.137:7 root 7291 1208 0 17:01 pts/0 00:00:08 redis-server 192.168.192.137:7 root 15114 1208 0 19:14 pts/0 00:00:00 grep --color=auto redis [root@localhost ~]# ps -ef | grep redis root 2696 1205 0 16:31 pts/0 00:00:10 redis-server 192.168.192.138:7003 [cluster] root 2811 1205 0 16:35 pts/0 00:00:10 redis-server 192.168.192.138:7004 [cluster] root 3505 1205 0 17:41 pts/0 00:00:06 redis-server 192.168.192.138:7005 [cluster] root 4416 1205 0 19:15 pts/0 00:00:00 grep --color=auto redis
-
创建集群
集群管理工具redis-trib.rb已经被废弃,所以不用安装ruby啥的了,当时redis-trib.rb的功能,现在已经集成到了redis-cli中,并且可以在有认证的情况执行了,可以通过./redis-cli --cluster help查看使用方式。#选项--cluster-replicas 1 意味着我们想要为每个创建的主服务器创建一个slave [root@localhost ~]# redis-cli --cluster create 192.168.192.137:7000 192.168.192.137:7001 192.168.192.137:7002 192.168.192.138:7003 192.168.192.138:7004 192.168.192.138:7005 --cluster-replicas 1
-
启动集群
# -h:指定主机(bind的IP) -p:指定端口 -c:以集群方式开启 [root@localhost ~]# redis-cli -h 192.168.192.137 -p 7000 -c 192.168.192.137:7000> #在任一节点上存储值,任意节点都能查到
[root@localhost ~]# redis-cli --cluster check 192.168.192.137:7000 #检测集群 [root@localhost ~]# redis-cli --cluster info 192.168.192.137:7000 #查看集群key、slot、slave分布信息 [root@localhost ~]# redis-cli --cluster reshard 192.168.192.138:7005 #在线迁槽 How many slots do you want to move (from 1 to 16384)? 500 #选择大小 What is the receiving node ID? be8c4c3cc7b63c15eae5d00f5dd5a2564ef3f5b6 #接收节点的节点号 Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1: 386224d97b830811e48adf42b4d97f416523b9ff #源节点的节点号 Source node #2: done #结束 [root@localhost ~]# redis-cli --cluster rebalance --cluster-threshold 1 192.168.192.138:7005 #平衡各节点槽数量 [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# [root@localhost ~]#