Redis主从服务器安装配置
Redis的介绍
数据库主要类型有对象数据库,关系数据库,键值数据库等等,对象数据库太超前了,现阶段不提也罢;关系数据库就是平常说的MySQL,PostgreSQL这些熟的不能再熟的东西,至于键值数据库则是本文要着重说的,其代表主要有MemcacheDB,Tokyo Cabinet等等。
Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点。从而使它的位置处于关系数据库和键值数据库之间。Redis不仅能保存Strings类型的数据,还能保存Lists类型(有序)和Sets类型(无序)的数据,而且还能完成排序(SORT)等高级功能,在实现INCR,SETNX等功能的时候,保证了其操作的原子性,除此以外,还支持主从复制等功能。
详细描述参见官方手册,同时,官方提供了一个名为Retwis的项目的源代码,可以对照着官方介绍学习,注意其中关于Data Layout的描述,其他没什么。
项目实践中,多以关系数据库为主,不过合理的使用Redis这样的键值数据库,往往能扬长避短,比如说实现一个类似消息队列的功能,对MySQL来说,除非使用Q4M,否则很难满足高并发请求,不过对Redis来说,通过内建的Lists支持,消息队列就是小菜一碟。
Redis的安装
tar zxvf redis-version.tar.gz
cd redis-version
make
由于没有make install,所以得把源代码目录里的关键文件手动复制到适当的位置:
cp redis.conf /etc/
cp redis-benchmark redis-cli redis-server /usr/bin/
如果内存情况比较紧张的话,需要设定内核参数:
echo 1 > /proc/sys/vm/overcommit_memory
然后编辑redis.conf配置文件(/etc/redis.conf),按需求做出适当调整,比如:
daemonize yes
logfile /dev/null
如果要记录日志的话,最好先调整loglevel到一个合适的级别,然后设定logfile,如果不需要,则可以像上面这样直接把日子丢弃到/dev/null里,还有一点,缺省情况下,数据文件dump.rdb会被生成到当前目录,可以通过dir参数设定合适的目录。
此外,如果你决定把Redis用于产品环境,还要注意maxmemory选项,因为Redis在启动时会把所有数据加载到内存中,所以设定maxmemory相对安全。
接下来直接启动服务就可以了,只有配置文件一个参数:
redis-server /etc/redis.conf
确认运行了之后,可以用redis-benchmark命令测试看看,还可以通过redis-cli命令实际操作一下,比如:
redis-cli set foo bar
OK
redis-cli get foo
bar
在设置键对应的值的时候,按照协议的规定是要提供数据大小这个参数的,上面的redis-cli命令之所以没有提供这个参数是因为redis-cli本身进行了封装。
可以通过telnet来验证一点:
telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set foo 3
bar
+OK
get foo
$3
bar
^]
telnet> quit
Connection closed.
更多命令介绍参考文档介绍。
Redis源代码里附带了多种客户端的扩展,比如说php(client-libraries/php),这是一个纯PHP的实现方案,也有二进制版本的实现(phpredis)。其他语言即便没有现成的扩展实现,也可以自己按照协议规范写一个扩展,应该不是什么难事。
Redis内存要求很高,如果你的数据量很大的话,可能会导致系统使用swap,这会使性能急剧下降。此时更好的方法是通过consistent hashing把数据分布到多个服务器上,文档上给出了简单的例子解释:
For example imagine to have N Redis servers, server-0, server-1, ..., server-N. You want to store the key "foo", what's the right server where to put "foo" in order to distribute keys evenly among different servers? Just perform the crc = CRC32("foo"), then servernum = crc % N (the rest of the division for N). This will give a number between 0 and N-1 for every key. Connect to this server and store the key.
在线演示:
http://try.redis-db.com/
参考链接:
http://redis.io/
http://github.com/jdp/redisent/tree/master
http://github.com/owlient/phpredis
http://rediska.geometria-lab.net/
Redis主从服务器的搭建很简单,只要少许配置即可,为了演示的方便,我们就在一台服务器上配置:
前提是你已经有了一台Redis服务器,如果没有可以参考我以前的文章安装。下面看看如何配置从服务器:
假设主服务器的配置文件是:/etc/redis.conf,我们复制一份作为从服务器的配置文件:
cp /etc/redis.conf /etc/redis_slave.conf
并作修改:
# vi /etc/redis_slave.conf
port 6380
dbfilename dump_slave.rdb
slaveof 127.0.0.1 6379
主服务器的端口使用的是缺省的6379,从服务器的端口我们设置成6380。
然后插入一些测试数据:
redis-benchmark
由于我们没有设定任何参数,所以使用的是缺省端口(6379),在本例中就是主服务器。
然后启动从服务器:
redis-server /etc/redis_slave.conf
确认一下是否都正常启动了:
ps -ef | grep redis
进入数据目录,查一下数据文件的散列:
md5sum *.rdb
你会发现数据文件散列都一样,自动同步了。
然后我们关闭一下从服务器(不关也行,我就是为了告诉你如何正确关闭redis服务器):
redis-cli -p 6380 shutdown
接着再往主服务器上写入测试数据:
redis-benchmark -l
这会循环插入测试数据,数据量的大小取决于时间的长短,你可以在适当的时候按ctrl+c停止。
如果从服务器没有启动的话,接着再重新启动从服务器:
redis-server /etc/redis_slave.conf
通过观察文件大小你会发现数据会自动同步,如果没有重启动从服务器,那么数据文件的md5sum散列值可能不同,这是正常的,不要紧。
在操作过程中,有时候你会发现主从服务器的数据文件大小不一样,一般来说也不是问题,因为redis是异步写入磁盘的,此时可能有部分数据还在内存中,没有同步到磁盘,所以文件大小略显不同,可以分别在主从服务器上执行:
redis-cli save(redis-cli -p 6380 save)
这条命令强制同步到磁盘,再看大小就应该一样了。
配置文件redis.conf里有一部分和save相关的参数,缺省如下:
# Save the DB on disk:
#
# save <seconds> <changes>
#
# Will save the DB if both the given number of seconds and the given
# number of write operations against the DB occurred.
#
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
save 900 1
save 300 10
save 60 10000
在主服务器上,我们可以去掉上面的设置,改成类似下面的设置(只要参数值够大即可):
save 10000000000 10000000000
如此一来主服务器变成一个完全的内存服务器,所有的操作都在内存里完成,“永远”不会再往磁盘上持久化保存数据,异步的也没有。持久化则通过从服务器来完成,这样在操作主服务器的时候效率会更高。不过要注意的一点是此方法不适合保存关键数据,否则一旦主服务器挂掉,如果你头脑一热简单的重启服务,那么从服务器的数据也会跟着消失,此时,必须拷贝一份备份数据到主服务器,然后再重启服务才可以,数据的恢复稍显麻烦。
从服务器也可以通过设置这个参数来调整从内存同步到磁盘的频率。
利用主从服务器备份
可以利用主从服务器的方便性来备份,专门做一台从服务器用于备份功能,当需要备份的时候,在从服务器上执行下列命令:
redis-cli save
redis-cli shutdown
然后拷贝数据目录下的rdb文件即可。
另:官方文档介绍不使用主从,直接在服务器上cp就可以,不过感觉利用从服务器备份对线上服务器影响更小些。
总结
如果你以前做过MySQL主从服务器的话,两相对比,你会发现Redis主从服务器不用做前期的数据同步,设置好了从服务器,简单启动就OK了。至于Redis主从怎么用,是备份也好,读写分离也好,就看你的想象力了。
资料
官方文档
Redis主从服务器安装配置相关推荐
- linux下部署redis主从,Linux下安装Redis及Redis主从同步配置
一 ,Linux安装Redis 1.我们先配置redis的 yum 源 , 很多软件的找不到 yum 源 我们可以使用 EPEL 找到很多软件的yum源 2.使用命令 yum install epel ...
- redis主从的配置和使用
1, redis配置文件常用选项说明 daemonize no 说明:是否把redis-server启动在后台,默认是"否".若改成yes,会生成一个pid文件. pidfile ...
- ubuntu 部署 redis 主从节点配置
为什么80%的码农都做不了架构师?>>> 准备两台虚拟机,示例系统是ubuntu14.14 192.168.26.133 6379 主 写 192.168.26.134 637 ...
- redis主从配置之持久化配置
环境描述: centos:7.6docker:19.03.1redis:6.0.9 对于centos怎么装docker,docker又怎么装redis镜像等等内容就不做概述了.如果还不会这个,就先去百 ...
- redis主从同步概念及配置
目录 前言 一.主从同步的概念 二.为什么需要主从同步 三.redis主从同步过程 四.windows环境下redis主从同步配置 1.配置主从 2.配置永久生效 前言 今天记录一下学习redis主从 ...
- php 连接主从redis,PHP7对Redis的扩展及Redis主从搭建
在学习一下php7下面的安装及redis相关配置认识,并将笔记记下来,以备后用.主要涉及到redis的扩展php-redis 及redis主从的配置. 一:redis安装 1:下载并安装 cd /ho ...
- Redis 主从配置和参数详解
安装redis 下载redis wget http://download.redis.io/releases/redis-3.0.7.tar.gz解压redis tar -xvf redis-3.0. ...
- Redis主从配置及通过Keepalived实现Redis自动切换高可用
Redis主从配置及通过Keepalived实现Redis自动切换高可用 [日期:2014-07-23] 来源:Linux社区 作者:fuquanjun [字体:大 中 小] 一:环境介绍: Mas ...
- redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用
小小经过一天的休整 公众号更新规则:每周六将会停更一次,进行短期的休整,其余时间继续每天一更. 思维导图如下 Redis 主从配置 这里配置Redis主从 什么是主从 主从复制,是指把一台Redis服 ...
- php redis 主从配置,Redis主从及其PHP扩展安装配置
1.Redis简介Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序 ...
最新文章
- Linux下GCC与G++的区别和联系
- 1、MySQL性能优化简述
- 阻止浏览器关闭 区分刷新和关闭 自试IE可用
- LeetCode Algorithm 704. 二分查找
- EventBus/EventQueue 再思考
- 字符串、指针、引用、数组基础
- Leaflet文档阅读笔记-Leaflet on Mobile笔记
- MapReduce Design Patterns(6 、Job 链)(十二)
- crossplaform---Nodejs in Visual Studio Code 04.Swig模版
- DC-DC转换器分类-和讯康讲堂
- 创建Win95 100M无盘工作站
- 微信小程序:搜索关键词,显示地图列表
- 数据分析基础-假设检验原理详解
- 多线程 VS 多进程(一)
- 华为公司 代码编码规范
- CTF万里追踪——图片里的秘密
- 视频中地点位置标题文字标记介绍动画AE字幕模板
- web学习-html(2)
- Jackson JsonParser 和 JsonGenerator
- css中内编,CSS