predixy的安装及集群搭建

5 篇文章 0 订阅
5 篇文章 0 订阅


可参看github上: predixy源码
它是一款redis代理的开源程序,支持一套master-slave事务,支持redis单机,多机,集群的代理,但对于客户端是感应不到的。
要求是c++11编译,我的是centOS6,不支持,但是有直接编译好的
在这里插入图片描述
点一个发布好的

一、下载

在这里插入图片描述

创建文件夹并进入此路径
[root@node02 predixy]# pwd
/usr/local/soft/predixy

-- 下载到本地
[root@node02 predixy]# wget https://github.com/joyieldInc/predixy/releases/download/1.0.5/predixy-1.0.5-bin-amd64-linux.tar.gz

-- 解压
[root@node02 predixy]# tar xf predixy-1.0.5-bin-amd64-linux.tar.gz

[root@node02 predixy]# cd predixy-1.0.5
[root@node02 predixy-1.0.5]# ll
total 36
drwxrwxr-x. 2 501 501 4096 Oct 20  2018 bin   -- 这里有可执行程序,我们不用管编译的问题了
drwxrwxr-x. 2 501 501 4096 Oct 20  2018 conf
drwxrwxr-x. 3 501 501 4096 Oct 20  2018 doc
-rw-rw-r--. 1 501 501 1537 Oct 20  2018 LICENSE
-rw-rw-r--. 1 501 501 5680 Oct 20  2018 README_CN.md
-rw-rw-r--. 1 501 501 4200 Oct 20  2018 README.md
drwxrwxr-x. 2 501 501 4096 Oct 20  2018 test
[root@node02 predixy-1.0.5]# cd bin
[root@node02 bin]# ll -h
total 14M
-rwxrwxr-x. 1 501 501 14M Oct 20  2018 predixy

二、修改配置以及集群搭建

进入安装路径的conf下 ,这里面的配置文件是提供使用的,具体用法还要看github:https://github.com/joyieldInc/predixy/blob/master/doc/config_CN.md

[root@node02 bin]# cd ..
[root@node02 predixy-1.0.5]# cd conf 
[root@node02 conf]# ll
total 36
-rw-rw-r--. 1 501 501 2395 Oct 20  2018 auth.conf
-rw-rw-r--. 1 501 501 1041 Oct 20  2018 cluster.conf
-rw-rw-r--. 1 501 501 3426 Oct 20  2018 command.conf
-rw-rw-r--. 1 501 501  781 Oct 20  2018 dc.conf
-rw-rw-r--. 1 501 501 2121 Oct 20  2018 latency.conf
-rw-rw-r--. 1 501 501 2547 Oct 20  2018 predixy.conf
-rw-rw-r--. 1 501 501 1421 Oct 20  2018 sentinel.conf
-rw-rw-r--. 1 501 501 2016 Oct 20  2018 standalone.conf
-rw-rw-r--. 1 501 501   98 Oct 20  2018 try.conf

观察github可以得知,
1、prefixy支持哨兵和集群,但一个配置只能有一种形式
2、哨兵配置,如果是一主多从,主从复制是全量的,还是有容量限制,且我们是直接跟代理交互,一套master-slave的话,相当于单实例;但哨兵可以兼顾两套master-slave,就会有配置里对应的两个组。
3、如果是两个group,prefixy代理会根据hash算法以及分发模型(取余或者随机数)的形式,将数据分散到组里的不同机器(两套主从复制里)。
此外,还支持把相同标识放到一个组里:[HashTag “xx”]

在这里插入图片描述

1、修改conf下代理的配置文件prefixy.conf

进入配置文件进行修改

[root@node02 conf]# vi predixy.conf
改动点如下俩截图,放开注释:   
Bind 127.0.0.1:7617
Include sentinel.conf --设置为导入哨兵配置文件
保存退出

在这里插入图片描述
在这里插入图片描述

2、开始编辑predixy里哨兵的配置文件

vi sentinel.conf 
-- 拷贝一份Examples 样例,编辑如下,配置三台哨兵,他们是一个集群,可以监控一套也可以监控多套主从复制。
SentinelServerPool {
    Databases 16
    Hash crc16
    HashTag "{}"
    Distribution modula
    MasterReadPriority 60
    StaticSlaveReadPriority 50
    DynamicSlaveReadPriority 50
    RefreshInterval 1
    ServerTimeout 1
    ServerFailureLimit 10
    ServerRetryTimeout 1
    KeepAlive 120
    Sentinels {
        + 127.0.0.1:26379
        + 127.0.0.1:26380
        + 127.0.0.1:26381
    }
    Group master_sla1 {
    }
    Group master_sla12 {
    }
}

保存退出,程序启动的话, 需要predixy.conf 以及导入的 sentinel.conf这两个配置文件,bin目录下是启动脚本


[root@node02 conf]# cd ..
[root@node02 predixy-1.0.5]# ls
bin  conf  doc  LICENSE  README_CN.md  README.md  test
[root@node02 predixy-1.0.5]# cd bin/   -- 进入bin目录
[root@node02 bin]# ls
predixy
[root@node02 bin]# 

3、配置并启动上面配置的3个哨兵和4个redis实例(2套主从)

