Centos下用twemproxy搭建ssdb偽叢集樣本

來源:互聯網
上載者:User

  • 前言
    依稀記得大二下的那個暑假參加的第二場面試,面的是唯品會一個和學校合作的到貴司進行為期兩周學習的一個項目,面我的是PHP班的leader(X.C)(當時分3個方向,PHP,IOS,Android),面試過程中我表現一般,其中就記得問到我對Memcache,Redis緩衝的掌握程度,在此之前只是聽說過大概瞭解它們的意思,但沒有去學習實踐過,面完後我回去就把沒答上來的問題一一記下來,後面還是通過我大膽的爭取得到了進入這個項目的機會,在此表示對leader、對dogstar師兄、對Laura姐、對貴司的感謝!(當然也感謝遇到的各位小夥伴啦~)是你們給予了我機會,希望貴司也越來越好!好吧好像扯的有點遠了,想說的就是緩衝在公司或者稍微大一點的應用裡面特別是Web應用其實應用很廣泛,所以對它的掌握與使用也顯得比較重要,加上我現在實習的項目組裡我負責了兩個叢集主要的維護,其中一個就是SSDB分布式叢集,所以今天就簡單學習一個SSDB叢集的搭建與在PHP中的使用。
  • 搭建SSDB
    到SSDB官網下載SSDB,然後解壓、編譯、安裝
    # wget https://github.com/ideawu/ssdb/archive/master.zip
    # unzip master.zip
    # cd ssdb-master
    # make
    # sudo make install [PREFIX=/home/users/denglitong/local/ssdb],這裡不知道PREFIX參數的話預設安裝在/usr/local目錄下,這裡我安裝在/home/users/denglitong/local/ssdb目錄下
    這裡我安裝沒有遇到什麼錯誤,所以直接去啟動ssdb服務,去到ssdb目錄cd /home/users/denglitong/local/ssdb:

    開啟ssdb.conf進行需要的修改,比如監聽的連接埠、記錄模式等:

    啟動ssdb:在ssdb安裝目錄下執行# ./ssdb-server -d -c ssdb.conf,
    查看ssdb進程:ps -ef|grep ssdb-server,

    我本機搭了兩個ssdb所以會有兩個進程,搭第二個ssdb的時候直接把第一個複製一份修改ssdb.conf,啟動即可。
    ssdb安裝目錄下的ssdb-cli是用來串連ssdb服務的,執行./ssdb-cli [-h 127.0.0.1] -p 8600即可串連上ssdb節點進行set,get測試啦,如果是原生話-h 127.0.0.1指定伺服器位址可預設。

    好啦,至此多個節點的SSDB就搭建好了,下一步就是搭建TwenproxyProxy 伺服器啦
    1. 搭建Twemproxy
      Twemproxy原本是和Redis搭配使用的,但是SSDB的效能比Redis要好,SSDB後面是會用來替代Redis的,而SSDB的較新版本已經支援Redis協議,所以Twemproxy可以代理Redis/SSDB混搭的情況,這裡我們就用Twemproxy代理多個SSDB節點。
      下載twemproxy: # git clone https://github.com/twitter/twemproxy(沒裝git的先裝git)
      # cd twemproxy
      # autoreconf -fvi,這裡我的centos6.5提示autoconf-2.63版本需要升級到autoconf-2.64版本:
      首先查看目前的版本:# rpm -qf /usr/bin/autoconf
      卸載目前的版本: # rpm -e --nodeps autoconf-2.63
      下載新版本: # wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.64.tar.gz
      解壓安裝: # tar zxvf autoconf-2.64.tar.gz
      cd autoconf-2.64
      ./configure --prefix=/usr
      (這裡也可以安裝到其他目錄,但記得要把安裝後的bin目錄下的執行檔案建立軟串連到/usr/bin下)
      make && make install
      查看是否安裝成功:# /usr/bin/autoconf -V
      # 編譯安裝:make && make install [PREFIX=/home/users/denglitong/local/twemproxy],不加PREFIX參數的話預設安裝到/usr/local/share/sbin目錄下,設定檔則在/etc/nutcracker下,我這裡是安裝到指定目錄,所以還需要在安裝目錄下建立conf目錄並把源碼包中的conf/nutcracker.yml拷貝過去,

      這裡開啟conf/nutcracker.yml修改,將servers列表修改為本地搭建好的SSDB節點:

      啟動twemproxy: # ./sbin/nutcracker -d -c ./conf/nutcracker.yml
      這裡的-d表示以後台進程的方式運行,-c表示指定設定檔,你還可以用-t參數後面跟著設定檔來測試文法是否正確
      好啦到此nutcracker就搭建完畢了,接下來我們要測試它是否能work,這裡需要注意的是,ssdb-cli去串連ssdb節點的時候,用的是ssdb協議,twemproxy去和ssdb串連的時候用的是redis協議,因為SSDB已經相容了redis協議,但twemproxy沒有相容ssdb協議,所以用上面的ssdb-cli去串連twemproxy監聽的連接埠是串連不上的,這裡我們還需要安裝Redis,然後用redis-cli去串連twemproxy,方便校正搭建的結果,當然你也可以只裝phpredis模組來串連twemproxy進行互動校正,不過推薦還是安裝一個本地Redis。
    2. 安裝Redis
      下載Redis包,解壓後進入目錄,執行make,執行完之後在根目錄下產生redis-server服務端開機檔案、在src目錄下回產生redis-cli串連用戶端檔案,而我們要的就是這redis-cli,並不需要啟動一個redis儲存節點,然後我們建立一個軟串連到/usr/bin方便串連:sudo ln -s /home/users/denglitong/local/redis-3.2.3/src/redis-cli /usr/bin/redis-cli,接下來就可以去串連twemproxy進行檢驗啦:

      這裡是用phpredis擴充用php串連了redis進行了set/get的測試,代替手動測試,後面會講到phpredis擴充,

      可以看到twemproxy代理可以將多個ssdb節點統一起來對外提供一個ip/port進行服務,這裡測試數量比較小,我手動set了幾十個值的時候是會較平均的落到兩個ssdb節點中的。
    3. 搭建phpredis
      redis-cli是linux下的串連redis的用戶端,twemproxy本身就是支援redis協議的,所以可以用來串連twemproxy,但是我們還需要在php中串連redis,所以就需要給php安裝串連redis的用戶端,這就是phpredis擴充。
      安裝phpredis擴充:
      $ wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
      $ cd phpredis-2.2.4 # 進入 phpredis 目錄
      $ /usr/local/php/bin/phpize # php安裝後的路徑
      $ ./configure --with-php-config=/home/users/denglitong/local/php-5.6.24/bin/php-config
      $ make && make install
      這裡指定的with-php-config就是指定要安裝的redis擴充是安裝到哪個php目錄的,編譯安裝完後會在php安裝目錄的extension目錄下產生一個擴充的目錄,裡面就有redis.so擴充,然後去修改php.ini檔案:

      然後重啟php-fpm進程,查看phpinfo頁看redis擴充有沒有編譯進來:

      這樣就是OK的,然後像這樣在php中使用redis類就可以串連redis了(twemproxy):
    4. 好啦,到這裡twemproxy和ssdb多節點的一個偽叢集就搭建完畢了,為什麼說是偽叢集呢,因為它只是能夠把set值使用一致性雜湊set到各個節點裡,叢集的一些進階特性如負載平衡、資料如何遷移何時遷移這些都沒有實現,而且也沒有分布式都是在本地搭建的,所以說它是個偽叢集。其實這種代理+服務節點的方式中twemproxy代理容易成為效能瓶頸,不過SSDB單機也可以扛TB級的資料量,當然SSDB官方的分布式叢集的一個代理也在開發中,到那個時候也許我們離真正的SSDB叢集就不遠了。
    5. 後續
      這篇文章本來是想昨晚寫完的,寫了一半但是11點多的時候公司那邊有點事需要處理,處理完了就00:30了,所以昨晚就沒寫完,今天起的還算不晚所以就寫了這些碼到這啦!然後我的早飯煮好了,吃早飯去啦!
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.