• redis 负载均衡 集群配置


    redis 官网 http://redis.io/

    中文网站 http://redis.cn/

    谷歌代码的redis项目 https://code.google.com/p/redis/

     http://www.oschina.net/p/redis/

    在oschina.net的介绍:

    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
    
    性能测试结果:
    
    SET操作每秒钟 110000 次,GET操作每秒钟 81000 次,服务器配置如下:
    
    Linux 2.6, Xeon X3320 2.5Ghz.
    
    stackoverflow 网站使用 Redis 做为缓存服务器。

    我要做的事情就是,在多台linux服务器中,部署redis,由于redis的集群功能没有完全编写好,见:http://redis.io/topics/cluster-spec

    目前 redis的最新版本是:redis-2.6.13.tar.gz

    但是redis可以做一个主从复制的设置,见redis.conf的 复制【REPLICATION】 部分注释和设置

    ################################# REPLICATION #################################
    # Master-Slave replication. Use slaveof to make a Redis instance a copy of
    # another Redis server. Note that the configuration is local to the slave
    # so for example it is possible to configure the slave to save the DB with a
    # different interval, or to listen to another port, and so on.
    #
    # slaveof <masterip> <masterport>
    
    # If the master is password protected (using the "requirepass" configuration
    # directive below) it is possible to tell the slave to authenticate before
    # starting the replication synchronization process, otherwise the master will
    # refuse the slave request.
    #
    # masterauth <master-password>
    
    # When a slave loses its connection with the master, or when the replication
    # is still in progress, the slave can act in two different ways:
    #
    # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
    #    still reply to client requests, possibly with out of date data, or the
    #    data set may just be empty if this is the first synchronization.
    #
    # 2) if slave-serve-stale-data is set to 'no' the slave will reply with
    #    an error "SYNC with master in progress" to all the kind of commands
    #    but to INFO and SLAVEOF.
    #
    slave-serve-stale-data yes
    # You can configure a slave instance to accept writes or not. Writing against
    # a slave instance may be useful to store some ephemeral data (because data
    # written on a slave will be easily deleted after resync with the master) but
    # may also cause problems if clients are writing to it because of a
    # misconfiguration.
    #
    # Since Redis 2.6 by default slaves are read-only.
    #
    # Note: read only slaves are not designed to be exposed to untrusted clients
    # on the internet. It's just a protection layer against misuse of the instance.
    # Still a read only slave exports by default all the administrative commands
    # such as CONFIG, DEBUG, and so forth. To a limited extend you can improve
    # security of read only slaves using 'rename-command' to shadow all the
    # administrative / dangerous commands.
    slave-read-only yes
    
    # Slaves send PINGs to server in a predefined interval. It's possible to change
    # this interval with the repl_ping_slave_period option. The default value is 10
    # seconds.
    #
    # repl-ping-slave-period 10
    
    # The following option sets a timeout for both Bulk transfer I/O timeout and
    # master data or ping response timeout. The default value is 60 seconds.
    #
    # It is important to make sure that this value is greater than the value
    # specified for repl-ping-slave-period otherwise a timeout will be detected
    # every time there is low traffic between the master and the slave.
    #
    # repl-timeout 60
    
    # Disable TCP_NODELAY on the slave socket after SYNC?
    #
    # If you select "yes" Redis will use a smaller number of TCP packets and
    # less bandwidth to send data to slaves. But this can add a delay for
    # the data to appear on the slave side, up to 40 milliseconds with
    # Linux kernels using a default configuration.
    #
    # If you select "no" the delay for data to appear on the slave side will
    # be reduced but more bandwidth will be used for replication.
    #
    # By default we optimize for low latency, but in very high traffic conditions
    # or when the master and slaves are many hops away, turning this to "yes" may
    # be a good idea.
    repl-disable-tcp-nodelay no
    
    # The slave priority is an integer number published by Redis in the INFO output.
    # It is used by Redis Sentinel in order to select a slave to promote into a
    # master if the master is no longer working correctly.
    # A slave with a low priority number is considered better for promotion, so
    # for instance if there are three slaves with priority 10, 100, 25 Sentinel will
    # pick the one wtih priority 10, that is the lowest.
    #
    # However a special priority of 0 marks the slave as not able to perform the
    # role of master, so a slave with priority of 0 will never be selected by
    # Redis Sentinel for promotion.
    #
    # By default the priority is 100.
    slave-priority 100
    View Code

    看了上面的默认配置,其实也很容易理解,修改下就可以配置主从复制了,有 slaveof <masterip> <masterport> ,就成了 从服务器 ,没有就是 主服务器。

    还有 主服务器 安全的设置 

    ################################## SECURITY ###################################
    # Require clients to issue AUTH <PASSWORD> before processing any other
    # commands.  This might be useful in environments in which you do not trust
    # others with access to the host running redis-server.
    #
    # This should stay commented out for backward compatibility and because most
    # people do not need auth (e.g. they run their own servers).
    #
    # Warning: since Redis is pretty fast an outside user can try up to
    # 150k passwords per second against a good box. This means that you should
    # use a very strong password otherwise it will be very easy to break.
    #
    # requirepass foobared
    # Command renaming.
    #
    # It is possible to change the name of dangerous commands in a shared
    # environment. For instance the CONFIG command may be renamed into something
    # hard to guess so that it will still be available for internal-use tools
    # but not available for general clients.
    #
    # Example:
    #
    # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
    #
    # It is also possible to completely kill a command by renaming it into
    # an empty string:
    #
    # rename-command CONFIG ""
    #
    # Please note that changing the name of commands that are logged into the
    # AOF file or transmitted to slaves may cause problems.
    View Code

    对了,redis的编译安装非常简单,下载redis-2.6.13.tar.gz后,

    tar xvf redis-2.6.13.tar.gz

    cd redis-2.6.13

    make && make install

    将会把redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump 五个文件复制到 /usr/local/bin/下

    [root@localhost ~]# ll /usr/local/bin
    总用量 12464
    -rwxr-xr-x. 1 root root 3853805 6月  18 18:54 redis-benchmark
    -rwxr-xr-x. 1 root root   16459 6月  18 18:54 redis-check-aof
    -rwxr-xr-x. 1 root root   37707 6月  18 18:54 redis-check-dump
    -rwxr-xr-x. 1 root root 3909826 6月  18 18:54 redis-cli
    -rwxr-xr-x. 1 root root 4931736 6月  18 18:54 redis-server
    [root@localhost ~]#

    然后将源码中的 redis.conf 复制到 /etc/redis.conf

    再制作一个 init.d 的启动脚本:

    #!/usr/bin/env bash
    #
    # redis start up the redis server daemon
    #
    # chkconfig: 345 99 99
    # description: redis service in /etc/init.d/redis 
    #             chkconfig --add redis or chkconfig --list redis 
    #             service redis start  or  service redis stop
    # processname: redis-server
    # config: /etc/redis.conf
    
    PATH=/usr/local/bin:/sbin:/usr/bin:/bin
    
    REDISPORT=6379
    EXEC=/usr/local/bin/redis-server
    REDIS_CLI=/usr/local/bin/redis-cli
    
    PIDFILE=/var/run/redis.pid
    CONF="/etc/redis.conf"
    #make sure some dir exist
    if [ ! -d /var/lib/redis ] ;then
        mkdir -p /var/lib/redis
        mkdir -p /var/log/redis
    fi
    
    case "$1" in
        status)
            ps -A|grep redis
            ;;
        start)
            if [ -f $PIDFILE ]
            then
                    echo "$PIDFILE exists, process is already running or crashed"
            else
                    echo "Starting Redis server..."
                    $EXEC $CONF
            fi
            if [ "$?"="0" ]
            then
                  echo "Redis is running..."
            fi
            ;;
        stop)
            if [ ! -f $PIDFILE ]
            then
                    echo "$PIDFILE does not exist, process is not running"
            else
                    PID=$(cat $PIDFILE)
                    echo "Stopping ..."
                    $REDIS_CLI -p $REDISPORT SHUTDOWN
                    while [ -x ${PIDFILE} ]
                   do
                        echo "Waiting for Redis to shutdown ..."
                        sleep 1
                    done
                    echo "Redis stopped"
            fi
            ;;
       restart|force-reload)
            ${0} stop
            ${0} start
            ;;
      *)
        echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
            exit 1
    esac

    将上面内容复制到 /etc/init.d/redis

    chkconfig --add redis

    chkconfig --list redis

    service redis start 

    开启了服务,对了忘记了 /etc/redis.conf里面可以把  daemonize no 修改为

     daemonize yes

    就可以默认在后台执行redis-server了。

    这就是主服务器,从服务器,配置一样,只不过 修改/etc/redis.conf 中 

    slaveof <masterip> 6379

    然后开启从服务器的redis服务。

    测试

    #主服务器
    redis-cli -p 6379 set hello world
    
    #从服务器
    
    redis-cli -p 6379 get hello
    "world"
    
    #主服务器
    redis-cli -p 6379 set hello world2
    
    #从服务器
    
    redis-cli -p 6379 get hello
    "world2"
    
    redis-cli -p 6379 set hello world
    (error) READONLY You can't write against a read only slave.
    
    #成功 配置主从redis 服务器。好简单啊。

    由于配置中有一条 从服务器 是只读的,所以从服务器 没法设置数据,只可以读取数据。

  • 相关阅读:
    二叉排序树(BST)创建,删除,查找操作
    Android中利用AIDL机制调用远程服务
    Android Studio更新升级方法
    C语言+ODBC+SQL 操作(向SQL里面添加数据)
    C语言+ODBC+SQL 连接
    macOS下 java+selenium+firefox 环境搭建
    php 上传二进制流图片 转存到图片格式 本地
    『工作の技术』突然想到的一些问题
    通过MySQL存储原理来分析排序和锁
    解析阿里开源混沌工程工具ChaosBlade是什么?
  • 原文地址:https://www.cnblogs.com/ayanmw/p/3144386.html
Copyright © 2020-2023  润新知