iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Twemproxy测试Redis分片主从架构
  • 513
分享到

Twemproxy测试Redis分片主从架构

2024-04-02 19:04:59 513人浏览 独家记忆
摘要

Twemproxy 测试架构  1、twemproxy是twitter开发的一个Redis代理proxy。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免redis

Twemproxy 测试架构

  1、twemproxy是twitter开发的一个Redis代理proxy。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免redis单点故障问题。

使用Twemproxy 对硬件资源配置较高;在redis性能有一定的损失(twitter测试约20%)用于提高整个系统的HA;

  2、twemproxy部署简单快捷;可以直接在proxy进行读写、并转发请求给后端的redis;但是不适合超大流量系统。做的时候把应用分开、使用LVS集群:实现twemproxy的负载均衡,提高proxy的可用性和可扩张能力;

    优点:

    轻量级的Redis和memcached代理。使用它可以减少缓存服务器的连接数,并且利用它来作分片,性能损耗不会多于20%。其实是因为用了pipeline.首先redis是支持使用pipeline批处理的。

    twemproxy与每个redis服务器都会建立一个连接,每个连接实现了两个FIFO的队列,通过这两个队列实现对redis的pipeline访问。将多个客户端的访问合并到一个连接,这样既减少了redis服务器的连接数,又提高了访问性能。

    缺点:

    虽然可以动态移除节点,但该移除节点的数据就丢失了。redis集群动态增加节点的时候,twemproxy不会对已有数据做重分布.maillist里面作者说这个需要自己写个脚本实现性能上的损耗.

twemproxy- nutcracker:

ip:10.207.101.101

ip:10.207.101.102

VIP:10.207.101.100

HA- keepalived

ip:10.207.101.101

ip:10.207.101.102

VIP:10.207.101.100

Redis 

IP: 10.207.101.101

Port:6001/6002/6003

IP: 10.207.101.102

Port:6001/6002/6003

  3、部署

wget Http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz

wget https://codeload.GitHub.com/twitter/twemproxy/zip/master

yum install GCc gcc-c++ tcl ruby -y

tar -xf autoconf-2.69.tar.gz

cd autoconf-2.69/

./configure 

make &&make install


unzip unzip master.zip

cd twemproxy-master

autoreconf -fvi

./configure --enable-debug=full

make

make install


  4、配置示例:

# vim /etc/nutcracker.yml

alpha:

  listen: 0.0.0.0:22121

  hash: fnv1a_64

  distribution: ketama

  auto_eject_hosts: true

  redis: true

  server_retry_timeout: 2000

  server_failure_limit: 1

  servers: --两台redis服务器的地址和端口

   - 10.207.101.101:6001:1   

   - 10.207.101.102:6001:1 

 #配置都是redis master地址

    注意:


    1. .yml 配置文件中每个参数值对分隔符”:”后需要有一个空格

    2. 不同层次的参数需要缩进区分,最好使用tab键缩进,否则nutcracker进程不能启动。

    3. 在auto_eject_hosts: true的时候,关闭一个redis实例后,写入数据还是提示“(error) ERR Connection refused”。这个与server_retry_timeout参数设置太小有关,默认值30000msec是一个很好的选择。

  5、启动Twemproxy服务

nutcracker -t nutcracker.yml

检测配置语法真确会显示OK .


# nutcracker -t twemproxy/conf/nutcracker.yml

nutcracker: configuration file 'conf/nutcracker.yml' syntax is ok


WEB界面运行启动服务的http://ip:22222查看;

可以使用nc命令查看 Twemproxy 状态语句:

# nc 10.207.101.101 22222|python -mJSON.tool


  6、设置启动

# cat start.sh

nutcracker -d -c /opt/twemproxy-master/conf/nutcracker.yml -p /opt/twemproxy-master/run/redisproxy.pid -o /opt/twemproxy-master/run/redisproxy.log

    nutcracker 用法与命令选项

Options:

-h, –help                        : 查看帮助文档,显示命令选项

-V, –version                   : 查看nutcracker版本

-t, –test-conf                  : 测试配置脚本的正确性

-d, –daemonize              : 以守护进程运行

-D, –describe-stats         : 打印状态描述

-v, –verbosity=N            : 设置日志级别 (default: 5, min: 0, max: 11)

-o, –output=S                 : 设置日志输出路径,默认为标准错误输出 (default: stderr)

