標籤:redis cache web
redis叢集簡介:
Redis叢集是一個實現分布式並且允許單點故障的Redis進階版本。
Redis叢集沒有最重要或者說中心節點,這個版本最主要的一個目標是設計一個線性可伸縮(可隨意增刪節點?)的功能。
Redis叢集為了資料的一致性可能犧牲部分允許單點故障的功能,所以當網路故障和節點發生故障時這個系統會儘力去保證資料的一致性和有效性。(這裡我們認為節點故障是網路故障的一種特殊情況)
為瞭解決單點故障的問題,我們同時需要masters 和 slaves。 即使主節點(master)和從節點(slave)在功能上是一致的,甚至說他們部署在同一台伺服器上,從節點也僅用以替代故障的主節點。 實際上應該說 如果對從節點沒有read-after-write(寫並立即讀取資料 以免在資料同步過程中無法擷取資料)的需求,那麼從節點僅接受唯讀操作。
twemproxy簡介:
twemproxy,也叫nutcraker。是一個twtter開源的一個redis和memcacheProxy 伺服器。 redis作為一個高效的快取服務器,非常具有應用價值。但是當使用比較多的時候,就希望可以通過某種方式 統一進行管理。避免每個應用每個用戶端管理串連的鬆散性。同時在一定程度上變得可以控制。 搜尋了不少的開源代理項目,知乎實現的python分區用戶端。node的代理中介層,還有各種restfull的開源代理。
伺服器系統:CentOS 6.5 x86_64
伺服器架構:
10.57.1.127 twemproxy master,redis master10.57.1.197 twemproxy slave,redis slave10.57.1.111 keepalived
服務版本:
redis: 2.4.10keepalived: 1.2.8autoconf: 2.69twemproxy: 0.4.0
一、redis
1、在redis master和redis slave主機上安裝redis
先安裝epel源
yum -y localinstall http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmyum -y install redis
redis master上修改/etc/redis.conf以下內容:
port 6379bind 0.0.0.0
redis slave上修改/etc/redis.conf以下內容:
port 6379bind 0.0.0.0slaveof 10.57.1.127 6379
2、啟動redis服務
/etc/init.d/redis restart
3、驗證redis服務
登入到redis master伺服器,執行
redis-cli -h 10.57.1.127 -p 6379 info|grep role
如果顯示
role:master
登入到redis slave伺服器,執行
redis-cli -h 10.57.1.197 -p 6379 info|grep role
如果顯示
role:slave
說明redis的master/slave已經完成配置
二、twemproxy
1、在redis master和redis slave主機上安裝twemproxy
首先去下載最新的twemproxy,在github上面找到最新版本
git clone https://github.com/twitter/twemproxy.git cd twemproxy/CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --prefix=/usr/local/twemproxy --enable-debug=log make make install/usr/local/twemproxy/bin/nutcracker -t nutcracker: configuration file ‘conf/nutcracker.yml‘ syntax is okcp conf/nutcracker.yml /usr/local/twemproxy
2、配置twemproxy master
vim /usr/local/twemproxy/nutcracker.ymlredis1: listen: 0.0.0.0:22122 hash: fnv1a_64 hash_tag: "{}" distribution: ketama auto_eject_hosts: true timeout: 400 redis: true servers: - 10.57.1.127:6379:1 server1 # redis執行個體的ip,連接埠,權重 - 10.57.1.197:6379:1 server2
3、配置twemproxy slave
vim /usr/local/twemproxy/nutcracker.ymlredis2: listen: 0.0.0.0:22122 hash: fnv1a_64 hash_tag: "{}" distribution: ketama auto_eject_hosts: true timeout: 400 redis: true servers: - 10.57.1.127:6379:1 server1 # redis執行個體的ip,連接埠,權重 - 10.57.1.197:6379:1 server2
4、使用twemproxy啟動指令碼啟動twemproxy master、twemproxy slave
vim /etc/init.d/redis-twemproxy#!/bin/bashsource /etc/profile;function Stop(){/usr/bin/pkill nutcracker}function Start(){/usr/local/twemproxy/sbin/nutcracker -d -c /usr/local/twemproxy/nutcracker.yml}case $1 in stop) Stop ;; start) Start ;; *) echo "Usage: `basename $0` {stop|start}" ;;esac
5、redis測試服務
執行
redis-cli -h 10.57.1.127 -p 22122redis-cli -h 10.57.1.197 -p 22122
如果沒有報錯,說明成功!
三、keepalived
1、在keepalived主機上安裝keepalived和ipvsadm
yum -y install keepalived ipvsadm
2、配置keepalived
vim /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtp.yeah.net smtp_connect_timeout 30 router_id redis_twemproxy}vrrp_instance VIP_1 { interface eth0 state MASTER virtual_router_id 55 priority 100 virtual_ipaddress { 10.57.1.101 }}virtual_server 10.57.1.101 6379 { delay_loop 3 lb_algo wrr lb_kind DR protocol TCP sorry_server 127.0.0.1 22122 real_server 10.57.1.127 22122 { TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 10.57.1.197 22122 { TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }}
3、啟動keepalived
/etc/init.d/keepalived start
4、驗證keepalived
ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.57.1.101:6379 wrr -> 10.57.1.127:22122 Route 1 0 0 -> 10.57.1.197:22122 Route 1 0 0
說明keepalived配置成功
5、測試一下10.57.1.101的6379連接埠是否暢通
nc -nvz -w 5 10.57.1.101 6379Connection to 10.57.1.101 6379 port [tcp/*] succeeded!
顯示succeeded表明已成功
redis叢集已經配置成功。
本文出自 “往事隨風” 部落格,謝絕轉載!
redis+twemproxy+keepalive叢集搭建