博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis 负载均衡 集群配置
阅读量:6549 次
发布时间:2019-06-24

本文共 8603 字,大约阅读时间需要 28 分钟。

redis 官网 http://redis.io/

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

谷歌代码的redis项目 https://code.google.com/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的集群功能没有完全编写好,见:

目前 redis的最新版本是:

但是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 
# 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
# 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 
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.confPATH=/usr/local/bin:/sbin:/usr/bin:/binREDISPORT=6379EXEC=/usr/local/bin/redis-serverREDIS_CLI=/usr/local/bin/redis-cliPIDFILE=/var/run/redis.pidCONF="/etc/redis.conf"#make sure some dir existif [ ! -d /var/lib/redis ] ;then    mkdir -p /var/lib/redis    mkdir -p /var/log/redisficase "$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 1esac

将上面内容复制到 /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 
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 服务器。好简单啊。

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

 

 

 

 

转载地址:http://yxuco.baihongyu.com/

你可能感兴趣的文章
海量Web日志分析 用Hadoop提取KPI统计指标
查看>>
“神一般存在”的印度理工学院到底有多牛?
查看>>
Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)
查看>>
《大话重构》
查看>>
一起谈.NET技术,WPF与混淆器
查看>>
一起谈.NET技术,C#面向对象设计模式纵横谈:Singleton 单件
查看>>
Mozilla公布Firefox 2011年开发计划
查看>>
Java访问类中private属性和方法
查看>>
UIImage扩展方法(Category)支持放大和旋转
查看>>
可复用的WPF或者Silverlight应用程序和组件设计(3)——控件级别
查看>>
hibernate的一些缺陷(转)
查看>>
An easy to use android color picker library
查看>>
忘记Django登陆账号和密码的处理方法
查看>>
C++的头文件和实现文件分别写什么
查看>>
C语言 · 学生信息(P1102)
查看>>
做项目,还是标准点好(对象命名标准),呵呵
查看>>
iOS开发学习笔记:使用xcode里的单元测试,放在STAssert…里面的语句无法使用自动完成功能...
查看>>
利用批处理文件和任务计划实现Oracle数据库的自动备份
查看>>
API开发 – 让异常变得优雅
查看>>
【270天】每日项目总结系列008(2017.11.02)
查看>>