Redis 3.0.7基于Sentinel的高可用安装及配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 3.0.7基于Sentinel的高可用安装及配置相关的知识,希望对你有一定的参考价值。
在生产场景下都必须做到高可用,否则出现问题就会造成服务停止。这里介绍下Redis的Sentinel功能实现的高可用,当然也有Redis提供的cluster功能。
1.Redis的安装
wget http://download.redis.io/releases/redis-3.0.7.tar.gz tar zxf redis-3.0.7.tar.gz cd redis-3.0.7 make cd src mkdir -p /usr/local/redis3.0.7/{sbin,data,conf} scp -r mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server localhost:/usr/local/redis3.0.7/sbin cp ../redis.conf /usr/local/redis3.0.7/conf/ echo ‘PATH=$PATH:/usr/local/redis3.0.7/sbin‘ >>/etc/profile source /etc/profile
2.Redis的配置
vim /usr/local/redis3.0.7/conf/redis.conf
(以下为db1的配置,db2的配置只需要增加一行slaveof 192.168.2.241 6379)
#是否以服务方式开启 daemonize no pidfile /var/run/redis.pid #端口 port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 0 #日志提醒级别 loglevel notice #日志文件路径 logfile "" #数据库数量 databases 16 #日志刷新策略(Master禁用) save 900 1 #说明900秒内1次改动,自动保存一次数据集 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes #以rdb方式存储时是否压缩 rdbcompression yes #rdb是否校验 rdbchecksum yes #数据文件名 dbfilename dump.rdb #数据文件路径 dir /usr/local/redis3.0.7/data slave-serve-stale-data yes #从服务器只读 slave-read-only yes #指定与主数据库连接时需要的密码验证,主库无需设置 #masterauth #masterauth repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 ##启用增量(Master禁用) appendonly no #增量日志文件名,默认值为appendonly.aof appendfilename "appendonly.aof" #设置对 appendonly.aof 文件进行同步的频率 #always 表示每次有写操作都进行同步,everysec 表示对写操作进行累积,每秒同步一次。 #no表示等操作系统进行数据缓存同步到磁盘,都进行同步,everysec 表示对写操作进行累#积,每秒同步一次 appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes #最大可用内存 #maxmemory 2mb #配置成从服务器 #slaveof 192.168.2.250 6379 #客户端连接访问口令 # requirepass foobared #限制同时连接的客户数量,防止过多的client导致内存耗尽。如果有足够内存可以不进行#设置 #maxclients 10000
3.Sentinel的配置
vim /usr/local/redis3.0.7/conf/sentinel.conf
port 26379 sentinel monitor master 192.168.2.241 6379 2 sentinel down-after-milliseconds master 5000 sentinel failover-timeout master 900000 #sentinel can-failover master yes sentinel parallel-syncs master 2 # Generated by CONFIG REWRITE dir "/usr/local/redis3.0.7/conf" #sentinel client-reconfig-script master /usr/local/redis3.0.7/sbin/vip.sh
4.启动redis-server及redis-sentinel
在db1,db2,db3上分别启动redis-server及redis-sentinel
/usr/local/redis3.0.7/sbin/redis-server /usr/local/redis3.0.7/conf/redis.conf /usr/local/redis3.0.7/sbin/redis-sentinel /usr/local/redis3.0.7/conf/sentinel.conf
这个时候就已经做好了Redis的主从复制及故障转移,我们客户端的连接就需要修改,因此就涉及到VIP的问题,客户端只要连接VIP的问题,目前VIP的解决方法有
利用redis-sentinel的sentinel client-reconfig-script参数进行设置
利用keepalived进行VIP的转移
利用consul进行服务注册
a.利用redis-sentinel自带的参数进行VIP的配置
在db1,db2的sentinel.conf中加入
sentinel client-reconfig-script master1 /usr/local/redis3.0.7/sbin/vip.sh
然后创建脚本/usr/local/redis3.0.7/sbin/vip.sh
#!/bin/bash MASTER_IP=$6 LOCAL_IP=‘192.168.2.241‘ #从库修改为192.168.2.242 VIP=‘192.168.2.250‘ NETMASK=‘24‘ INTERFACE=‘eth0‘ if [ ${MASTER_IP} = ${LOCAL_IP} ]; then /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE} /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE} exit 0 else /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE} exit 0 fi exit 1
在集群启动的时候需要手动添加VIP
/sbin/ip addr add 192.168.2.250/24 dev eth0
使用上面脚本的时候需要注意你的网卡是eth0,否则可能出现VIP无法使用的情况
b.利用keepalived进行VIP的切换
wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz tar zxf keepalived-1.2.19.tar.gz cd keepalived-1.2.19 ./configure --prefix=/usr/local/keepalived1.2.19 --disable-fwmark make && make install ln -s /usr/local/keepalived1.2.19/sbin/keepalived /usr/sbin/ ln -s /usr/local/keepalived1.2.19/etc/sysconfig/keepalived /etc/sysconfig/ ln -s /usr/local/keepalived1.2.19/etc/keepalived/ /etc/keepalived ln -s /usr/local/keepalived1.2.19/etc/rc.d/init.d/keepalived /etc/init.d/
db1的keepalived配置文件
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 10 router_id keepalivedha_1 } vrrp_script chk_redis_role { script "/usr/local/redis3.0.7/sbin/redis-cli info | grep role:master >/dev/null 2>&1" interval 1 timeout 2 fall 2 rise 1 } vrrp_sync_group VG_1 { group { VI_1 } } vrrp_instance VI_1 { state BACKUP interface eth0 #use_vmac keepalived #vmac_xmit_base smtp_alert virtual_router_id 20 priority 100 advert_int 1 authentication { auth_type PASS auth_pass password } virtual_ipaddress { 192.168.2.250 } track_script { chk_redis_role } }
db2的配置文件,只需要将以上文件复制过来并修改下面参数
priority 98
#注意一下interface eth0看下你机器的网卡接口
c.利用consul服务注册
参考:http://dgd2010.blog.51cto.com/1539422/1745314
从上面可以看出以上三种方法:
脚本跟keepalived的形式一样,但是脚本相对轻量,首次启动麻烦,配置简单,依赖于redis-sentinel
keepalived启动简单,排错简便
consul适合大型场景,及云环境没有多余的IP这种情况
以上也适用于2台服务器的场景,也可以不用3台服务器。只需要更改
sentinel monitor master 192.168.2.241 6379 1
后面值更改为1即可
本文出自 “枫林晚” 博客,请务必保留此出处http://fengwan.blog.51cto.com/508652/1746731
以上是关于Redis 3.0.7基于Sentinel的高可用安装及配置的主要内容,如果未能解决你的问题,请参考以下文章
Redis Sentinel安装与部署,实现redis的高可用