OneCache-针对redis代理服务
OneCache是一个基于Redis协议的分布式缓存中间件,使用中间层将多个Redis实例组成一个分布式的缓存集群。并且引入Redis组的概念,可以将Redis的Master和Slave分到同一个组里,进行自动故障切换和流理分担。
1.下载OneCache
下载http://www.onexsoft.com/software/onecache_rhel5_linux64.tar.gz
完成后进行上传解压安装。
2.安装、修改配置文件
接下来我们先来了解下需要搭建后的实际效果。我们使用5个redis节点进行分布式的搭建,将5个redis节点分为4个组,其中group1中有2个redis节点一主一从,如下。
组 | ip端口 | 主从 |
---|---|---|
group1 | 172.21.3.195:7000 | 主 |
group1 | 172.21.3.195:7004 | 从 |
group2 | 172.21.3.195:7001 | 主 |
group3 | 172.21.3.195:7002 | 主 |
group4 | 172.21.3.195:7003 | 主 |
安装redis可以参考我之前的redis集群安装配置前面的第一小节中redis安装配置,在此就不做详细说明了。
需要注意各个节点的端口以及从节点配置主从
#从节点上172.21.3.195 7004上修改配置文件redis.conf中配置
slaveof 172.21.3.195 7000
修改onecache.xml配置文件
<onecache port="8221" thread_num="15" hash_value_max="80" >
<vip if_alias_name="eml:0" vip_address="172.21.3.195" enable="0"></vip>
<group name="group1" hash_min="0" hash_max="20">
<host host_name="host1" ip="172.21.3.195" port="7000" master="1"></host>
<host host_name="host1" ip="172.21.3.195" port="7004" master="0"></host>
</group>
<group name="group2" hash_min="21" hash_max="40">
<host host_name="host1" ip="172.21.3.195" port="7001" master="1"></host>
</group>
<group name="group3" hash_min="41" hash_max="60">
<host host_name="host1" ip="172.21.3.195" port="7002" master="1"></host>
</group>
<group name="group4" hash_min="61" hash_max="79">
<host host_name="host1" ip="172.21.3.195" port="7003" master="1"></host>
</group>
</onecache>
3.启动服务
- 启动各个redis节点
bash
# /usr/local/redis-0/bin/redis-server /usr/local/redis-0/conf/redis-7000.conf
# /usr/local/redis-1/bin/redis-server /usr/local/redis-1/conf/redis-7001.conf
# /usr/local/redis-2/bin/redis-server /usr/local/redis-2/conf/redis-7002.conf
# /usr/local/redis-3/bin/redis-server /usr/local/redis-3/conf/redis-7003.conf
# /usr/local/redis-4/bin/redis-server /usr/local/redis-4/conf/redis-7004.conf
启动OneCache
# ./onecache.bin [2017-07-12 09:26:59] Message: Create the thread pool(size=15)... [2017-07-12 09:26:59] Message: Thread pool created [2017-07-12 09:26:59] Message: Connect to redis server(172.21.3.195:7000)... [2017-07-12 09:26:59] Message: Connected. conn pool size=50 [2017-07-12 09:26:59] Message: Connect to redis server(172.21.3.195:7004)... [2017-07-12 09:26:59] Message: Connected. conn pool size=50 [2017-07-12 09:26:59] Message: Connect to redis server(172.21.3.195:7001)... [2017-07-12 09:26:59] Message: Connected. conn pool size=50 [2017-07-12 09:26:59] Message: Connect to redis server(172.21.3.195:7002)... [2017-07-12 09:26:59] Message: Connected. conn pool size=50 [2017-07-12 09:26:59] Message: Connect to redis server(172.21.3.195:7003)... [2017-07-12 09:26:59] Message: Connected. conn pool size=50 [2017-07-12 09:26:59] Message: Start the OneCache on port 8221. PID=2680
查看测试
“`bash/usr/local/redis-0/bin/redis-cli -h 172.21.3.195 -p 8221
172.21.3.195:8221> set abc 123
OK
172.21.3.195:8221> set 999 999
OK
172.21.3.195:8221> set qqq 999
OK
172.21.3.195:8221> status
[OneCache]
Version=4.0.0.0
Port=8221
StartTime=2017-7-12 09:26:59
UpTime=00:06:33
GroupCount=4
[Backends]
[GROUP] [IP] [PORT] [CONNPOOL] [MASTER] [ACTIVE] [REQUESTS] [RECV SIZE] [SEND SIZE] [SEND>1KB] [SEND>1MB] [COMMANDS]
group1 172.21.3.195 7000 50 Y Y 1 0.02KB 0.01KB 0 0 [GET]:1
group1 172.21.3.195 7004 50 N Y 0 0KB 0KB 0 0 NULL
group2 172.21.3.195 7001 50 Y Y 0 0KB 0KB 0 0 NULL
group3 172.21.3.195 7002 50 Y Y 1 0.02KB 0.01KB 0 0 [GET]:1
group4 172.21.3.195 7003 50 Y Y 0 0KB 0KB 0 0 NULL
[Clients]
[NUM] [IP] [CONNECTS] [REQUESTS] [RECV>1KB] [RECV>1MB] [LAST CONNECT] [COMMANDS]
1 172.21.3.195 0 3 0 0 1970-1-1 08:00:00 [GET]:2
“`
目前 OneCache 的默认策略是:master(s)负责写操作,slaver(s)负责读操作,采用均匀分配的方式去处理每个请求,所以也降低了单个节
点的负载率。OneCache 能识别非活动的节点,从而跳过该节点,并能够正确寻找下一个可用的节点,如无节点可用,OneCache 将会返回错
误的答复。
下面我们来测试下。先关闭group1中的主节点,在来从节点是否可用
# /usr/local/redis-0/bin/redis-cli -h 172.21.3.195 -p 7000 shutdown
# /usr/local/redis-0/bin/redis-cli -h 172.21.3.195 -p 8221
172.21.3.195:8221> status
[OneCache]
Version=4.0.0.0
Port=8221
StartTime=2017-7-12 09:26:59
UpTime=00:49:39
GroupCount=4
[Backends]
[GROUP] [IP] [PORT] [CONNPOOL] [MASTER] [ACTIVE] [REQUESTS] [RECV SIZE] [SEND SIZE] [SEND>1KB] [SEND>1MB] [COMMANDS]
group1 172.21.3.195 7000 50 Y N 6 0.15KB 0.05KB 0 0 [GET]:4 [SET]:2
group1 172.21.3.195 7004 50 N Y 1 0.02KB 0.01KB 0 0 [GET]:1
group2 172.21.3.195 7001 50 Y Y 0 0KB 0KB 0 0 NULL
group3 172.21.3.195 7002 50 Y Y 1 0.02KB 0.01KB 0 0 [GET]:1
group4 172.21.3.195 7003 50 Y Y 1 0.03KB 0.00KB 0 0 [SET]:1
[Clients]
[NUM] [IP] [CONNECTS] [REQUESTS] [RECV>1KB] [RECV>1MB] [LAST CONNECT] [COMMANDS]
1 172.21.3.195 0 17 5 0 1970-1-1 08:00:00 [GET]:6 [SET]:4
172.21.3.195:8221> get qqq
"12345"
172.21.3.195:8221> set qqq 111
OK
测试结果与预料的一样。