首先普及一下什么是Redis,其实就是一个数据库,只不过它是以Key-Value的数据形式存储数据而已,多用来做为缓存高访问量的数据,通过主从读写分离、搭建集群使得高并发访问环境下,系统有较好的稳定性。下面是我搭建主从集群的方法,欢迎提意见。
1.下载Redis:
官方网站上下载redis-3.0.1,地址:
http://download.redis.io/releases/redis-3.0.1.tar.gz
2.解压文件:
tar -zxvf redis-3.0.1.tar.gz
3.编译安装:
进入目录:cd redis-3.0.1
执行命令:make
make install
注:执行成功后会生成四个可执行文件,文件存放的目录在/usr/local/bin中,分别是:
redis-benchmark、redis-cli、redis-server、redis-stat
Redis运行所需要的配置文件redis.conf,存放的目录在/etc
4.运行Redis:
执行命令:/usr/local/bin/redis-server /etc/redis.conf
redis-cli ##进入redis命令操作工具
set name yangzx ##存储数据
get name ## 获取对应变量值
注:显示界面如下,则配置成功:
实验是在一台虚拟机上设置的,因此使用了多个Redis实例,通过复制多份redis.conf可以生成多个不同的实例,与在多台机器上配置是一致的。
1.复制配置文件redis.conf:
执行命令:cp /etc/redis.conf /etc/redis6380.conf ##复制配置文件并重命名
sudo vi /etc/redis6380.conf ##打开配置文件,查看内容并修改
修改内容,将port修改为6380,配置Replication中slaveof为master的IP和PORT,具体如下:
port 6380
slaveof 127.0.0.1 6379
按照如上的步骤,配置第三个Redis实例,端口号为6381。
2.启动三个Redis实例:
执行命令:/usr/local/bin/redis-server /etc/redis.conf
/usr/local/bin/redis-server /etc/redis6380.conf
/usr/local/bin/redis-server /etc/redis6381.conf
这样就启动了端口号分别为6379,6380,6381三个Redis。
3.测试读写分离:
执行命令:redis-cli -p 6379 ##进入端口号为6379的Redis实例(master)
set name yangzx
get name
quit ##退出当前Redis,可以使用快捷键ctrl+c直接退出
运行界面如下:
执行命令:redis-cli -p 6380 ##进入端口号为6380的Redis实例(slaver)
get name ##测试是否能获得master存储的数据
set name yangzhenxiong ##测试是否能在slaver上进行写数据
运行界面如下:
对于另一个slaver 6381,其运行情况与6380一样。
Redis-Sentinel可以监控多个master-slave集群,发现master宕机后能进行自动切换。
1.配置sentinel文件:
在redis-3.0.1.tar.gz的解压文件夹redis-3.0.1中有一个sentinel.conf文件,将其复制到/etc下,进行配置。
执行命令:cp /home/yzx/download/redis-3.0.1/sentinel.conf /etc
sudo vi /etc/sentinel.conf ##查看配置文件的内容,需要修改的内容不多
主要配置:sentinel monitor mymaster 127.0.0.1 6379 1 ,这里是配置master的信息,不需要配置slave的信息,通过监测master就能获得所有slave的信息了。
其余配置可以使用默认配置,有:
sentinel down-after-milliseconds mymaster 60000 ##可以将时间设短点,缩短实验时间
sentinel failover-timeout mymaster 180000
2.测试redis sentinel主从切换:
首先启动之前配置的三个Redis实例,端口号6379(master),6380(slave),6381(slave)
执行命令:ps ax|grep redis ##查看redis的运行情况
redis-cli -p 6379
info replication ##查看当前master和slave的情况
redis-sentinel /etc/sentinel.conf --sentinel ##启动sentinel,必须重新打开新
##的终端运行该命令
测试slave(6380)节点断开后的情况,回到运行Redis实例的终端:
执行命令:redis-cli -p 6380 shutdown ##切换到sentinel终端进行观察
/usr/local/bin/redis-server /etc/redis6380.conf ##重新启动,并观察
测试master(6379)节点断开后的情况:
执行命令:redis-cli -p 6379 shutdown ##切换到sentinel终端进行观察
由于master宕机,sentinel进行了自我选举,产生了新的master 6381。
执行命令:redis-cli -p 6381
info replication ##查看主从集群状态
可以观察到目前集群的master是6381,只有一个slave 6380。我们再次启动6379的Redis实例,看看效果如何:
执行命令:/usr/local/bin/redis-server /etc/redis.conf ##重新启动,并观察
redis-cli -p 6381
info replication ##查看主从集群状态
可以观察到新增加6379变成了slave,其master是6381。