-c, –conf-file=S               : 指定配置文件路径 (default: conf/nutcracker.yml)

-s, –stats-port=N            : 设置状态监控端口,默认22222 (default: 22222)

-a, –stats-addr=S            : 设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0)

-i, –stats-interval=N       : 设置状态聚合间隔 (default: 30000 msec)

-p, –pid-file=S                 : 指定进程pid文件路径,默认关闭 (default: off)

-m, –mbuf-size=N          : 设置mbuf块大小,以bytes单位 (default: 16384 bytes)



# cat stop.sh

ps -ef | grep redis | grep -v grep | awk '{print $2}'  | sed -e "s/^/kill -9 /g" | sh -


  7、检测进程

ps -ef | grep nutcracker | grep -v grep



  8、keepalived 部署 HA 静态路由单点故障;

yum install keepalived -y 


# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

    router_id LVS_DEVEL

}


vrrp_script check_twem {

#    script "killall -0 redis"

    script "/etc/keepalived/check_twem.sh" 

    interval 2 

    weight -3

    fall 3  

    rise 2 

}


vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.27.101.100/24 dev eth0 label eth0:1

    }

     track_script {

       check_twem

    }

}


virtual_server 172.27.101.100 22121 {

    delay_loop 6

    protocol tcp

    

real_server 172.27.101.101 22121 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3  

            delay_before_retry 3 

            connect_port 80       

        }

real_server 172.27.101.102 22121 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3  

            delay_before_retry 3 

            connect_port 80       

        }

    }

}



  9、nutcracker 进程检测 - 脚本check_twem.sh 

# cat /etc/keepalived/check_twem.sh 

#!/bin/bash

twem=$(ps -C nutcracker --no-heading|wc -l)

if [ "${twem}" = "0" ]; then

    sh /opt/twemproxy-master/start.sh

    sleep 2

    twem=$(ps -C nutcracker --no-heading|wc -l)

    if [ "${twem}" = "0" ]; then

        /etc/init.d/keepalived stop

    fi

fi


  10、Set测试:

通过twemproxy测试:

# redis-cli -h 172.27.101.100 -p 22121 -c 11 -t set -d 11 -l –q

SET: 38167.94 requests per second

直接对后端redis测试:

# redis-cli -h 172.27.101.101 -p 6001 -c 11 -t set -d 11 -l –q

直接对后端redis测试

# redis-cli -h 172.27.101.102 -p 6001 -c 11 -t set -d 11 -l –q

SET: 53191.49 requests per second


  11、Get测试:

通过twemproxy测试:

# redis-cli -h 172.27.101.100 -p 22121 -c 11 -t get -d 11 -l -q

GET: 37453.18 requests per second

直接对后端redis测试:

# redis-cli -h 172.27.101.101 -p 22121 -c 11 -t get -d 11 -l -q

GET: 62111.80 requests per second

查看键值分布:

# redis-cli info|grep db0

db0:keys=51483,expires=0,avg_ttl=0

# redis-cli info|grep db0

db0:keys=48525,expires=0,avg_ttl=0



  12、redis-cli 基本操作;

Redis 模糊搜索

 keys *

 select 2


删除所有以user开头的key 可以这样实现:

# redis-cli keys "user*"

1) "user1"

2) "user2"

# redis-cli keys "user*" | xargs redis-cli del

(integer) 2

# 删除成功


# 批量删除匹配通配符的key用到了linux中的管道和xargs参数:

redis-cli keys "s*" | xargs redis-cli del 


# 如果需要制定数据库,需要用到 -n 数据库编号   参数,下面是删除2数据库中s开头的键:

redis-cli -n 2 keys "s*" | xargs redis-cli -n 2 del


redis-cli keys "*" | xargs redis-cli del  

# 如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径  

# 如:/opt/redis/redis-cli keys "*" | xargs /opt/redis/redis-cli del 


# 删除当前数据库中的所有Key  

flushdb  

# 删除所有数据库中的key  

