用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
但是目前为止,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
相关文章推荐
- 在sqlserver下增加MYSQL的链接服务器,实现分布式数据库开发第一步
- php与memcached服务器交互的分布式实现源码分析[memcache版]
- 用Redis实现分布式锁
- twisted实现的Redis服务器
- 用redis实现跨服务器存储session
- [原创]使用RMI编写客户端-服务器应用程序,实现分布式计算
- 在多台服务器上简单实现Redis的数据主从复制
- [转]php与memcached服务器交互的分布式实现源码分析[memcache版]
- php与memcached服务器交互的分布式实现源码分析[memcache版]
- 实现多台服务器上Redis的数据主从复制的功能
- php与memcached服务器交互的分布式实现源码分析 [memcache版]
- PHP与Memcached服务器交互的分布式实现源码分析
- php与memcached服务器交互的分布式实现源码分析[memcache版]
- PHP相关系列 - php与memcached服务器交互的分布式实现源码分析[memcache版]
- ASP.NET2.0下实现分布式StateServer(状态服务器)
- 分布式 COM - IDL 续以及分布式服务器的实现
- 在多台服务器上简单实现Redis的数据主从复制
- php与memcached服务器交互的分布式实现源码分析[memcache版]
- 让Redis使用TCMalloc,实现高性能NOSql服务器
- 利用redis分布式锁的功能来实现定时器的分布式