Redis的安裝,主從複製,集羣搭建

一:Redis安裝:
    下載地址:http://redis.io/download
    
    1:首先安裝redis需要先安裝gcc,把下載好的redis-3.0.0-rc2.tar.gz放到linux /usr/local文件夾下;
        gcc安裝:
            (1):下載gcc安裝包,這種需要各種編譯,非常麻煩;
            (2):使用yum安裝:乾脆兩個都裝了
                yum -y install gcc  
                yum -y install gcc-c++
    
    2:進行解壓,tar -zxvf redis-3.0.0.rc2.gz,並將文件名改名爲 redis-3.0.0(方便記憶)
        mv redis-3.0.0.rc2 /usr/local/redis.3.0.0
    
    3:進入到redis-3.0.0目錄下,進行編譯 make    
    
    4:進入到src下進行安裝,make install 驗證(||查看src下的目錄,有redis-server,redis-cli即可)
            
        mkdir -p /usr/local/redis/ect
        
        mkdir -p /usr/local/redis/bin
        
    6:把redis-3.0.0下的redis.conf移動到 /usr/local/redis/ect下
        cp redis.conf /usr/local/redis/etc
    
    7:把redis-3.0.0/src下的mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-dump,redis-cli,
        redis-server 文件移動到bin目錄下:命令:
        mv mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-dump,redis-cli,
        redis-server /usr/local/redis/bin
    
    8:啓動並指定配置文件: ./redis-server /usr/local/redis/ect/redis.conf(注意要使用後臺啓動,所以修改redis.conf
        裏面的9 daemonize 改爲yes)
        dir /usr/local/redis/etc   配置數據文件的位置

        
    10:驗證是否啓動成功:
        ps -ef | grep redis查看是否有redis服務 或者 查看端口:netstat -tunpl | grep 6379
        進入redis客戶端: /usr/local/redis/bin/redis-cli 退出 客戶端 quit(此時沒有退出redis服務)
        退出redis服務:(1):pkill redis-server, 
                        (2):kill進程號
                        (3):/usr/local/redis/bin/redis-cli shutdown

    

二:Redis一共分爲5中基本類型數據:String, Hash, List, Set, ZSet        

        
        
三:Redis高級命令:
    返回滿足所有的鍵 keys* (可以模糊匹配)
    exists 是否存在指定的key;
    
    expire 設置某個key的過期時間,使用ttl查看剩餘時間;
        expire name 10 (name的過期時間10秒)
        
    persist key 取消過期時間
        persist name 
    
    select 選擇數據庫,數據庫爲0到15,(一共16個數據庫),默認進入的是0數據庫
        
    
    move[數據庫下標]將當前數據庫中的key移動到其他數據庫中
        move name 1;(注意:移動了當前數據庫中的數據就沒有了)
    
    randomkey 隨機返回數據庫中的一個key
        
    
    rename 重命名key;
        rename name fname;
        
    echo 打印命令
    
    dbsize 查看數據庫key的數據;
    
    info 獲取數據庫信息
    
    config get 實時傳儲收到的請求(返回相關的配置信息)
        config get * (返回所有配置)
        
    flushdb 清空當前數據庫,flushall 清空所有數據庫
    
    
四:Redis的安全性:
    因爲redis速度相當快,所以在一臺比較好的服務器下,一個外部用戶在一秒內可以進行15W次的密碼嘗試,這意味着你
    需要設置非常強大的密碼來防止暴力破解;
    
    vim編輯redis.conf 文件,找到下面進行保存修改
        #requirepass foobared
        requirepass ****(*爲密碼,密碼可以隨意設置,比如就設置爲redis)
    重啓服務器pkill redis-server
        再次進入:keys*
        (error) NOAUTH Authentication required.
        會發現沒有權限查詢,127.0.0.1:6379> auth redis
        OK 輸入密碼則進入成功
    每次進入都要輸入密碼,還有種簡單的方式:
        還有種簡單的方式是直接登錄授權:/usr/local/redis/bin/redis-cli -a [密碼];
        /usr/local/redis/bin/redis-cli -a redis;
    
    
    
五:Redis主從複製:
    1:Master可以擁有多個slave
    2: 多個slave可以連接到同一個master外,還可以連接到其他的slave
    3:主從複製不會阻塞master,在同步數據時,master可以繼續處理client請求,
    4:提供系統的伸縮性;
    
 主從複製的過程
    1:slave與master建立連接,發送sync同步命令
    2:master會開啓一個後臺進程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存,
    3:後臺完成保存後,就將文件發送給slave;
    4:slave將此文件保存到硬盤上;
    
 主從複製配置:
    clone服務期之後slave的IP地址
    修改配置文件:/usr/local/redis/etc/redis.conf
    第一步:slaveof <materip> <materport>
    第二步:masterauth <master-password> (如果主服務器沒有設置密碼,則第二步可以直接省略);
    
    使用info查看role角色即可知道是主服務器和從服務器
 
    從服務器只支持讀,不支持寫;主服務可讀可寫
    
    

六:Redis事務:
    redis的事務非常簡單,使用方式如下:
    首先是使用 multi 打開事務,然後進行設置,這時設置的數據,都會放入隊列裏進行保存,
    最後使用 exec 執行,
    把數據依次存儲到redis中,使用 discard 方法取消事務(回滾)
    
Redis持久化機制:
    redis是一個支持持久化的內存操作,也就說redis需要經常將內存中的數據同步到硬盤保證持久化;
    redis持久化的兩種方式:
    
