1. 程式人生 > >redis單機版,哨兵,叢集的一些總結

redis單機版,哨兵,叢集的一些總結

首先需要了解的是Redisc語言開發的。安裝redis需要c語言的編譯環境。如果沒有gcc需要線上安裝。yum install gcc-c++一、單機版 1.下載redis的linux版本檔案並上傳伺服器並且解壓這裡我上傳到了伺服器/data/file/目錄下的位置解壓命令是:tar -zxvf redis-3.0.0.tar.gz2.進入redis-3.0.0的目錄進行編譯 cd redis-3.0.0 make3.進行安裝可以指定安裝路徑 make install PREFIX=/usr/local/redis我這裡安裝到/usr/local/redis 的路徑下了可以進入該路徑下檢視,會發現有一個bin的資料夾(該資料夾的名稱可以重新命名),進入該資料夾我們可以看到(這裡的redis.conf是從/data/file/redis-3.0.0中複製過來的)
這裡重點是redis.conf檔案的配置類容1. Redis預設不是以守護程序的方式執行,可以通過該配置項修改,使用yes啟用守護程序daemonize yes2. 當Redis以守護程序方式執行時,Redis預設會把pid寫入/var/run/redis.pid檔案,可以通過pidfile指定pidfile /var/run/redis.pid3. 指定Redis監聽埠,預設埠為6379,作者在自己的一篇博文中解釋了為什麼選用6379作為預設埠,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自義大利歌女Alessia Merz的名字port 63794. 繫結的主機地址bind 127.0.0.1   這個Ip要設定成你伺服器的Ip
5. 設定當本機為slave服務時,設定master服務的IP地址及埠,在Redis啟動時,它會自動從master進行資料同步slaveof <masterip> <masterport>6. 當master服務設定了密碼保護時,slav服務連線master的密碼masterauth <master-password>啟動單機版的redis並且在後臺執行只需要設定daemonize yes之後執行命令:./redis-server redis.conf通過客戶端進入redis命令:./redis-cli -h 127.0.0.1 -p 6379-h:連線的伺服器的地址
-p:服務的埠號關閉redis的命令:./redis-cli shutdown到這裡單機版的redis就安裝完成了,外網如果要訪問還需要關閉防火牆。二、哨兵版1. 首先哨兵模式是適用於擁有redis主從伺服器的情況下的, 進入目錄 cd /usr/local/redis 將剛剛的bin資料夾重新命名 mv bin master 複製出從伺服器 cp -r master slave 這時候目錄下就有兩臺redis伺服器了 ,當然這裡也可以複製出多臺從伺服器。然後需要做的就是進入各伺服器目錄下修改redis.conf檔案類容.2.修改moster目錄下的redis.conf檔案 的pidfile屬性值 與 port 我這裡埠號修改為6380 主伺服器還可以設定從伺服器只讀的許可權 redis.conf中設定slave-read-only yes 即可。3.修改slave目錄下的redis.conf檔案的pidfile ,port為6381,以及 slaveof 127.0.0.1 6380 (這裡的ip地址和埠號對應著主伺服器可以配置其他伺服器的對應的值,我這裡是因為安裝在同一臺伺服器的原因)如果主伺服器設定了密碼可以通過masterauth <master-password> 進行修改到這裡主從的伺服器已經配置好了。可以分別通過 ./redis-server redis.conf 進行啟動通過客戶端 ./redis-cli -h 127.0.0.1 -p 6380進入 然後info命令檢視伺服器的角色127.0.0.1:6380> info...# Replicationrole:masterconnected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0... ./redis-cli -h 127.0.0.1 -p 6381 命令info...role:slavemaster_host:127.0.0.1master_port:6380master_link_status:upmaster_last_io_seconds_ago:1master_sync_in_progress:0slave_repl_offset:71slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0...但是這裡只是會起到一個數據備份的作用,而想要主伺服器掛掉了從伺服器頂上去的功能,還得需要配置哨兵,配置哨兵是通過配置sentinel.conf 檔案,配置多個sentinel.conf檔案就相當於配置了多個哨兵。sentinel.conf檔案在redis的解壓目錄下面。我這裡將它複製到/usr/local/redis/目錄下,修改類容配置埠號 port 26379配置主伺服器ip和埠號 sentinel monitor mymaster 127.0.0.163802 (我們這裡加上權值為2,是用來計算我們需要將哪一臺伺服器升級升主伺服器配置後臺啟動 daemonize yes配置日誌檔案位置 logfile /usr/local/redis/log/sentinel_log.log 啟動命令:進入一個伺服器的目錄下使用 ./redis-server ../sentinel.conf --sentineljava連線哨兵模式的redis 只需要連線哨兵的ip和埠就可以了。二、叢集版Redis叢集中至少需要有三個節點。要保證叢集的高可用,需要每個節點有一個備份機。Redis叢集至少需要6臺伺服器。這裡搭建一個偽分散式。使用一臺虛擬機器執行6redis例項。修改redis的埠號7001-7006接著上邊的寫,首先複製redis伺服器 cp -r /usr/local/redis/master /usr/local/redis-cluster/redis01進入目錄刪除多餘檔案:例如這裡的appendonly.aof 和 dump.rdb 檔案 如果有nodes.conf檔案也需要刪除修改redis.conf中的port和pidfile 值 並且設定 cluster-enabled yes複製另外的五個redis伺服器 在redis-cluster目錄下,並分別修改port 和 pidfile值 以及 cluster-enabled yes在這裡啟動和關閉redis,自己寫了一個指令碼,具體步驟cd /usr/local/redis-clustertouch start-all.sh 建立啟動指令碼chmod u+x start-all.sh 設定當前使用者有執行該指令碼的許可權vim start-all.sh 編輯檔案檔案內容:cd redis01./redis-server redis.confcd ..cd redis02./redis-server redis.confcd ..cd redis03./redis-server redis.confcd ..cd redis04./redis-server redis.confcd ..cd redis05./redis-server redis.confcd ..cd redis06./redis-server redis.conf同樣的步驟建立關閉指令碼 內容為:cd redis01./redis-cli -p 7001 shutdown./redis-cli -p 7002 shutdown./redis-cli -p 7003 shutdown./redis-cli -p 7004 shutdown./redis-cli -p 7005 shutdown./redis-cli -p 7006 shutdown這樣多redis是可以啟動了,但是並沒有形成叢集需要使用ruby指令碼搭建叢集。首先需要ruby的執行環境。安裝rubyyum install rubyyum install rubygems上傳redis-3.0.0.gem 檔案至伺服器安裝ruby指令碼執行使用的包在該目錄下面: gem install redis-3.0.0.gem剩下的一步就需要通過redis-trib.rb 來進行叢集的搭建,該檔案在編譯redis目錄下的src子目錄中,我這裡複製到了/usr/local/redis-cluster/下了 啟動叢集命令為:./redis-trib.rb create --replicas 1 192.168.5.153:7001 192.168.5.153:7002 192.168.5.153:7003 192.168.5.153:7004 192.168.5.153:7005 192.168.5.153:7006這裡的1是表示每一個節點有一個備份機redis-cli 連線叢集命令: ./redis-cli -h 127.0.0.1 -p 7001 -c-c:代表連線的是redis叢集到這裡redis的三種模式都完成了,因為剛好專案剛啟動沒有運維,自己就搗鼓了一下,順便也總結了一下。最後貼一下java單機版和叢集的測試程式碼吧單:publicvoidtestJedisPool() throws Exception {// 第一步:建立一個JedisPool物件。需要指定服務端的ip及埠。          JedisPool jedisPool = new JedisPool("192.168.5.153", 6379);// 第二步:從JedisPool中獲得Jedis物件。          Jedis jedis = jedisPool.getResource();// 第三步:使用Jedis操作redis伺服器。jedis.set("jedis", "test");          String result = jedis.get("jedis");          System.out.println(result);// 第四步:操作完畢後關閉jedis物件,連線池回收資源。jedis.close();// 第五步:關閉JedisPool物件。jedisPool.close();     }集:publicvoidtestJedisCluster() throws Exception {// 第一步:使用JedisCluster物件。需要一個Set<HostAndPort>引數。Redis節點的列表。          Set<HostAndPort> nodes = new HashSet<>();nodes.add(new HostAndPort("192.168.5.153", 7001));nodes.add(new HostAndPort("192.168.5.153", 7002));nodes.add(new HostAndPort("192.168.5.153", 7003));nodes.add(new HostAndPort("192.168.5.153", 7004));nodes.add(new HostAndPort("192.168.5.153", 7005));nodes.add(new HostAndPort("192.168.5.153", 7006));          JedisCluster jedisCluster = new JedisCluster(nodes);// 第二步:直接使用JedisCluster物件操作redis。在系統中單例存在。jedisCluster.set("hello", "helloworl");          String result = jedisCluster.get("hello");// 第三步:列印結果          System.out.println(result);// 第四步:系統關閉前,關閉JedisCluster物件。jedisCluster.close();     }