zoukankan      html  css  js  c++  java
  • TwemProxy 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:192.168.100.101 ip:192.168.100.102 HA - keepalived ip:192.168.100.101 ip:192.168.100.102 VIP:192.168.100.100 Redis - server IP: 192.168.100.106 Port:6001/6002/6003 IP: 192.168.100.107 Port:6001/6002/6003

    3、twemproxy 安装示例:

    wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
    yum install gcc gcc-c++ tcl ruby -y
    tar -xf autoconf-2.69.tar.gz
    cd autoconf-2.69/
    ./configure
    make &&make install

    git clone https://codeload.github.com/twitter/twemproxy/zip/master
    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服务器的地址和端口
    - 192.168.100.106:6379:1 
    - 192.168.100.107:6379:1
    注释:
    listen
        // 监听的ip和端口, 格式:ip : port
    hash
        // 哈希算法名
    distribution
        // key分布哈希算法
    auto_eject_hosts
        // 是否在结点无法响应的时候临时摘除结点
    redis
        // 是否是redis协议
    server_retry_timeout
        // 重试的时间(毫秒)
    server_connections
        // 每个memcache实例的连接数
    server_failure_limit
        // 失败重试次数,默认3次
    timeout
        // 超时时间(毫秒)
    servers
        // 实例列表, 格式:IP:Port:weight  (权重)

    5、启动Twemproxy服务

    nutcracker -t nutcracker.yml
    检测配置语法真确会显示OK .

    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

    7、检测进程

    ps -ef | grep nutcracker

    三、keepalived

    yum install keepalived -y
    
    # cat /etc/keepalived/keepalived.conf

    配置示例:

    ! Configuration File for keepalived
    global_defs {
    router_id LVS_DEVEL
      }
    
    vrrp_script check_twem {
    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 { 192.168.100.100/24 dev eth0 label eth0:1   } track_script { check_twem   } } virtual_server 192.168.100.100 22121
    { delay_loop
    6 protocol TCP real_server 192.168.100.101 22121 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80     }   } real_server 192.168.100.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

    touch /etc/keepalived/check_twem.sh 
    # cat /etc/keepalived/check_twem.sh 
    #!/bin/bash
    counter=$(ps -C nutcracker --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
      sh /opt/twemproxy-master/start.sh
      sleep 2
      counter=$(ps -C nutcracker --no-heading|wc -l)
      if [ "${counter}" = "0" ]; then
      /etc/init.d/keepalived stop
      fi
    fi

    10 、测试

    Redis 基常用础操作

    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
  • 相关阅读:
    【漏洞分析】dedecms有前提前台任意用户密码修改
    关于t00ls的挂机脚本
    关于pocsuite的使用
    [代码审计]青云客Cms前台有条件注入至getshell,后台xss至getshell、至弹你一脸计算器
    警惕phpstudy等开发神器使用默认配置可能带来的危险
    [代码审计]DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入
    [代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)
    对长短按设置不同反应 安卓
    如何数冲突域(collision domains)个数
    Computer Network Homework2’s hard question
  • 原文地址:https://www.cnblogs.com/sharesdk/p/7867026.html
Copyright © 2011-2022 走看看