一、安装redis
下载redis安装包:redis-3.2.4.tar.gz
解压redis压缩包
解压后目录
进入redis-3.2.4
安装redis
安装完成后,输入redis-server -v,出现以下结果,即为安装成功
二、搭建redis集群
创建文件夹redis-sentinel,mkdir redis-sentinel
复制redis配置文件redis.conf到redis-sentinel文件夹中
进入redis-sentinel文件夹中
修改redis.conf文件名为6379.conf
使用vi命令修改6379.conf文件:
bind后修改为你虚拟机的ip地址(使用ifconfig命令查看虚拟机ip)
daemonize改为yes
端口port为6379
修改完保存
再复制两份.conf文件分别为6380.conf和6381.conf
修改6380.conf文件:6380.conf里的port改为6380
pidfile文件改为6380.pid
最后加一条slaveof 192.168.133.99 6379,ip为虚拟机ip,端口为你要设为主的redis端口,这里让6379为主(master),6380和6381为从(slave)
6381.conf修改和6380的修改一样,只是port端口号和pidfile路径改为6381就可以了,这里不再赘述。
修改完成以后,启动redis服务:
redis-server 6379.conf
redis-server 6380.conf
redis-server 6381.conf
查看进程,如下信息,即为安装成功
三、配置哨兵
回到上层目录,复制sentinel.conf到redis-sentinel文件夹中
进入redis-sentinel文件夹,修改sentinel.conf,添加以下两条配置,bind ip为虚拟机ip:
daemonize yes
bind 192.168.133.99
打开protected-mode,设置为yes
修改sentinel monitor mymaster后ip为虚拟机ip,端口为主的端口
(根据个人情况修改,可改可不改)修改sentinel down-after-milliseconds为3秒,默认为30秒,指的是主redis挂掉以后,经过多少秒哨兵会选举一个主redis(master)
启动哨兵redis-sentinel sentinel.conf
启动后查看进程,ps -ef | grep redis,显示以下结果,即为启动成功
四、验证
使用以下命令进入6379、6380、6381的客户端:
redis-cli -h 192.168.133.99 -p 6379
redis-cli -h 192.168.133.99 -p 6380
redis-cli -h 192.168.133.99 -p 6381
在6379客户端输入info,回车,查看该redis的信息
6379客户端信息如下,role:master,可以看到角色为master,下面有两个slave,分别为6380和6381
在6380客户端输入info,回车,可以看到role为slave,主master为6379端口,6381客户端和6380一样,不再赘述
在6379客户端输入set name zhangsan
去6380和6381客户端查看
可以看到都能得到数据。
但是如果在6380和6381客户端往redis里写数据的话,会提示你slave只能读数据,不能写数据。master可以读、写数据,slave只能读数据。
现在6379为master,把6379进程杀掉
再去6381客户端用info查看信息,可以发现此时6381已经被推举为master了,slave为6380
6380客户端信息,可以看到role为slave,master为6381
重新打开redis服务,进入redis客户端
打开哨兵客户端,redis-cli -h 192.168.133.99 -p 26379
sentinel master mymaster,查看master的信息
sentinel slaves mymaster,查看slaves的信息,可以看到有两个slave
sentinel get-master-addr-by-name mymaster,可以获取当前master的ip和端口
info sentinel,查看哨兵信息
另外,可以写个redis服务启动和停止的脚本,分别为start.sh和stop.sh
赋权限
使用start.sh和stop.sh
start.sh
#!/bin/sh
redis-server 6379.conf
redis-server 6380.conf
redis-server 6381.conf
redis-sentinel sentinel.conf
echo "redis start ok!"
stop.sh
#!/bin/sh
ps -ef | grep redis | grep -v grep | kill -9 `awk '{print $2}'`
echo "redis stop ok!"