1. 程式人生 > >Redis的安裝及創建節點、部署群集

Redis的安裝及創建節點、部署群集

讀取 fff 補充 ring log cto all mkdir 目錄

Redis簡介

  • Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。
  • Redis有著更為復雜的數據結構並且提供對他們的原子性操作,這是一個不同於其他數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。
  • Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,應為數據量不能大於硬件內存。在內存數據庫方面的另一個優點是, 相比在磁盤上相同的復雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部復雜性很強的事情。 同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。

Redis定義

  • redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
  • Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
  • Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。
  • Redis存儲

redis使用了兩種文件格式:全量數據和增量請求。

  • 全量數據格式是把內存中的數據寫入磁盤,便於下次讀取文件進行加載;
  • 增量請求文件則是把內存中的數據序列化為操作請求,用於讀取文件進行replay得到數據,序列化的操作包括SET、RPUSH、SADD、ZADD。
  • Redis群集
  • Redis 是一個開源的 key-value 存儲系統,由於出眾的性能,大部分互聯網企業都用來做服務器端緩存。Redis 在3.0版本前只支持單實例模式,雖然支持主從模式、哨兵模式部署來解決單點故障,但是現在互聯網企業動輒大幾百G的數據,可完全是沒法滿足業務的需求,所以,Redis 在 3.0 版本以後就推出了集群模式。

  • Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 個 slot,每個 Redis 實例負責其中一部分 slot 。集群中的所有信息(節點、端口、slot等),都通過節點之間定期的數據交換而更新。
  • Redis 客戶端可以在任意一個 Redis 實例發出請求,如果所需數據不在該實例中,通過重定向命令引導客戶端訪問所需的實例。
  • 下面說一下 Redis 集群搭建規劃,由於集群至少需要6個節點(3主3從模式), 我本地也起不了那麽多虛擬機 , 計劃是在一臺機器上模擬一個集群, 這和生產環境的集群搭建沒本質區別。

  • Redis安裝

    # wget http://download.redis.io/releases/redis-3.0.7.tar.gz
    # tar xzvf redis-3.0.7.tar.gz 
    # ln -s redis-3.0.7 redis
    # cd redis
    # make && make install
    
    # redis-server &   //啟動服務 &=後臺運行
    # redis-cli shutdown   停止服務
  • 創建多節點
  • 創建實例目錄

    # mkdir /usr/local/redis-cluster
    # cd redis-cluster/
    # mkdir -p 6379/data 6380/data 6381/data 6382/data 6383/data 6384/data
  • 復制執行腳本

    # mkdir /usr/local/redis-cluster/bin
    # cd /usr/local/redis/src
    # cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin
  • 復制一個新 Redis 實例

    # cp /usr/local/redis/* /usr/local/redis-cluster/6379
    # vim /usr/local/redis-cluster/6379/redis.conf
        port 6379(每個節點的端口號)
        daemonize yes
        bind 192.168.86.130(綁定當前機器 IP)
        dir /usr/local/redis-cluster/6379/data/(數據文件存放位置)
        pidfile /var/run/redis_6379.pid(pid 6379和port要對應)
        cluster-enabled yes(啟動集群模式)
        cluster-config-file nodes6379.conf(6379和port要對應)
        cluster-node-timeout 15000
        appendonly yes
  • \cp -rf 命令是不使用別名來復制

    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6380
    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6381
    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6382
    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6383
    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6384
  • 分別修改6380 、6381、6382、6383、6384節點配置文件

    vim redis.conf
    :%s/6379/6380/g       //文本內使用全局替換
  • 開啟所有節點服務(&是後臺運行)

    # /usr/local/bin/redis-server /usr/local/redis-cluster/6379/redis.conf&
    # /usr/local/bin/redis-server /usr/local/redis-cluster/6380/redis.conf&
    # /usr/local/bin/redis-server /usr/local/redis-cluster/6381/redis.conf&
    # /usr/local/bin/redis-server /usr/local/redis-cluster/6382/redis.conf&
    # /usr/local/bin/redis-server /usr/local/redis-cluster/6383/redis.conf&
    # /usr/local/bin/redis-server /usr/local/redis-cluster/6384/redis.conf&
  • 登錄隨便一個節點驗證 確認節點服務可以正常登陸

    # /usr/local/redis-cluster/bin/redis-cli -h 192.168.86.130 -p 6379

    技術分享圖片

  • 安裝群集需要的 ruby環境
  • 由於 Redis 集群需要使用 ruby 命令,所以我們需要安裝 ruby 和相關接口。

    # wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
    # tar xvf ruby-2.3.1.tar.gz
    # cd ruby
    # ./configure -prefix=/usr/local/ruby
    # make && make install
    # cd /usr/local/ruby
    # cp bin/ruby /usr/local/ruby
    # cp bin/gem /usr/local/bin
  • 安裝rubygem redis依賴:

    # wget http://rubygems.org/downloads/redis-3.3.0.gem
    # gem install -l redis-3.3.0.gem
    # gem list --check redis gem

技術分享圖片

  • 安裝 redis-trib.rb:

    # cp /usr/local/redis/src/redis-trib.rb /usr/local/bin
  • 安裝完成ruby環境 執行下面命令確認是否正常

    # redis-trib.rb

    技術分享圖片

  • 創建群集
  • 簡單解釋一下這個命令:調用 ruby 命令來進行創建集群,--replicas 1 表示主從復制比例為 1:1,即一個主節點對應一個從節點;然後,默認給我們分配好了每個主節點和對應從節點服務,以及 solt 的大小,因為在 Redis 集群中有且僅有 16383 個 solt ,默認情況會給我們平均分配,當然你可以指定,後續的增減節點也可以重新分配。

    # /usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.86.130:6379 192.168.86.130:6380 192.168.86.130:6381 192.168.86.130:6382 192.168.86.130:6383 192.168.86.130:6384
    (yes)

    技術分享圖片

    ?
    ?
    ?

  • 驗證
  • 通過客戶端命令連接上,通過集群命令看一下狀態和節點信息等。

        # /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.86.130 -p 6379   //登錄
            192.168.86.130:6379> cluster info            //查看狀態
            192.168.86.130:6379> cluster nodes      //查看節點信息

技術分享圖片

Redis的安裝及創建節點、部署群集