[root@bogon ~]# cd /usr/local/src/
[root@bogon src]# wget -c http://download.redis.io/releases/redis-2.8.9.tar.gz
[root@bogon src]# tar xf redis-2.8.9.tar.gz
[root@bogon src]# cd redis-2.8.9 //在redis-2.8.9 目录下面有个README文档,有兴趣的,可以去看看!
[root@bogon src]# make //如果出现如下错误信息,说明你的机器上没有安装gcc gcc-c++ tcl
make[3]: gcc:命令未找到
/bin/sh: cc: command not found
[root@bogon redis-2.8.9]# yum install -y gcc gcc-c++ tcl //yum完成后,再次make,就不会报错了
[root@bogon src]# make //竟然又出现错误了
cd src && make all
make[1]: Entering directory `/usr/local/src/redis-2.8.9/src'
CC adlist.o
在包含自 adlist.c:34 的文件中:
zmalloc.h:50:31: 错误:jemalloc/jemalloc.h:没有那个文件或目录
zmalloc.h:55:2: 错误:#error "Newer version of jemalloc required"
make[1]: *** [adlist.o] 错误 1
make[1]: Leaving directory `/usr/local/src/redis-2.8.9/src'
make: *** [all] 错误 2 //这个错误该怎么解决呢?很简单,把redis目录删除,重新tar xf redis-2.8.9.tar.gz,再次进入新的redis目录下,make,就不会报错了
[root@bogon redis-2.8.9]# rm -rf redis-2.8.9
[root@bogon redis-2.8.9]# tar xf redis-2.8.9.tar.gz
[root@bogon redis-2.8.9]# cd redis-2.8.9
[root@bogon redis-2.8.9]# make
Hint: To run 'make test' is a good idea ;)
make[1]: Leaving directory `/usr/local/src/redis-2.8.9/src'
[root@bogon redis-2.8.9]# echo $? //echo $? 返回状态码是0,make基本上就没问题了
0
[root@bogon redis-2.8.9]# make test //不放心,就用make test检测一下。但是在[35/36 done]: unit/obuf-limits (68 seconds)这里,会停止大概几分钟,并不是卡住了,请耐心等待
\o/ All tests passed without errors! //经过几分钟的等待,出现这个,就表示没有错误了
PS:其实在make那步,可以用make PREFIX=/usr/local/redis/ install 意思是,我们可以选择redis的安装路径,然后在make test。
[root@bogon redis-2.8.9]# mkdir -pv /usr/local/redis/{bin,conf}
mkdir: 已创建目录 "/usr/local/redis"
mkdir: 已创建目录 "/usr/local/redis/bin"
mkdir: 已创建目录 "/usr/local/redis/conf"
[root@bogon redis-2.8.9]# cd src/ //进入src目录下,因为我们在make时,会产生5个文件,分别是: redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server
[root@bogon src]# pwd //后面会解释这几个文件作用
/usr/local/src/redis-2.8.9/src
[root@bogon src]# cp redis-benchmark redis-check-aof redis-check-dump redis-sentinel redis-server redis-cli /usr/local/redis/bin/
[root@bogon src]# cd ../ && cp redis.conf /usr/local/redis/conf/ //从redis-2.8.9目录下拷贝redis配置文件redis.conf到/usr/local/redis/conf/我们刚才建立的conf目录下
[root@bogon redis-2.8.9]# vi /usr/local/redis/conf/redis.conf //注意,我们修改的redis.conf文件是在/usr/local/redis/conf/目录下的,而不是redis-2.8.9目录下的,切记!
将配置文本中的daemonize yes 由no改为yes,启动守护进程。 //redis.conf配置文本中,我们可以定义很多东西,比如redis的日志及日志存放的路径,redis产生的数据名称,默认是dump.rdb,我们可以去修改它的名字,它的存放路径等等
修改完毕后,保存退出,启动redis。
[root@bogon redis-2.8.9]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf //每次都写这么长长的一串,很不方便,我们将redis添加到环境变量中去,我们就可以直接redis-server了。redis启动,要带上redis.conf的配置文件
[root@bogon redis-2.8.9]# echo "PATH=$PATH:/usr/local/redis/bin/" >> /etc/profile
[root@bogon redis-2.8.9]# . /etc/profile
为redis提供启动脚本
[root@bogon redis-2.8.9]# cp /usr/local/src/redis-2.8.9/utils/redis_init_script /etc/init.d/redis
修改文件
在第二行添加 # chkconfig: 2345 80 90 注意:前面的#带上
以下内容根据实际情况做修改
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/usr/local/redis/var/redis.pid
CONF="/usr/local/redis/etc/redis.conf"
[root@bogon redis-2.8.9]# chkconfig --add redis
[root@bogon redis-2.8.9]# service redis start
[root@bogon redis-2.8.9]# redis-cli
127.0.0.1:6379> set 1 2
OK
127.0.0.1:6379> get 1
"2"
127.0.0.1:6379> quit
[root@bogon redis-2.8.9]# //至此,redis安装完成了
二:redis主从(master/slave)
Redis的master/slave数据复制方式可以是一主一从或者是一主多从的方式,Redis在master是非阻塞模式,也就是说在slave执行数据同步的时候master是可以接受客户端的请求的,并不影响同步数据的一致性,然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。
Redis的 master/slave 模式下,master提供数据读写服务,而slave只提供读服务。
Redis的master/slave的配置方式是在slave主机的Redis目录下的redis.conf配置文件中添加:
安装redis(从:192.168.210.101)
[root@bogon src]# wget -c http://download.redis.io/releases/redis-2.8.9.tar.gz
[root@bogon src]# yum -y install gcc gcc-c++ tcl
[root@bogon src]# tar xf redis-2.8.9.tar.gz
[root@bogon redis-2.8.9]# cd redis-2.8.9
[root@bogon redis-2.8.9]# make PREFIX=/usr/local/redis install //注意:我在这里,选择安装路径了,完成后,会在/usr/local/redis/下面产生一个bin目录。其中bin目录中就有了5个文件。这就不需要我们去拷贝了。
[root@bogon redis-2.8.9]# make test
[root@bogon redis-2.8.9]# mkdir -pv /usr/local/redis/{log,conf} //一个是存放log日志,另一个是存放配置文件的
[root@bogon redis-2.8.9]# mkdir -pv /data/redis //这里是存放数据的,就是那个dump.rdb
[root@bogon redis-2.8.9]# cd /usr/local/redis/conf
[root@bogon conf]# cp /usr/local/src/redis-2.8.9/redis.conf .
[root@bogon conf]# vi redis.conf
在从服务器上,我们修改redis.conf这几个地方:
daemonize yes //由no改成yes
logfile "" //日志存放路径,这里等写上redis6379.log,这个文档会在/usr/local/redis/log/下自动生成,日志名字可以随便写!改成 logfile "/usr/local/redis/log/redis6379.log"
slaveof //slaveof 主服务器ip地址 端口,改成 slaveof 192.168.210.102 6379
dir ./ //改成dir /data/redis,我们前面创建的一个专门用来放数据的
[root@bogon conf]# echo "PATH=$PATH:/usr/local/redis/bin/" >>/etc/profile
[root@bogon conf]# . /etc/profile
[root@bogon conf]# redis-server /usr/local/redis/conf/redis.conf //启动脚本,我就不写了
[root@bogon conf]# redis-cli -p 6379 //如果你以后遇到,redis的默认端口不是6379,那么带上端口启动
127.0.0.1:6379> get 1
"null" //为什么会是null呢?明明在主的redis上面,我们set 1 2 ,那么,在从服务器上面的redis,我们去get 1,应该会得到2,我们去看看日志!
[root@bogon conf]# vim ../log/redis6379.log
日志显示:
[5925] 30 Jul 19:37:29.147 # Server started, Redis version 2.8.9
[5925] 30 Jul 19:37:29.147 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sys ctl vm.overcommit_memory=1' for this to take effect.
[5925] 30 Jul 19:37:29.147 * The server is now ready to accept connections on port 6379
[5925] 30 Jul 19:37:29.148 * Connecting to MASTER 192.168.210.102:6379
[5925] 30 Jul 19:37:29.148 * MASTER SLAVE sync started
[5925] 30 Jul 19:37:29.149 * Non blocking connect for SYNC fired the event.
[5925] 30 Jul 19:37:29.150 * Master replied to PING, replication can continue...
[5925] 30 Jul 19:37:29.150 * Partial resynchronization not possible (no cached master)
很明显,我们的防火墙没有关闭,但是在实际,线上服务器上,你可不能直接用iptables -F。。。去把redis端口放开即可!
[root@bogon conf]# iptables -F //这里就是直接清空了,因为是虚拟机
[root@bogon conf]# /etc/init.d/iptables save //使得上一步生效,主服务器上,也要关闭防火墙
[root@bogon conf]# redis-cli -p 6379
127.0.0.1:6379> get 1
"2"
127.0.0.1:6379> info //get得到了2了,主从同步了!也可以使用info测试
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
三:redis在线升级 PS:把服务器上的redis给升级到redis-3.0.3
[root@bogon conf]# redis-server -v
Redis server v=2.8.9 sha=00000000:0 malloc=jemalloc-3.2.0 bits=64 build=68789c703e196441 //查看版本
redis默认有持久化的特点,持久化是由2个方式起作用的,一个是快照方式,一个是日志追加方式。
快照方式:
这种方式就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名是dump.rdb。客户端也可以使用bgsave或者save命令通知redis做一次快照的持久化。save操作是在主线程中保存快照的,由于redis是用一个主线程来处理所有用户的请求的。这种方式会阻塞所有用户的请求。每次快照持久化都是将内存中的数据完整的写入到硬盘一次,并不是增量的只同步增量数据。如果数据量大的话,写操作会比较多,必然会引起大量的磁盘IO,可能会严重影响性能。
注意:由于快照方式是在一定的间隔时间去做一次,所以如果redis意外宕机的话,就会丢失最后一次快照后的所有数据的修改。
日志追加方式:(Append-only file)
aof比快照方式有更好的持久化性,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。(原理性比较强,不对请指出来!)
[root@bogon conf]# redis-cli
127.0.0.1:6379> get 1
"2"
127.0.0.1:6379> quit
[root@bogon conf]# cd /usr/local/src
[root@bogon src]# wget -c http://download.redis.io/releases/redis-3.0.3.tar.gz
[root@bogon src]# tar xf redis-3.0.3.tar.gz
[root@bogon src]# cd redis-3.0.3
[root@bogon redis-3.0.3]# mkae
[root@bogon redis-3.0.3]# cd src/
[root@bogon src]# cp redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin/ //覆盖掉,关于这步,我也不太肯定,到底会不会对线上的redis服务有什么影响,有会的,指点一下呗!
[root@bogon src]# redis-cli
127.0.0.1:6379> get 1
"2"
127.0.0.1:6379> quit
[root@bogon src]# redis-server -v
Redis server v=3.0.3 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=398767c84084f77f
[root@bogon src]# pwd
/usr/local/src/redis-3.0.3/src/redis-3.0.3/src
[root@bogon src]# //即使主从上redis的版本变了不一样了,可是依旧能够主从同步!
四:redis多实例
这次,我们在从上做实验!从上的版本目前是 [root@bogon conf]# redis-server -v
Redis server v=2.8.9 sha=00000000:0 malloc=jemalloc-3.2.0 bits=64 build=68789c703e196441
[root@bogon conf]# cd /usr/local/redis/
[root@bogon redis]# ls
bin conf log
[root@bogon redis]# mkdir -pv /home/test/redis
mkdir: 已创建目录 "/home/test"
mkdir: 已创建目录 "/home/test/redis"
[root@bogon redis]# mkdir -pv /home/test/redis/{log,bin,conf,data}
mkdir: 已创建目录 "/home/test/redis/log"
mkdir: 已创建目录 "/home/test/redis/bin"
mkdir: 已创建目录 "/home/test/redis/conf"
mkdir: 已创建目录 "/home/test/redis/data"
[root@bogon redis]# cp /usr/local/redis/conf/redis.conf /home/test/redis/conf/redis6380.conf //拷配置文件,名字注意区别。
[root@bogon redis]# vim !$
修改配置文件了,注意端口改成6380,日志的路径,数据的路径等等。
[root@bogon redis]# redis-server /home/test/redis/conf/redis6380.conf //启动6380这个实例
[root@bogon redis]# redis-cli
127.0.0.1:6379> quit
[root@bogon redis]# redis-cli -p 6380 //与redis交互要带上端口,否则就是默认的6379
127.0.0.1:6380> get 1
(nil)
127.0.0.1:6380> get 3
(nil)
127.0.0.1:6380> quit //新的数据,没有受到别的redis的影响!
[root@bogon redis]#
总结一下:所谓的单主机多redis实例,就是一个非常方便的redis多用技术, 他的实现方法也是非常简答,就是把配置文件拷贝一份,到你指定的地方,改一改,,然后就去用redis-server ,带上实例的配置文件,启动就ok了!
五:redis常见的操作
就初级运维而言,学会了安装redis,主从,升级,实例,和对其原理性的知识懂得一点,就可以了。但是,平时,工作当中,redis操作,我们也要会使用一些简单的。
redis-server 带上配置文件,这就是启动redis的命令
redis-cli 带上端口号, 在linux上与redis实现交互
redis-cli shutdown 关闭redsi,redis进程没有了
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com