[NOSQL] Redis介绍
Redis概述
Redis是Salvatore Sanfilippo在2009年为其初创公司LLOOGG开发的,目前仍是独立项目,但VMWare赞劣了项目(作者是其雇员)。它采用C语言实现,因此性能很好。采用BSD许可证,使用键值存储,和Amazon Dynamo,Cassandra,Riak,Voldemort,Memcache类似。支持丰富的数据类型,比如数组,链表,集合等,非常适合需要表达时间线的web服务,例如微博。
Redis支持的数据类型有:
- 字符串
- 链表
- 集合
- 有序集合
- 散列表
Redis的主从复制
Redis的高可用
目前为止,Redis官方还在开发redis-cluster,可参考http://redis.io/topics/cluster-spec,中译版http://www.cnblogs.com/chang290/archive/2012/09/05/2672506.html
但我们可以使用keepalived+redis的方法实现高可用,如下所示:
1. redis的配置
主机 端口 角色
redis0 6379 master
redis1 6379 slave
2. keepalived的配置
redis0和redis1使用一个虚拟ip
并使用如下脚本监控redis服务是否存活:
#!/bin/bash
/usr/local/bin/redis-cli -h 192.168.1.53 -p 6379 info > /dev/null
if [ $? -eq 0 ]; then
echo "redis OK"
exit 0
else
echo "no redis service found!"
/usr/local/bin/redis-server /path/to/redis.conf
# try to start it again
/usr/local/bin/redis-cli -h 192.168.11.53 -p 6380 info > /dev/null
if [ $? -eq 0 ]; then
exit 0
else
# restart failed
killall keepalived
echo "error"
fi
fi
要实现redis的故障恢复,可以使用keepalived配置的notify_master, notify_backup这两个方法执行特有的脚本。实际上只要在slave(即redis1)上有2个脚本,第一个用于在redis1接管虚拟ip之后,执行slaveof no one把自己变成master。第二个是在redis1交出虚拟ip之后,在redis0执行slaveof no one确保redis0恢复为主的状态,并对redis1执行slaveof redis0 6379开始重新从master同步数据,如果自己已经是slave就没必要同步了。
redis1上keepalived的配置方法如下,redis0只要去掉notify_master, notify_backup两行即可。
! Configuration File for keepalived
global_defs {
router_id redis1
}
vrrp_script Monitor_Redis {
script "/opt/redis_keepalive.sh"
interval 10
weight 2
}
vrrp_instance 360 {
state BUCKUP #(主机为MASTER,备用机为BACKUP)
interface eth0 #(HA监测网络接口)
virtual_router_id 110 #(主、备机的virtual_router_id必须相同)
mcast_src_ip 192.168.11.53 #(多播的源IP,设置为本机外网IP,与VIP同一网卡)此项可不设置
priority 70 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int 1 #(VRRP Multicast广播周期秒数)
authentication {
......
}
notify_master /opt/redis_2master.sh
notify_backup /opt/redis_2backup.sh
track_script {
Monitor_Redis #(调用nginx进程检测脚本)
}
virtual_ipaddress {
192.168.11.4 #(VRRP HA虚拟地址)
}
}