天天看点

Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

Redis集群环境搭建

主从配置(基础)

优点:

Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。

Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据

支持主从复制,主机会自动将数据同步到从机,可以进行读写分离

缺点:

Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。

Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

案例使用:

redis版本 redis-5.0.3.tar.gz 下载地址http://download.redis.io/releases/

环境ubuntu14

这里采用常规的一主两从的模式

1.下载redis并导入到/usr/local/src/redis

2.在该目录下执行tar -zxvf redis-5.0.3.tar.gz

3.在解压后的文件夹目录执行make指令(需提前安装yum install gcc-c++)

4.解压完成后去src目录下看是否有redis-server文件有说明已经安装成功了

5.复制3分配置文件分别命名redis-6379.conf,redis-6380.conf,redis-6381.conf

redis-6379.conf(在原配置文件上修改)
#redis运行端口
port 6379
#后台运行
daemonize yes

redis-6380.conf
#redis运行端口
port 6379
#后台运行
daemonize yes
#所述那个主机
slaveof 127.0.0.1 6379

redis-6381.conf
#redis运行端口
port 6379
#后台运行
daemonize yes
#所述那个主机
slaveof 127.0.0.1 6379
           

然后启动3个实例(这里按照解压出来的路径没有做分类)

在/usr/local/src/redis/redis-5.0.3下执行
./src/redis-server redis-6379.conf
./src/redis-server redis-6380.conf
./src/redis-server redis-6381.conf
           

查看redis运行

ps -ef | grep redis
           
Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

这样说明已经成功启动了3个实例,然后进行简单的测试

Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

这里在主机上设置一个name从机上可以读取到但无法写,这样最简单的主从模式就搭建好了

哨兵模式(sentinel)

根据上面的主从配置同样的这边配置3个哨兵监督主机

新建哨兵模式的配置文件sentinel-26379.conf,sentinel-26380.conf,sentinel-26381.conf

#哨兵监听端口
port 26379
#哨兵工作目录
dir /usr/local/src/redis/sentinel-26379
#监控的master 2表示有2个哨兵认为出问题
sentinel monitor mymaster 127.0.0.1 6379 2
#master认证信息
sentinel auth-pass mymaster mldnjava 
#设置master不活跃时间
sentinel down-after-milliseconds mymaster 30000
#选举新的master失败时间
sentinel failover-timeout mymaster 180000
#只有1个master
sentinel parallel-syncs mymaster 1
#撤销redis保护模式
protected-mode no
           

如果没有特殊需求我们可以简化采用默认配置只需要配置这边不再后台运行

#哨兵监听端口
port 26379
#监控的master 2表示有2个哨兵认为出问题
sentinel monitor mymaster 127.0.0.1  6379 2

#哨兵监听端口
port 26380
#监控的master 2表示有2个哨兵认为出问题
sentinel monitor mymaster 127.0.0.1  6379 2

#哨兵监听端口
port 26381
#监控的master 2表示有2个哨兵认为出问题
sentinel monitor mymaster 127.0.0.1  6379 2
           

跟上面一样启动实例

在/usr/local/src/redis/redis-5.0.3下执行
./src/redis-server redis-6379.conf
./src/redis-server redis-6380.conf
./src/redis-server redis-6381.conf
           
Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

这样就能监控到主机和从机的状态、接下来我们把主机关了

Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

将主机关掉之后

Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

我们可以看到6381端口的从机切换成了主机我们进入看一下这台机器的状态

Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

他的角色已经变成了主机,这就完成了简单的哨兵模式的主从自动切换,重新启动6379的redis发现

Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

发现它已经变成了从机,检查哨兵配置文件发现变动了很多,这也是哨兵模式的缺陷。

集群模式(Cluster)

首先集群模式不再需要哨兵,因此这里只需要修改redis.conf配置文件即可

这次我们准备8个节点对于端口6379-6386,按如下修改配置文件

#取消本机ip绑定
#bind 127.0.0.1
#在配置之前一定要取消保护模式
protected-mode no
#监听端口
port 6379
后台运行
daemonize yes
定义pid保存路径
pidfile /usr/local/src/redis
定义日志路径
logfile "/usr/local/src/redis"
数据保存目录
dir /usr/local/src/redis
不要配置密码
#requirepass
打开RedisCluster集群
cluster-enabled yes
定义cluster配置的保存文件
cluster-config-file nodes-6379.conf
定义节点的超时时间
cluster-node-timeout 15000
           

然后分别启动8个节点

在/usr/local/src/redis/redis-5.0.3下执行
./src/redis-server redis-6379.conf
./src/redis-server redis-6380.conf
./src/redis-server redis-6381.conf
./src/redis-server redis-6382.conf
./src/redis-server redis-6383.conf
./src/redis-server redis-6384.conf
./src/redis-server redis-6385.conf
./src/redis-server redis-6386.conf
           
Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

因为我这里使用的是5.0版本不再使用redis-trib.rb工具5.0以下版本可参考https://www.cnblogs.com/jianjianyang/archive/2017/09/03/7467875.html

输入集群配置指令

在/usr/local/src/redis/redis-5.0.3下执行
./src/redis-cli --cluster create 101.37.159.107:6379 101.37.159.107:6380 101.37.159.107:6381 101.37.159.107:6382 101.37.159.107:6383 101.37.159.107:6384 101.37.159.107:6385 101.37.159.107:6386 --cluster-replicas 1
           
Redis主从配置、哨兵模式、集群模式Redis集群环境搭建
Redis主从配置、哨兵模式、集群模式Redis集群环境搭建

运行到这说明你的集群已经搭建成功了

继续阅读