1. 程式人生 > >Redis資料分片處理(六)

Redis資料分片處理(六)

Redis分片處理(twemproxy代理機制)

代理元件:twemproxy
不管你現在的電腦效能有多好,只要你運行了Redis,那麼就有可能造成一種可怕的局面,你電腦的記憶體將立刻被佔滿。而且一臺Redis資料庫的效能終歸是有限制的,那麼現在如果要保證使用者的執行速度快,就需要使用叢集的設計。而對於叢集的設計,主要的問題就是解決單例項Redis的效能瓶頸。

  • twemproxy代理機制
    TwemProxy是一個專門為了nosql資料庫設計的一款代理工具軟體,這個工具軟體最大的特徵是可以實現資料的分片處理。
    所謂的分片就是根據一定的演算法將要儲存的資料儲存到不同的結點之中。
    有了分片之後資料的儲存節點就可能有無限多個,但是理論上如果真進行叢集的搭建,往往要求三臺結點起步。
    能參與分片這項作業的一定都是master,每一個master後面可以帶有無數的slave。分片只用關心多個master即可。
    在實際工作中,用的最多的分片演算法就是Hash分片。(根據一個數值求模)。

這裡寫圖片描述

TwemProxy:
也叫nutcraker,是一個twitter開源的一個redis和memcache快速/輕量級代理伺服器;TwemProxy是一個快速的單執行緒代理程式,支援Memcached ASCII協議和更新的Redis協議。
TwemProxy通過引入一個代理層,可以將其後端的多型Redis或Memcached例項進行統一管理和分配,使應用程式只需要在Twemproxy上進行操作,而不關心後面有多少個真實的Redis或Memcached儲存。

這裡寫圖片描述

這裡寫圖片描述

最主要功能:使用者不再直接操作真正的Redis,而且支援高效能的資料訪問。而且支援分片處理,可以操作Redis叢集。
這種將資料分攤到各個儲存結點的設計才能夠真正實現高併發的訪問機制。資料量再大也可以處理。

  • 配置Redis叢集
    本次預計使用三臺Redis伺服器,並且考慮到實際的應用環境,這三臺的Master分別有各自的兩個slave主機。於是現在給出本次使用的主機列表:
No 主機名稱 IP地址 描述
1 tw-redis-server-a 192.168.68.167 Redis(master)資料服務 埠6379、 Redis(slave)資料服務 埠6380 、Redis(slave)資料服務 埠6381
2 tw-redis-server-b 192.168.68.168 Redis(master)資料服務 埠6379、 Redis(slave)資料服務 埠6380 、Redis(slave)資料服務 埠6381
3 tw-redis-server-c 192.168.68.169 Redis(master)資料服務 埠6379、 Redis(slave)資料服務 埠6380 、Redis(slave)資料服務 埠6381

1.考慮到主機的通用性,所有的主機都建議修改主機名稱以及對應的hosts檔案
修改hostname:vim/etc/hostname; 修改完成之後重新啟動
修改hosts:vim/etc/hosts,做好ip地址與主機名稱的對映。
修改所有的tw-redis-server-*

2.本次的主機通過之前的配置得來裡面已經實現了基本的配置環境,但是依然需要由使用者自己來配置主從關係。
修改從節點配置:
vim /usr/local/redis/conf/redis-6380.conf、
vim /usr/local/redis/conf/redis-6381.conf
在這兩個配置檔案中修改 (以一臺主機為例)
slaveof 192.168.68.167 6379
masterauth wanghaoxin

3.tw-redis-server-* 主機全部配置
啟動所有的Redis資料庫的例項(每臺主機上有三個例項)
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6379.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf

此時就相當於有9臺redis資料庫,而後有三臺是Master結點,6臺為slave節點。

4.tw-redis-server-* 主機全部配置
任意一臺主機上檢視從節點狀態
/usr/local/redis/bin/redis-cli -h 192.168.68.167 -p 6379 -a wanghaoxin info replication
一臺主機的redis客戶端,只要你連線的ip,埠以及密碼正確,都可以連線到任意的主機上。
連線正常可以看到從節點

這裡寫圖片描述

完成了Redis的叢集配置,只是搭建了Redis服務。

  • 編譯與配置twemproxy
    現在關鍵的問題就在於如何進行Redis分片處理,而分片處理的工具就是twemproxy工具,但是此工具給出的是原始碼,所以使用之前一定要進行編譯處理。
    1.【tw-proxy-server-a】將twemproxy-0.4.1.tar.gz原始碼開發包上傳到linux系統之中,隨後將其解壓到原始碼(src)路徑下:
    tar xzvf /srv/ftp/tewmproxy-0.4.1.tar.gz -C /usr/local/src
    (有時候不需要用xzvf 用xvf即可)
    2.進入到原始碼所在的目錄:
    cd /usr/local/src//tewmproxy-0.4.1/
    不能簡單實用make make install來進行
    首先要使用autoreconf工具生成一些編譯的程式檔案
    autoreconf -fvi
    (缺少啥安裝啥)
    建立一個twemproxy編譯後的工作目錄
    mkdir -p /usr/local/twemproxy/
    進行編譯的目錄配置:
    ./configure –prefix=/usr/local/twemproxy
    編譯完成之後跑到/usr/local/twemproxy目錄之中
    進行原始碼的編譯安裝:make && make install

3.【tw-proxy-server-a】準備一個twemproxy配置檔案,這個配置檔案考慮到隨後與其他機制的整合,名稱一定要設定為:”redis_master.conf”
建立一個儲存配置檔案的目錄
mkdir -p /usr/local/twemproxy/conf
拷貝配置檔案
cp /usr/local/src/tewmproxy-0.4.1/conf/nutcracker.yml /usr/local/twemproxy/conf/redis_master.conf

4.【tw-proxy-server-a】編輯redis_master.conf配置檔案
100dd刪除游標下所有行
yy複製當前行 p貼上

redis_master:
listen: 0.0.0.0:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
redis_auth : wanghaoxin
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 192.168.68.167:6379:1
- 192.168.68.168:6379:1
- 192.168.68.169:6379:1
以上配置的”redis_master“的名稱與配置檔案是一樣的,而且必須一樣,同時在本檔案裡配置了redis訪問密碼以及twemproxy所有可能代理到的redis伺服器節點
5【tw-proxy-server-a】
/usr/local/tewmproxy/sbin/nutcracker -t /usr/local/twemproxy/conf/redis_master.cof
提示錯誤,但是此時的配置檔案完全正確
6.【tw-proxy-server-a】啟動twemproxy的服務
首先為了啟動方便,一定要設定一些資料儲存目錄
mkdir -p /usr/local/twemproxy/{pid,logs}
啟動:
/usr/local/twemproxy/sbin/nutcracker -c /usr/local/twemproxy/conf/redis_master.conf -p /usr/local/twemproxy/pid/redis_master.pid -o /usr/local/twemproxy/logs/redis_master.log -d

7.【tw-proxy-server-a】這個時候一旦啟動之後就表示該程序是一個redis的代理程序,所有的服務可以通過twemproxy訪問,而它的地址是22121.隨意找到一個redis客戶端即可。

代理地址:170
/usr/local/redis/bin/redis-cli -h 192.168.68.170 -p22121 -a wanghaoxin
現在連線的直接為代理伺服器,隨後找到各自的redis資料庫服務。
通過代理伺服器訪問redis。
設定資料是根據某種演算法分配到不同ip的redis主伺服器master下的。
說明資料做了分片處理,實現了redis分片處理操作