redis 集群搭建
redis集群搭建包含兩個主要步驟:一是搭建若干單節(jié)點redis服務(wù)器什猖,二是啟動集群控制進程。集群模式至少需要6個節(jié)點(3master尝抖、3slave)
單節(jié)點搭建
1滑肉、下載安裝包并解壓:tar -zxvf /redis-3.2.1.tar.gz
2栏尚、編譯安裝:make && make install
- 配置
redis.conf
daemonize yes
pidfile /var/run/redis_7001.pid
logfile "/home/appadmin/redis/dev/7001.log"
port 7001
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 5000
appendonly yes
- 啟動
最好每個實例建立獨立的文件夾,用來保存數(shù)據(jù)球昨、配置隙轻、集群管理等信息
redis-server redis.conf
集群搭建
redis有多種集群方案,這里只關(guān)注官方redis cluster集群方案瞳购,不考慮其它如sentinel话侄、codis等第三方集群方案。
安裝
1、安裝ruby和ruby-gem年堆,高版本ruby自帶gem
- yum 安裝:yum install ruby
- 下載二進制包安裝吞杭,類似redis
2、安裝ruby的redis接口 - 下載離線包:redis-3.3.0.gem
- 離線安裝:gem install --local /home/appadmin/redis-3.3.0.gem
啟動
./redis-trib.rb create --replicas 1 168.61.9.154:6001 168.61.9.154:6002 168.61.9.154:6003 168.61.9.154:6004 168.61.9.154:6005 168.61.9.154:6006
一個基于docker 的集群搭建實例
redis節(jié)點部署
- 拉取官方鏡像包
- 提供獨立配置文件 redis.conf
daemonize yes
pidfile /var/run/redis_7001.pid
logfile "/home/appadmin/redis/dev/7001.log"
port 7001
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 5000
appendonly yes
根據(jù)實踐变丧,daemonize 應(yīng)設(shè)置為no芽狗,否則無法容器啟動,具體見:
https://segmentfault.com/q/1010000008272753
- 啟動
docker run -p 6003:6379 -v /home/appadmin/redis/test:/data -d redis:3.2 redis-server --appendonly yes --cluster-enabled yes
可以加載外置文件痒蓬,如下:
docker run -p 6001:6001 --net=host -v /home/appadmin/redis/test/6001:/data -d redis:3.2 redis-server /data/redis.conf
以上為針對集群的配置方式童擎,docker采用host網(wǎng)絡(luò)方式,端口不能重復(fù)
集群搭建
前提:已安裝docker并下載redis官方鏡像
1攻晒、redis.conf
logfile "/data/redis.log"
port 6379
cluster-enabled yes
cluster-config-file /data/nodes.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no
2顾复、多節(jié)點啟動腳本:run.sh
#!/bin/bash
#清理
docker ps -a | grep "redis" | awk '{print $1 }'|xargs docker stop
rm -rf 600*
#創(chuàng)建目錄
mkdir 6001
mkdir 6002
mkdir 6003
mkdir 6004
mkdir 6005
mkdir 6006
#配置文件
cp redis.conf 6001/
cp redis.conf 6002/
cp redis.conf 6003/
cp redis.conf 6004/
cp redis.conf 6005/
cp redis.conf 6006/
sed -i "s/6379/6001/g" 6001/redis.conf
sed -i "s/6379/6002/g" 6002/redis.conf
sed -i "s/6379/6003/g" 6003/redis.conf
sed -i "s/6379/6004/g" 6004/redis.conf
sed -i "s/6379/6005/g" 6005/redis.conf
sed -i "s/6379/6006/g" 6006/redis.conf
#啟動
docker run -p 6001:6001 --net=host -v /home/appadmin/redis/test/6001:/data -d redis:3.2 redis-server /data/redis.conf
docker run -p 6002:6002 --net=host -v /home/appadmin/redis/test/6002:/data -d redis:3.2 redis-server /data/redis.conf
docker run -p 6003:6003 --net=host -v /home/appadmin/redis/test/6003:/data -d redis:3.2 redis-server /data/redis.conf
docker run -p 6004:6004 --net=host -v /home/appadmin/redis/test/6004:/data -d redis:3.2 redis-server /data/redis.conf
docker run -p 6005:6005 --net=host -v /home/appadmin/redis/test/6005:/data -d redis:3.2 redis-server /data/redis.conf
docker run -p 6006:6006 --net=host -v /home/appadmin/redis/test/6006:/data -d redis:3.2 redis-server /data/redis.conf
3、啟動集群
./redis-trib.rb create --replicas 1 168.61.9.154:6001 168.61.9.154:6002 168.61.9.154:6003 168.61.9.154:6004 168.61.9.154:6005 168.61.9.154:6006
客戶端
1鲁捏、客戶端管理軟件
2芯砸、redis-cli -c -p 7000
3、jedis
參考
redis集群搭建: http://www.cnblogs.com/yuanermen/p/5717885.html
基于docker搭建redis集群(有問題给梅,直接用host模式):http://www.cnblogs.com/wozijisun/p/6043511.html
集群管理:http://blog.csdn.net/cuiy6642/article/details/50924722
redis集群教程:http://www.cnblogs.com/li-peng/p/6143709.html
注意點:
- 集群模式啟動需要對redis配置進行調(diào)整:
允許外部主機訪問:protected-mode no
#bind 127.0.0.1 - 集群啟動失敗會導(dǎo)致數(shù)據(jù)殘留假丧,需要手動清理
- 配置完所有主節(jié)點后,報" ERR Invalid node address specified"
由于Redis-trib.rb 對域名或主機名支持不好,故在創(chuàng)建集群的時候要使用ip:port的方式
redis-trib.rb create ip1:port1 ip2:port2 ip3:port3 - 創(chuàng)建集群時報某個err slot 0 is already busy (redis::commanderror)
這是由于之間創(chuàng)建集群沒有成功,需要將nodes.conf和dir里面的文件全部刪除(注意不要刪除了redis.conf) - 創(chuàng)建集群時一直處于"Waiting for the cluster to join...................................."的狀態(tài)
這個問題原因不知,但解決方法是在redis.conf文件中把bind 127.0.0.1本地環(huán)回口改為物理接口. - 安裝ruby redis時長時間沒響應(yīng)
這是由于天朝網(wǎng)絡(luò),解決辦法是改ruby源(請自行baidu)或手動安裝