按照业务拆分
分片 sharding
-
哈希取模 modula
-
随机分配 random
-
一致性哈希 kemata
代理
-
没有使用代理
-
使用代理
-
对代理做负载均衡和高可用
代理实现
twemproxy 代理
https://github.com/twitter/twemproxy
-
下载
-
安装
$ git clone https://github.com/twitter/twemproxy.git
$ yum install automake libtool -y
$ cd twemproxy
$ autoreconf -fvi
$ ./configure --enable-debug=full
$ make
$ src/nutcracker -h
- 配置
# 查看初始化文件
$ cd /home/twemproxy/twemproxy/scripts
$ vim nutcracker.init
# 初始化文件中,找到这句,初始化文件应该放到 /etc/rc.d/init.d目录下
# Source function library.
. /etc/rc.d/init.d/functions
# 然后,我们把初始化文件拷贝到相应目录,并改一下名字,授予可执行权限
$ cp nutcracker.init /etc/init.d/twemproxy
$ chmod +x twemproxy
# 再看初始化文件中这句,配置文件路径
OPTIONS="-d -c /etc/nutcracker/nutcracker.yml"
# 然后,我们在相应位置创建目录,并把配置文件拷贝过去
$ cd /etc
$ mkdir nutcracker
$ cd /home/twemproxy/twemproxy/conf/
$ cp ./* /etc/nutcracker/
# 可执行程序拷贝到 /usr/bin/
cp nutcracker /usr/bin/
修改配置文件
alpha:
listen: 127.0.0.1:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 127.0.0.1:6379:1
- 127.0.0.1:6380:1
- 启动2台redis
- 启动代理
- 连接代理
打开一个客户端,直接连6379
打开一个客户端,直接连6380
打开一个客户端,连接代理22121,并set一些值
查看6379
查看6380
再set一些值试一下
predixy 代理
- 下载
$ cd /home
$ mkdir predixy
$ cd predixy
$ wget https://github.com/joyieldInc/predixy/releases/download/1.0.5/predixy-1.0.5-bin-amd64-linux.tar.gz
- 解压缩
- 修改配置文件
# 打开配置文件
$ vim predixy.conf
# 修改绑定主机
Bind 127.0.0.1:7617
# 导入哨兵的配置
Include sentinel.conf
# 打开哨兵的配置文件
$ vim sentinel.conf
# 配置文件复制例子
# 光标停在#SentinelServerPool {
# shift+:
# .,$y # .当前位置 ,到 $最后一行 y复制
# 光标停在最后,按p # 复制23行
# 光标停在#SentinelServerPool {
# shift+:
# .,$s/#// # .当前位置 ,到 $最后一行 s查找并替换 /# 把#替换 //空
修改配置
- 准备3台哨兵
主机名要与sentinel.conf中的Group名字一致,对应ooxx、xxoo这两套主从
启动3台哨兵
- 准备2套主从
- 启动2套主从
启动主36379
启动从36380
启动主46379
启动从46380
- 启动代理
- 测试
连接代理,set一些值
连接主36379看一下
连接从36380看一下
连接主46379看一下
连接从46380看一下
- 人为指定落到同一个点
redis自带的cluster
脚本方式
启动
./create-cluster start
分赃(分配槽位)
客户端连接(路由请求模式)
随便连一个,比如:30001,然后set k1,报错,怎么回事?
这种模式,连30001,提示要移动到30003上去操作。
去到30003执行,成功
在30003上执行,set k2,又报错,提示要移动到30001上去执行
去30001执行,成功
再在30001执行,set k3 成功;再执行set k4,报错,要求去到30002执行
在30002执行,成功。在30002执行set k5,报错,要求去到30003执行
取到30003执行,成功。如此往复。。。
普通客户端就是报错模式,使用它的客户端应该是:
redis-cli -c -p 30001
事务
关闭、清理
命令方式
redis-cli --cluster create 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006 --cluster-replicas 1
上一篇《09 Redis的集群:主从复制、CAP、PAXOS、cluster分片集群01》
下一篇《11 Redis开发:spring.data.redis、连接、序列化、high/low api》