redis部署哨兵、cluster集群

star2017 1年前 ⋅ 726 阅读

生产环境,如果你是单机在线上跑的话,那么风险很大,一般情况下都会使用一主多从的架构,这样你的系统的可用性才能达到4个9 。

今天来讲讲如何部署读写分离架构,以及读写分离如何保证高可用?

假设你已经部署了2个redis,如果不知道怎么安装部署,可以看看这篇文章:redis生产环境安装

选择其中一个redis节点,作为slave节点,需要修改redis.conf文件;找到slaveof属性,设置master的ip和端口,这样主从架构就配置好了。
配置如下:

slaveof master-ip 6379

bind 当前机器的ip地址

slave-read-only yes

masterauth xxxx  #注意:如果你master设置了requirepass,那么slave中需要配置下面这个配置

配置完之后,使用“redis-cli -h ip -p 6379 -a 你的密码”连上去,输入:info,可以看到主从配置信息
imagepng
这个redis的role是master。

imagepng
这个redis的role是slave。

也可以使用slaveof命令,
imagepng
关闭slave
imagepng
利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

到此主从架构的配置就好了。
但是如果某些原因,master挂了,那么需要手动来把slave变成master。幸好redis提供了Sentinel(哨兵集群),可以不用人工介入就进行切换。使用该机制才能保证4个9 。

sentinel配置

首先cd到redis下面,找到sentinel.conf文件,把他cp到/etc/sentinal/目录下,并且命名为5000.conf(表示端口为5000)
mkdir /etc/sentinal
mkdir -p /var/sentinal/5000
cd /usr/local/redis
cp sentinel.conf /etc/sentinal
mv sentinel.conf 5000.conf

修改5000.conf的配置为

port 5000 
dir /var/sentinal/5000 
bind xxxx #指定你的ip地址

sentinel monitor mymaster 你的ip 6379 2  #哨兵监控的master。
quorum的解释:至少多少个哨兵要一致同意,master进程挂掉了,或者slave进程挂掉了,或者要启动一个故障转移操作

sentinel down-after-milliseconds mymaster 30000  #超过多少毫秒跟一个redis实例断了连接,哨兵就可能认为这个redis实例挂了

sentinel failover-timeout mymaster 60000 #若哨兵在配置值内未能完成故障转移操作,则任务本次故障转移失败。

sentinel parallel-syncs mymaster 1 #新的master被切换之后,同时有多少个slave被切换到去连接新master,重新做同步,数字越低,花费的时间越多

protected-mode no #保护模式如果开启只接受回环地址的ipv4和ipv6地址链接,拒绝外部链接,而且正常应该配置多个哨兵,避免一个哨兵出现独裁情况,如果配置多个哨兵那如果开启也会拒绝其他sentinel的连接。导致哨兵配置无法生效。

sentinel auth-pass mymaster redismasterpassword #如果你的redis设置了密码,那么你需要在这里配置密码 

logfile /var/sentina/logs/sentinel.log      #指明日志文件

使用redis-sentinel /etc/sentinal/5000.conf 来启动哨兵。
看到下面结果,表示哨兵配置成功了。
imagepng

可以使用下面这个命令,连上sentinal,查看具体信息
redis-cli -h 你的sentinal-ip -p 你的sentinal-port

sentinel master mymaster #查看redis master的信息
SENTINEL slaves mymaster #查看redis slave的信息
SENTINEL sentinels mymaster #查看其它的sentinal信息
SENTINEL get-master-addr-by-name mymaster #查看谁是master redis

如果你把master 关掉,哨兵就会自动帮你切换。
模拟把master redis关掉,哨兵切换过程如下图
imagepng
再次查看当前主从架构的master
imagepng
已经切换为6380了(之前的master是6379)

redis cluster配置

一般配置3个master,每个master下面配置一个salve。这样的配置可以保证系统高可用。如果你想你的更加稳定,那么可以在master下面都配置一些salve。

使用下面命令 创建文件夹
mkdir -p /etc/redis-cluster
mkdir -p /var/log/redis
mkdir -p /var/redis/6379

redis.conf文件的配置为:

port 6379
cluster-enabled yes
cluster-config-file /etc/redis-cluster/node-6379.conf #这是指定一个文件,供cluster模式下的redis实例将集群状态保存在那里,包括集群中其他机器的信息,比如节点的上线和下限,故障转移。
cluster-node-timeout 15000  #节点存活超时时长,超过一定时长,认为节点宕机,master宕机的话就会触发主备切换,slave宕机就不会提供服务
daemonize	yes							
pidfile		/var/run/redis\_6379.pid 						
dir 		/var/redis/6379
logfile /var/log/redis/6379.log
bind 你的ip地址		
appendonly yes

redis配置好了之后,就可以启动了

还需要安装ruby

yum install -y ruby
yum install -y rubygems
gem install -l /home/downloads/redis-3.2.1.gem #去官网https://rubygems.org/gems/redis下载相应的.gem文件,上传到服务器上
cp /usr/local/redis-3.2.8/src/redis-trib.rb /usr/local/bin

使用下面命令来创建集群
redis-trib.rb create --replicas 0 xxx:6379 xxx:6380 xxx:6381

出现了错误:
1、Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
解决:把dump.db数据清除掉。

2、[ERR] Sorry, can't connect to node
解决:因为一个节点我设置了密码,所以导致redis-trib.rb连接不上。requirepass注释掉。

3、ERROR: Invalid configuration for cluster creation.Redis Cluster requires at least 3 master nodes.
解决:因为之前我配置了两个节点,他创建集群必须要3个节点,那么在创建一个节点。

如果你看到这个,说明你已经成功配置了redis cluster
imagepng

本文为博主原创文章,未经博主允许不得转载。
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: