1.Redis的安装
可以参阅本人的另外一篇博文Redis安装
2.创建Redis节点
首先进入安装后的Redis目录下,创建三个子目录,依次命名文件夹子master,slave1,slave2;
然后将Redis的配置文件/etc/redis/redis.conf,分别拷贝到三个子目录下,并分别命名为master.conf、slave1.conf、slave2.conf,修改配置如下:
# master.conf
bind 127.0.0.1
port 7000
rdbcompression yes
daemonize yes
pidfile /usr/local/redis-5.0.3/master/
dbfilename dump_master.rdb
dir /usr/local/redis-5.0.3/master/
appendonly yes
maxmemory 500M
# slave1.conf
bind 127.0.0.1
port 7001
rdbcompression yes
daemonize yes
pidfile /usr/local/redis-5.0.3/slave1/
dbfilename dump_slave1.rdb
dir /usr/local/redis-5.0.3/slave1/
appendonly yes
maxmemory 500M
slaveof 127.0.0.1 7000
# slave2.conf
bind 127.0.0.1
port 7002
rdbcompression yes
daemonize yes
pidfile /usr/local/redis-5.0.3/slave2/
dbfilename dump_slave2.rdb
dir /usr/local/redis-5.0.3/slave1/
appendonly yes
maxmemory 500M
slaveof 127.0.0.1 7000
3.启动Redis节点
将下面执行命令写在一个start.sh的脚本中,
#!/bin/bash
./redis-server /usr/local/redis-5.0.3/master/redis_master.conf
./redis-server /usr/local/redis-5.0.3/slave1/redis_slave1.conf
./redis-server /usr/local/redis-5.0.3/slave2/redis_slave2.conf
执行sh脚本:
sh start.sh
查看是否启动成功:
ps -ef | grep redis
出现如下图所示界面,则即为启动已经成功。
客户端登录:
redis-cli -p 7000
redis-cli -p 7001
redis-cli -p 7002
然后在客户端中键入info,查看当前节点的信息:
master 的基本信息:
可以看到当前节点role是master,连接的从机数有两台,slave的ip以及端口号都可以清晰的获知;
slave1的基本信息:
与master的信息大同小异,slave2的信息,此处就不在展示出来了。
主从读写分离
redis的配置中默认就是主从读写分离的,当然你也可以通过修改配置文件中的slave-read-only;
进入master,可以看到是可以做写操作的:
进入其他两台从机进行写操作,则会报一下错误:
此时,若是master挂掉了,slave并不会自动的升级为master,需要手动进行设置:
手动的、人为的,显然比较麻烦,而且容易出错的,因此redis在后来的版本中加入的哨兵模式。
哨兵模式
redis-sentinel 能监视同期的状态,发现Master down的时候,会进行failover,将Slave升级为Master,启动后会自动更新sentinel设定文件,发生failover时,会自动修改sentinel和redis的设定文件。
我们还是使用上面已经启动好了的redis节点,进行sentinel的配置启动。
# 创建一个sentinel的文件用于存放master、slave1、slave2的三个sentinel的配置文件
mkdir /usr/local/redis-5.0.3/sentinel/
1、Master上设定Sentinel
vi /usr/local/redis-5.0.3/sentinel/master_sentinel.conf
# 内容如下:
port 17000
daemonize yes
sentinel monitor mymaster 127.0.0.1 7000 2
启动sentinel
redis-sentinel /usr/local/redis-5.0.3/sentinel/master_sentinel.conf
或者:
redis-server /usr/local/redis-5.0.3/sentinel/master_sentinel.conf --sentinel
确认
redis-cli -p 17000
确认Master信息:
127.0.0.1:17000> sentinel masters
确认Slave信息
127.0.0.1:17000> sentinel slaves mymaster
2、Slave上设定Sentinel
# 将master_sentinel.conf各拷贝一份到slave1、slave2,并修改名称为slave1_sentinel.conf、slave1_sentinel.conf
cp master_sentinel.conf ../slave1
cp master_sentinel.conf ../slave2
启动sentinel
redis-sentinel /usr/local/redis-5.0.3/sentinel/slave1_sentinel.conf
redis-sentinel /usr/local/redis-5.0.3/sentinel/slave2_sentinel.conf
验证
可以杀掉master的进程,然后查看slave下的信息是否升级为master。