设为首页 收藏本站
查看: 1383|回复: 0

[经验分享] Redis 3.0.7基于Sentinel的高可用安装及配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-3 09:00:42 | 显示全部楼层 |阅读模式
在生产场景下都必须做到高可用,否则出现问题就会造成服务停止。这里介绍下Redis的Sentinel功能实现的高可用,当然也有Redis提供的cluster功能。
wKioL1bWWbSz9bo5AAA2GOYNda8314.jpg

1.Redis的安装
1
2
3
4
5
6
7
8
9
10
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的配置
1
vim /usr/local/redis3.0.7/conf/redis.conf



(以下为db1的配置,db2的配置只需要增加一行slaveof 192.168.2.241 6379)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#是否以服务方式开启
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的配置
1
vim /usr/local/redis3.0.7/conf/sentinel.conf



1
2
3
4
5
6
7
8
9
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
1
2
/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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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
1
/sbin/ip addr add 192.168.2.250/24 dev eth0



使用上面脚本的时候需要注意你的网卡是eth0,否则可能出现VIP无法使用的情况

b.利用keepalived进行VIP的切换
1
2
3
4
5
6
7
8
9
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配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
! Configuration File for keepalived     
global_defs {     
   notification_email {     
     root@localhost     
   }     
   notification_email_from keepalived@localhost     
   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的配置文件,只需要将以上文件复制过来并修改下面参数
1
priority 98



#注意一下interface eth0看下你机器的网卡接口

c.利用consul服务注册
参考:http://www.iyunv.com/thread-184383-1-1.html

从上面可以看出以上三种方法:
脚本跟keepalived的形式一样,但是脚本相对轻量,首次启动麻烦,配置简单,依赖于redis-sentinel
keepalived启动简单,排错简便
consul适合大型场景,及云环境没有多余的IP这种情况

以上也适用于2台服务器的场景,也可以不用3台服务器。只需要更改
1
sentinel monitor master 192.168.2.241 6379 1



后面值更改为1即可


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-185608-1-1.html 上篇帖子: 安装php连接redis cluster扩展 下篇帖子: redis 高可用最新方案(实践)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表