flushall 


    13、测试问题

    read, writev and mbuf

   所有的请求和响应都在mbuf里面,mbuf默认大小是16K(512b-16M),可以使用-m or -mbuf-size=N来配置,每一个连接都会获得至少一个mbuf,这意味着nutcracker支持的并发的连接数依赖于mbuf的大小,小的mbuf可以控制更多的连接,大的mbuf可以让我们读或者写更多的数据导socker buffer。如果并发量很大的场景,推荐使用比较小的mbuf(512 or 1K)

    mbuf-size=N

  每一个客户端连接最好需要一个mbuf,一个服务请求最少是两个连接(client->proxy、proxy->server)所以最少需要两个mbufs 1000个客户端连接的场景计算:1000*2*mbuf=32M,如果每个连接有10个操作,这个值将会是320M,假设连接是10000,那么将会消耗3.2G内存!这种场景下最好调mbuf值比如512b,1000*2*512*10=10M 这个就是当并发量高的场景下使用小的mbuf的原因

    key长度:

   memcached的长度上限是250, redis没有类似限制,但是nutcracker需要key存储在连续的内存里面,而因为所有的请求和响应都在mbuf中,所以redis key的长度将会受限制于mbuf,也就是说如果你的redis实例如果要操作超长的key,你必须把mbuf调大。


    14、简单删除

# 测试数据

redis> ZRANGE page_rank 0 -1 WITHSCORES

1) "bing.com"

2) "8"

3) "baidu.com"

4) "9"

5) "Google.com"

6) "10"


# 移除单个元素

redis> ZREM page_rank google.com

(integer) 1

redis> ZRANGE page_rank 0 -1 WITHSCORES

1) "bing.com"

2) "8"

3) "baidu.com"

4) "9"


# 移除多个元素

redis> ZREM page_rank baidu.com bing.com

(integer) 2

redis> ZRANGE page_rank 0 -1 WITHSCORES

(empty list or set)

# 移除不存在元素

redis> ZREM page_rank non-exists-element

(integer) 0


    14、命令参考

http://doc.redisfans.com/

您可能感兴趣的文档:

--结束END--

本文标题: Twemproxy测试Redis分片主从架构

本文链接: https://www.lsjlt.com/news/47663.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Twemproxy测试Redis分片主从架构
    Twemproxy 测试架构  1、twemproxy是twitter开发的一个redis代理proxy。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免redis...
    99+
    2024-04-02
  • Redis中主从复制架构的示例分析
    这篇文章主要介绍Redis中主从复制架构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!高可用有两个含义:一是数据尽量不丢失,二是服务尽可能提供服务。 AOF 和 RDB 保...
    99+
    2024-04-02
  • redis的主从式架构有什么优点
    redis中主从式架构的优点:一个Master可以同步多个Slaves。Master-Slave同步期间,客户端仍然可以提交查询或修改请求。Slave服务器为客户端提供只读操作的服务,写服务由Master完成。因此提高了系统的伸缩性。支持主...
    99+
    2024-04-02
  • SpringBoot集成Redis并实现主从架构的实践
    目录一、Windows环境下安装Redis设置键值对根据key获取value二、SpringBoot连接Redis(1)使用Jedis类直接连接Redis服务器(2)通过配置文件进行...
    99+
    2024-04-02
  • Redis中主从架构数据一致性同步原理的示例分析
    这篇文章将为大家详细讲解有关Redis中主从架构数据一致性同步原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。高可用有两个含义:一是数据尽量不丢失,二是服务尽...
    99+
    2024-04-02
  • Redis主从复制和哨兵架构图,集成Spring Boot项目实战分享
    目录 1. Redis 主从复制 2. Redis 哨兵架构 3. 集成spring boot项目案列 Redis 主从复制和哨兵架构是 Redis 集群的重要组成部分,用于提高...
    99+
    2023-08-31
    redis spring boot bootstrap
  • 网站渗透测试漏洞分析代码架构
    近期许多网民跟我说为何出現系统漏洞的网站程序全是PHP开发设计的,而非常少有JAVA和Python的渗透案例,先不用说python,就PHP和Java谈一谈。在这以前,先何不记牢那么一个依据(眼底下也无需担心它对吗):PHP网站系统漏洞类型...
    99+
    2023-06-03
  • 面试分析分布式架构Redis热点key大Value解决方案
    目录引言1、面试官:你在项目中有没有遇到Redis热点数据问题,一般都是什么原因引起的?2、面试官:真实项目中,那热点数据问题你是如何准确定位的呢?3、如何解决热点数据问题4、面试官...
    99+
    2024-04-02
  • MySQL主从复制项目实施与维护02(MGR)_MySQL高可用复制与分布式集群架构03
    MySQL主从复制项目实施与维护02(MGR)_MySQL高可用复制与分布式集群架构03视频教程学习地址    http://edu.51cto.com/course/1423...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作