Redis数据分片处理(六)

Redis分片处理(twemproxy代理机制)

代理组件:twemproxy
不管你现在的电脑性能有多好,只要你运行了Redis,那么就有可能造成一种可怕的局面,你电脑的内存将立刻被占满。而且一台Redis数据库的性能终归是有限制的,那么现在如果要保证用户的执行速度快,就需要使用集群的设计。而对于集群的设计,主要的问题就是解决单实例Redis的性能瓶颈。

  • twemproxy代理机制
    TwemProxy是一个专门为了nosql数据库设计的一款代理工具软件,这个工具软件最大的特征是可以实现数据的分片处理。
    所谓的分片就是根据一定的算法将要保存的数据保存到不同的结点之中。
    有了分片之后数据的保存节点就可能有无限多个,但是理论上如果真进行集群的搭建,往往要求三台结点起步。
    能参与分片这项作业的一定都是master,每一个master后面可以带有无数的slave。分片只用关心多个master即可。
    在实际工作中,用的最多的分片算法就是Hash分片。(根据一个数值求模)。

Redis数据分片处理(六)_第1张图片

TwemProxy:
也叫nutcraker,是一个twitter开源的一个redis和memcache快速/轻量级代理服务器;TwemProxy是一个快速的单线程代理程序,支持Memcached ASCII协议和更新的Redis协议。
TwemProxy通过引入一个代理层,可以将其后端的多态Redis或Memcached实例进行统一管理和分配,使应用程序只需要在Twemproxy上进行操作,而不关心后面有多少个真实的Redis或Memcached存储。

GITHUB地址:
https://github.com/twitter/twemproxy;

Redis数据分片处理(六)_第2张图片

Redis数据分片处理(六)_第3张图片

最主要功能:用户不再直接操作真正的Redis,而且支持高性能的数据访问。而且支持分片处理,可以操作Redis集群。
这种将数据分摊到各个存储结点的设计才能够真正实现高并发的访问机制。数据量再大也可以处理。

  • 配置Redis集群
    本次预计使用三台Redis服务器,并且考虑到实际的应用环境,这三台的Master分别有各自的两个slave主机。于是现在给出本次使用的主机列表:
No 主机名称 IP地址 描述
1 tw-redis-server-a 192.168.68.167 Redis(master)数据服务 端口6379、 Redis(slave)数据服务 端口6380 、Redis(slave)数据服务 端口6381
2 tw-redis-server-b 192.168.68.168 Redis(master)数据服务 端口6379、 Redis(slave)数据服务 端口6380 、Redis(slave)数据服务 端口6381
3 tw-redis-server-c 192.168.68.169 Redis(master)数据服务 端口6379、 Redis(slave)数据服务 端口6380 、Redis(slave)数据服务 端口6381

1.考虑到主机的通用性,所有的主机都建议修改主机名称以及对应的hosts文件
修改hostname:vim/etc/hostname; 修改完成之后重新启动
修改hosts:vim/etc/hosts,做好ip地址与主机名称的映射。
修改所有的tw-redis-server-*

2.本次的主机通过之前的配置得来里面已经实现了基本的配置环境,但是依然需要由用户自己来配置主从关系。
修改从节点配置:
vim /usr/local/redis/conf/redis-6380.conf、
vim /usr/local/redis/conf/redis-6381.conf
在这两个配置文件中修改 (以一台主机为例)
slaveof 192.168.68.167 6379
masterauth wanghaoxin

3.tw-redis-server-* 主机全部配置
启动所有的Redis数据库的实例(每台主机上有三个实例)
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6379.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf

此时就相当于有9台redis数据库,而后有三台是Master结点,6台为slave节点。

4.tw-redis-server-* 主机全部配置
任意一台主机上查看从节点状态
/usr/local/redis/bin/redis-cli -h 192.168.68.167 -p 6379 -a wanghaoxin info replication
一台主机的redis客户端,只要你连接的ip,端口以及密码正确,都可以连接到任意的主机上。
连接正常可以看到从节点

Redis数据分片处理(六)_第4张图片

完成了Redis的集群配置,只是搭建了Redis服务。

  • 编译与配置twemproxy
    现在关键的问题就在于如何进行Redis分片处理,而分片处理的工具就是twemproxy工具,但是此工具给出的是源代码,所以使用之前一定要进行编译处理。
    1.【tw-proxy-server-a】将twemproxy-0.4.1.tar.gz源代码开发包上传到linux系统之中,随后将其解压到源代码(src)路径下:
    tar xzvf /srv/ftp/tewmproxy-0.4.1.tar.gz -C /usr/local/src
    (有时候不需要用xzvf 用xvf即可)
    2.进入到源代码所在的目录:
    cd /usr/local/src//tewmproxy-0.4.1/
    不能简单实用make make install来进行
    首先要使用autoreconf工具生成一些编译的程序文件
    autoreconf -fvi
    (缺少啥安装啥)
    建立一个twemproxy编译后的工作目录
    mkdir -p /usr/local/twemproxy/
    进行编译的目录配置:
    ./configure –prefix=/usr/local/twemproxy
    编译完成之后跑到/usr/local/twemproxy目录之中
    进行源代码的编译安装:make && make install

3.【tw-proxy-server-a】准备一个twemproxy配置文件,这个配置文件考虑到随后与其他机制的整合,名称一定要设置为:”redis_master.conf”
建立一个保存配置文件的目录
mkdir -p /usr/local/twemproxy/conf
拷贝配置文件
cp /usr/local/src/tewmproxy-0.4.1/conf/nutcracker.yml /usr/local/twemproxy/conf/redis_master.conf

4.【tw-proxy-server-a】编辑redis_master.conf配置文件
100dd删除光标下所有行
yy复制当前行 p粘贴

redis_master:
listen: 0.0.0.0:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
redis_auth : wanghaoxin
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 192.168.68.167:6379:1
- 192.168.68.168:6379:1
- 192.168.68.169:6379:1
以上配置的”redis_master“的名称与配置文件是一样的,而且必须一样,同时在本文件里配置了redis访问密码以及twemproxy所有可能代理到的redis服务器节点
5【tw-proxy-server-a】
/usr/local/tewmproxy/sbin/nutcracker -t /usr/local/twemproxy/conf/redis_master.cof
提示错误,但是此时的配置文件完全正确
6.【tw-proxy-server-a】启动twemproxy的服务
首先为了启动方便,一定要设置一些数据保存目录
mkdir -p /usr/local/twemproxy/{pid,logs}
启动:
/usr/local/twemproxy/sbin/nutcracker -c /usr/local/twemproxy/conf/redis_master.conf -p /usr/local/twemproxy/pid/redis_master.pid -o /usr/local/twemproxy/logs/redis_master.log -d

7.【tw-proxy-server-a】这个时候一旦启动之后就表示该进程是一个redis的代理进程,所有的服务可以通过twemproxy访问,而它的地址是22121.随意找到一个redis客户端即可。

代理地址:170
/usr/local/redis/bin/redis-cli -h 192.168.68.170 -p22121 -a wanghaoxin
现在连接的直接为代理服务器,随后找到各自的redis数据库服务。
通过代理服务器访问redis。
设置数据是根据某种算法分配到不同ip的redis主服务器master下的。
说明数据做了分片处理,实现了redis分片处理操作

你可能感兴趣的:(java基础知识点,开发)