Redis 主从配置以及哨兵模式

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主从配置
客户端登录:

redis-cli -p 7000
redis-cli -p 7001
redis-cli -p 7002

然后在客户端中键入info,查看当前节点的信息:
master 的基本信息:
master info
可以看到当前节点role是master,连接的从机数有两台,slave的ip以及端口号都可以清晰的获知;

slave1的基本信息:
slave的基本信息
与master的信息大同小异,slave2的信息,此处就不在展示出来了。

主从读写分离

redis的配置中默认就是主从读写分离的,当然你也可以通过修改配置文件中的slave-read-only;
进入master,可以看到是可以做写操作的:
设置键值
进入其他两台从机进行写操作,则会报一下错误:
从机写失败
此时,若是master挂掉了,slave并不会自动的升级为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

info sentinel
确认Master信息:

127.0.0.1:17000> sentinel masters

master info
确认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。

猜你喜欢

转载自blog.csdn.net/sheqianweilong/article/details/89057675