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

来源:互联网 发布:淘宝比价软件 编辑:程序博客网 时间:2024/06/06 00:43

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配置参数解释请参考:

http://www.cnblogs.com/dkblog/archive/2012/03/13/2393321.html

0 0
原创粉丝点击