衔接redis哨兵集群的基础上 redis集群搭建
如果你没有,直接创建26379.conf等3个文件也可以

cd /root/test
ll
total 204
-rw-r--r-- 1 root root   105 Aug  3 07:15 26379.conf
-rw-r--r-- 1 root root   105 Aug  3 07:17 26380.conf
-rw-r--r-- 1 root root   105 Aug  3 07:18 26381.conf
-rw-r--r-- 1 root root 61925 Jul 14 08:17 6379.conf
-rw-r--r-- 1 root root 61925 Jul 15 15:42 6380.conf
-rw-r--r-- 1 root root 61949 Jul 15 15:42 6381.conf
-- 修改三个哨兵文件,关注:master名称以及主机端口3637946379 ,均做如下改动
[root@localhost test]# cat 26380.conf 
port 26380
sentinel monitor master_sla1 127.0.0.1 36379 2
sentinel monitor master_sla2 127.0.0.1 46379 2
[root@localhost test]# cat 26379.conf 
port 26379
sentinel monitor master_sla1 127.0.0.1 36379 2
sentinel monitor master_sla2 127.0.0.1 46379 2

...port 26381..

-- 启动263792638026381 哨兵
[root@localhost test]# redis-server 26379.conf --sentinel
[root@node02 test]# redis-server 26380.conf --sentinel
[root@node02 test]# redis-server 26381.conf --sentinel

新建4个文件夹
[root@node02 test]# pwd
/root/test
[root@node02 test]# mkdir 36379
[root@node02 test]# mkdir 46379
[root@node02 test]# mkdir 46380
[root@node02 test]# mkdir 36380

分别新开窗口,窗口master36379,启动主redis 36379[root@node02 test]# cd  36379
[root@node02 36379]# redis-server --port  36379
窗口slave36380,启动从redis
[root@node02 test]# cd 36380/
-- 36380追随 36379
[root@node02 36380]#  redis-server --port 36380 --replicaof 127.0.0.1 36379

窗口master46379,启动主redis 46379[root@node02 test]# cd 46379/
[root@node02 46379]# redis-server --port 46379

窗口slave46380,启动从redis
[root@node02 test]# cd 46380/
[root@node02 46380]# pwd
/root/test/46380
[root@node02 46380]# redis-server --port 46380 --replicaof 127.0.0.1 46379

3个哨兵,2套redis主从启动完毕

4、启动代理bin下的predixy

新开窗口启动predixy代理  进入:
/usr/local/soft/predixy/predixy-1.0.5/bin
执行,通过predixy.conf  发现哨兵配置,通过哨兵发现主从关系
[root@node02 bin]#./predixy  ../conf/predixy.conf

5、启动redis客户端,端口为代理7617

redis-cli -p 7617 ,对于客户端来讲,就像只和一个机器交互一样的感觉

[root@node02 test]# redis-cli -p 7617
127.0.0.1:7617> set k1 abc
OK
127.0.0.1:7617> set k2 666
OK
127.0.0.1:7617> set k3 888
OK
127.0.0.1:7617> keys *
(error) ERR unknown command 'keys'
127.0.0.1:7617> get k1
"abc"
127.0.0.1:7617> get k3
"888"
127.0.0.1:7617> 

实际上是predixy代理将数据分散存储在两台机器上了

--master36379
[root@node02 ~]# redis-cli -p 36379
127.0.0.1:36379> keys *
1) "k1"
2) "k3"
127.0.0.1:36379> exit
--master46379
[root@node02 ~]# redis-cli -p 46379
127.0.0.1:46379> keys *
1) "k2"
127.0.0.1:46379> exit
--slave46380  数据应同master46379 的数据一致
[root@node02 ~]# redis-cli -p 46380
127.0.0.1:46380> keys *
1) "k2"

6、探索

1)发现相同标识{}的数据,都会落在同一台机器上,比如{mn} 或者是带{abc}的,总之带相同标识{}的都会落在一台机器,这是predixy专门为客户提供的,可以根据业务需要,人为的让数据都落在一台机器上
在这里插入图片描述
在这里插入图片描述

仍然不支持watch ,虽然数据在一台机器,但是是主从,所以不支持
127.0.0.1:7617> watch {mn}k1
(error) ERR forbid transaction in current server pool

2)predixy支持单实例的事务,修改conf下的sentinel.conf文件,去掉一个组,重新启动bin下的predixy脚本,降级进行测试

可发现watch和事务都支持了,如下测试:

127.0.0.1:7617> set a 123a
OK
127.0.0.1:7617> set b wq123
OK
127.0.0.1:7617> watch k1
OK
127.0.0.1:7617> MULTI
OK
127.0.0.1:7617> get a
QUEUED
127.0.0.1:7617> set b ccc
QUEUED
127.0.0.1:7617> EXEC
1) "123a"
2) OK
127.0.0.1:7617> get b
"ccc"
127.0.0.1:7617> get a
"123a"

在这里插入图片描述
3)关掉master36379,哨兵会选举36380为master,而这些对于client是毫无察觉的
你可以关掉master36379,然后访问client里的值。
代理起的作用是对于客户端,解耦后端的复杂度,使client察觉不到后台的变化。

三、小结

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值