(1):snapshotting(快照)默認方式,將內存中以快照的方式寫入到二進制文件中,默認爲dump.rdb,
       可以通過配置自動做持久化的方式,我們可以配置redis在n秒內如果超過m個key,則修改就自動做快照。
       snapshotting設置
            save 900 1   #900秒內如果超過1個key被修改,則發起快照保存
            save 300 10  #300秒內如果超過10個key被修改,則發起快照保存
            save 60 10000
            
(2):append-only file(縮寫aof)的方式,(有點類似oracle日誌)由於快照方式是在一定時間間隔做一次,所以可能
        可能發生redis意外down的情況就會丟失最後一次快照後的所有修改的數據,aof比快照方式有更好的持久化性,
        是由於在使用aof時,redis會將收到的每一個寫命令通過write函數追加到命令中,當redis重新啓動時會重新
        執行文件中保存的寫命令來在內存中重新建立這個數據庫的內容,這個文件在bin目錄下,appendonly.aof,不是
        寫到硬盤上,可以通過修改配置文件強制寫到硬盤中。
        
        aof設置:
            appendonly yes //啓動aof持久化方式有三種修改方式:
            #appendfsync always //收到寫命令就立即寫到磁盤,效率最慢,但是保證完全的持久化
            #appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面做了很好的折中
            #appendfsync no      //完全依賴os,性能最好,持久化完全沒保證
                
            一般用第一種 appendfsync always
    
    
    
七:Redis發佈與訂閱功能:
    redis提供了簡單的發佈與訂閱功能。
    使用 subscribe [頻道]進行訂閱監聽
    使用 publish [頻道][發佈內容]進行發佈消息廣播
    
    

八:Redis使用java API:
    導入jedis.jar包,
    Jedis j = new Jedis("111.230.141.143", 6379);即可創建redis對象
    redis對象的方法與linux中redis的使用一樣。該怎麼就怎麼用,比如設置一個key爲name,value爲fanfan
        可以這樣寫:
        j.set("name","fanfan");
        j.get("name");
    

九:”Redis集羣搭建
    在redis3.0以前,提供了Sentinel工具來監控各Master的狀態,如果Master異常則會做主從切換,將slave作爲master
    將master作爲slave,其配置也是稍微的複雜,並且各方面的表現一般,現在redis3.0已經支持集羣的容錯功能,
    並且非常簡單。
    
  集羣搭建:至少3個master
  第一步:創建一個文件夾,redis-cluster,然後在其下面分別創建6個文件夾如下:
    (1):mkdir -p /usr/local/redis-cluster
    (2):mkdir 7001, mkdir 7002, mkdir 7003, mkdir 7004, mkdir 7005, mkdir 7006    
    
  第二步:把之前redis.conf配置文件copy到700*下,進行修改各個文件內容;
    (1):darmonize yes
    (2):port 700* (分別對每個機器的端口號進行設置)
    (3):bind 192.168.1.171(必須綁定當前機器IP,不然會無限悲劇下去)
    (4):dir /usr/local/redis-cluster/700* (指定數據文件存放位置,必須要指定不同的目錄位置,不然後丟失數據)    
    (5):cluster-enalbed yes(啓動集羣模式,開始玩耍)
    (6):cluster-config-file nodes700*.conf(這裏的700x最好和port對應上)
    (7):cluster-node-timeout 5000
    (8):appendonly yes (開啓aof模式) 
    
  第三步:把修改後的配置文件,分別copy到各個文件夾下,注意每個文件需要修改端口號,並且nodes文件也要不相同!
  第四步:由於redis集羣需要使用ruby名命令,所以我們需要安裝ruby,
    (1):yum install ruby 
    (2):yum install rubygems
    (3):gem install redis (安裝redis和ruby的接口)
    如果報錯:“redis requires Ruby version >= 2.2.2”,則進行下面操作
        方法一:換yum源安裝

    ~]# yum install centos-release-scl-rh    //會在/etc/yum.repos.d/目錄下多出一個CentOS-SCLo-scl-rh.repo源

    ~]# yum install rh-ruby23  -y    //直接yum安裝即可  

    ~]# scl  enable  rh-ruby23 bash    //必要一步

    ~]# ruby -v    //查看安裝版本
    參考:https://www.cnblogs.com/ding2016/p/7903147.html
    
  第五步:分別啓動6個redis實例,然後檢查是否啓動成功
    (1):/usr/local/redis/bin/redis-server /usr/local/redis-cluster/700*/redis.conf
    (2):ps -ef | grep redis (查看是否啓動成功)
  第六步:首先到redis3.0的安裝目錄下,然後執行rdis-trib.rb命令
    (1):cd /usr/local/redis3.0.0/src
    (2):./redis-trib.rb create --replicas 1 192.168.218.130:7001 192.168.218.130:7002 192.168.218.130:7003
            192.168.218.130:7004 192.168.218.130:7005 192.168.218.130:7006
 第七步:到此爲止,我們集羣搭建成功,進行驗證:
    (1):連接到任意一個客戶端:  ./redis-cli -c -h -p (-c表示集羣模式,指定ip地址和端口)
            如:/usr/local/redis/bin/redis-cli -c -h 192.168.218.130  -p 700*
    (2):進行驗證:cluster info(查看集羣信息),cluster nodes(查看集羣列表)
    (3):進行數據操作驗證
    (4):關閉集羣則需要逐個進行關閉,使用命令:
        /usr/local/redis/bin/redis-cli -c -h 111.230.141.142 -p 700* shutdown
        
  第八步:(補充)
    友情提示:當集羣出現無法啓動時,刪除臨時的數據文件,再次重新啓動每一個redis服務,然後重新構造集羣環境
    redis-trib.rb官方羣操作命令,http://redis.io/topics/cluster-tutorial
    推薦博客:http://blog.51yip.com/nosql/1726.html/comment-page-1

    
    
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章