您的位置:首页 > 数据库 > Redis

用haproxy+redis实现分布式redis服务器

2014-09-18 16:14 274 查看
redis是一个非常强大的nosql服务,不仅能替代memcache这样的key/value服务,也具有强大的队列功能,在普通应用上可以替代activemq/rabbitmq一类队列服务

但是目前为止,redis都没有实现真正有效的集群功能,redis的作者承诺会在redis 3.0的时候将名为“redis-cluster”的集群功能加入redis,但是截至目前,redis还是2.8版本

redis本身不具有集群,不代表我们不能实现redis集群,通过思考,我选择使用流行的负载均衡器+redis的组合来实现

在负载均衡器的选择上,我选择haproxy。目前圈内流行的负载均衡器有lvs、nginx、haproxy,lvs的资料相对较少,nginx只支持http和email的负载均衡,相较之下,只有haproxy比较适合我们的应用场景。

多的不说了,我们马上开始

实验过程全部在一台服务器上进行:

192.168.1.168

在这台服务器上只装了一个redis

/usr/local/redis

但是通过使用不同的配置文件(实际只是copy了同一份配置文件,改一下监听端口),开启了两个redis监听实例,就等于两个redis了

192.168.1.168:6379

192.168.1.168:6378

我们的haproxy装在

/usr/local/haproxy

安装过程很简单

到http://download.chinaunix.net/download/0013000/12508.shtml下载haproxy的最新版本,我选择下载http://down1.chinaunix.net/distfiles/haproxy-1.4.21.tar.gz这个

tar zxvf haproxy-1.4.21.tar.gz

mv haproxy-1.4.21 /usr/local/haproxy

cd /usr/local/haproxy

make install

这样就装好了,简单不

接下来要写配置文件

cd /usr/local/haproxy

mkdir conf log

cd conf

vim haproxy.cfg

配置内容如下:

global

log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出

maxconn 4096 #最大连接数

chroot /usr/local/haproxy #改变当前工作目录

user haproxy #所属运行的用户

group haproxy #所属运行的用户组

daemon #以后台形式运行ha-proxy

nbproc 4 #启动4个ha-proxy实例

pidfile /usr/local/haproxy/log/haproxy.pid #pid文件位置

defaults

log 127.0.0.1 local3 #日志文件的输出定向

mode tcp #{ tcp|http|health } 设定启动的实例的协议类型,此处要选择tcp,因为redis是基于tcp协议运行的

option dontlognull #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包

option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器

retries 2 #重试2次连接失败就认为服务器不可用,主要通过后面的check检查

maxconn 2000 #最大连接数

balance roundrobin #负载均衡算法,roundrobin表示轮询,source表示按照IP

contimeout 5000 #连接超时时间

clitimeout 50000 #客户端连接超时时间

srvtimeout 50000 #服务器端连接超时时间

listen proxy 192.168.1.168:6300

server redis_192.168.1.168_6378 192.168.1.168:6378 check inter 2000 rise 2 fall 5 #你的均衡节点

server redis_192.168.1.168_6379 192.168.1.168:6379 check inter 2000 rise 2 fall 5

配置文件保存,然后来启动haproxy

/usr/local/haproxy/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

如果修改了配置文件要重新运行,先要结束haproxy的所有进程

killall haproxy

然后再重新执行启动haproxy的命令

这样redis的集群就搭好了!

现在来试验一下,php代码:

$redis = new Redis();

$redis->connect('192.168.1.168',6300);

$r = $redis->info();

print_r($r);

打印出来的状态数组,能看得出来是不同的实例,process_id是不同的进程id

以上是为实现redis集群目的进行的haproxy配置,haproxy是一款非常强大的负载均衡器,功能不止于此

更多的haproxy配置方法请参考:

http://blog.zhanxb.com/post/476

更详细的haproxy配置参数解释请参考:

/article/4868258.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: