redis安裝、測試&叢集的搭建&踩過的坑
1 redis的安裝
1.1 安裝redis
版本說明
本教程使用redis3.0版本。3.0版本主要增加了redis叢集功能。
安裝的前提條件:
需要安裝gcc:yum install gcc-c++
1、下載redis的原始碼包。
2、把原始碼包上傳到linux伺服器
3、解壓原始碼包
tar -zxvf redis-3.0.0.tar.gz
4、Make
5、Make install
[[email protected] redis-3.0.0]# make install PREFIX=/usr/local/redis
1.2 啟動redis
1、前端啟動模式
/usr/local/redis/bin/redis-server
預設是前端啟動模式,埠是6379
2、後端啟動
1)從redis的原始碼目錄中複製redis.conf到redis的安裝目錄。
2)修改配置檔案
3)[[email protected] bin]# ./redis-server redis.conf
1.3 Redis常用命令
./redis-cli 127.0.0.1:6379> set a 10 OK 127.0.0.1:6379> get a "10"
1.4 Java程式碼測試redis,需使用jedis.jar
import java.util.HashSet; import org.junit.Test; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPool; /** * 測試jedis,redis的客戶端,想連線到虛擬機器中的redis-server需要關閉iptables * 執行:service iptables stop *@author HELLXZ * @date 建立時間:2017年8月17日 上午8:41:05 */ public class testJedis { @Test //單機測試 public void testJedis(){ Jedis jedis = new Jedis("192.168.25.133", 6379); jedis.set("haha", "helloworld!"); String string = jedis.get("haha"); System.out.println(string); jedis.close(); } @Test //池測試 public void testJedisPool(){ JedisPool jedisPool = new JedisPool("192.168.25.133", 6379); Jedis resource = jedisPool.getResource(); resource.set("hei", "ha"); String string = resource.get("hei"); System.out.println(string); resource.close(); //關閉連線池 jedisPool.close(); } }
1.4.1 此處的坑
程式碼測試顯示失敗,連線失敗,想了一陣,以為是bind的ip地址不對,修改redis.conf的bind的ip,測試沒有用。
然後百度發現問題在於虛擬機器使用的cent6.4的防火牆還開著,關閉後測試通過。
cent7以下用到的防火牆是iptables,關閉防火牆程式碼如下
關閉防火牆命令:
service iptables stop
永久關閉防火牆:
chkconfig iptables off
cent7以上關閉命令:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動
1.5 常用資料型別
1) String
2) Hash
3) List
4) Set
5) SortedSet
其中1)2)最常用
2 Redis叢集的搭建
2.1 Redis叢集相關概念
2.1.1 redis-cluster架構圖
叢集基礎知識:
redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster 負責維護node<->slot<->value
Redis 叢集中內建了 16384 個雜湊槽,當需要在 Redis 叢集中放置一個 key-value 時,redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點
Key:a
計算a的hash值,例如值為100,100這個槽在server1上,所以a應該放到server1.
Key:hello
Hash值:10032,此槽在server2上。Hell可以應該存在server2.
2.1.2 redis-cluster投票:容錯
(1)領著投票過程是叢集中所有master參與,如果半數以上master節點與master節點通訊超過(cluster-node-timeout),認為當前master節點掛掉.
(2):什麼時候整個叢集不可用(cluster_state:fail)?
a:如果叢集任意master掛掉,且當前master沒有slave.叢集進入fail狀態,也可以理解成叢集的slot對映[0-16383]不完成時進入fail狀態. ps : redis-3.0.0.rc1加入cluster-require-full-coverage引數,預設關閉,開啟叢集相容部分失敗.
b:如果叢集超過半數以上master掛掉,無論是否有slave叢集進入fail狀態.
ps:當叢集不可用時,所有對叢集的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤
2.2 我們的叢集結構
叢集中有三個節點的叢集,每個節點有一主一備。需要6臺虛擬機器。
搭建一個偽分散式的叢集,使用6個redis例項來模擬。
2.3 搭建叢集需要的環境
搭建叢集需要使用到官方提供的ruby指令碼。
需要安裝ruby的環境。
安裝ruby
yum install ruby yum install rubygems
redis叢集管理工具redis-trib.rb
[[email protected] ~]# cd redis-3.0.0
[[email protected] redis-3.0.0]# cd src
[[email protected] src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr 1 07:01 redis-trib.rb
[[email protected] src]#
指令碼需要的ruby包:
需要上傳到linux服務。
安裝ruby的包:
gem install redis-3.0.0.gem
顯示情況如下:
[[email protected] ~]# gem install redis-3.0.0.gem
Successfully installed redis-3.0.0
1 gem installed
Installing ri documentation for redis-3.0.0...
Installing RDoc documentation for redis-3.0.0...
2.4 叢集的搭建
第一步:建立6個redis例項,埠號從7001~7006
建立例項舉例第一個,後邊相同,複製改名資料夾,配置檔案改埠號即可:
cd /usr/local/redis #進入redis安裝路徑 cd bin rm -rf dump.db #刪除快取的資料庫 cd .. cp bin ../redis-cluster/redis01 #複製bin並重命名到redis-cluster目錄下 #此時redis_cluster 中已經有一個redis01的例項檔案夾了, #此時可以先修改一下配置檔案,比如:修改埠號,開啟cluster-enabled yes #然後 各種複製這個資料夾,建立6個例項 cp redis01 redis02 cp redis01 redis03 cp redis01 redis04 cp redis01 redis05 cp redis01 redis06 #之後參考第二步把沒有修改的埠號改正確即可
第二步:修改redis.conf(這些都在redis01~06中,都需要修改!)
1) 修改埠號
2) 開啟cluster-enable前面的註釋。
第三步:把建立叢集的ruby指令碼(redis-trib.rb)從redis安裝路徑下的src路徑,複製到redis-cluster目錄下。
cd /usr/local/redis/src cp *.rb /usr/local/redis-cluster
第四步:啟動6個redis例項,刪除dump.db檔案,開啟redis.conf更改埠號,開啟cluster-enabled yes
建立指令碼 vim startall.sh 輸入如下並儲存
1 cd redis01 2 ./redis-server redis.conf 3 cd .. 4 cd redis02 5 ./redis-server redis.conf 6 cd .. 7 cd redis03 8 ./redis-server redis.conf 9 cd .. 10 cd redis04 11 ./redis-server redis.conf 12 cd .. 13 cd redis05 14 ./redis-server redis.conf 15 cd .. 16 cd redis06 17 ./redis-server redis.conf
此處儲存完畢,chmod +x startall.sh授權,一定要 ./startall.sh 執行,然後再繼續操作!
檢視狀態 ps aux|grep redis
第五步:建立叢集。具體ip為虛擬機器設定的ip,請注意
./redis-trib.rb create --replicas 1 192.168.25.133:7001 192.168.25.133:7002 192.168.25.133:7003 192.168.25.133:7004 192.168.25.133:7005 192.168.25.133:7006
接下來會彈一堆程式碼。看看就好,後邊需要輸入請求yes繼續執行
[[email protected] redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.133:7001 192.168.25.133:7002 192.168.25.133:7003 192.168.25.133:7004 192.168.25.133:7005 192.168.25.133:7006 >>> Creating cluster Connecting to node 192.168.25.133:7001: OK Connecting to node 192.168.25.133:7002: OK Connecting to node 192.168.25.133:7003: OK Connecting to node 192.168.25.133:7004: OK Connecting to node 192.168.25.133:7005: OK Connecting to node 192.168.25.133:7006: OK >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.25.133:7001 192.168.25.133:7002 192.168.25.133:7003 Adding replica 192.168.25.133:7004 to 192.168.25.133:7001 Adding replica 192.168.25.133:7005 to 192.168.25.133:7002 Adding replica 192.168.25.133:7006 to 192.168.25.133:7003 M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.25.133:7001 slots:0-5460 (5461 slots) master M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.25.133:7002 slots:5461-10922 (5462 slots) master M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.25.133:7003 slots:10923-16383 (5461 slots) master S: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.25.133:7004 replicates 5a8523db7e12ca600dc82901ced06741b3010076 S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.25.133:7005 replicates bf6f0929044db485dea9b565bb51e0c917d20a53 S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.25.133:7006 replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca Can I set the above configuration? (type 'yes' to accept): yes
輸入yes之後繼續,接下來的程式碼到join...需要耐心等待,如果出現一兩行的省略號,那麼很遺憾,可能前邊你的./startall.sh沒有啟動!!!ctrl+c關閉當前,刪除各個資料夾中生成的dump.db,然後啟動指令碼./startall.sh,重複上述操作即可成功!
>>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join.....
正常會馬上這樣:
>>> Performing Cluster Check (using node 192.168.25.133:7001) M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.25.133:7001 slots:0-5460 (5461 slots) master M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.25.133:7002 slots:5461-10922 (5462 slots) master M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.25.133:7003 slots:10923-16383 (5461 slots) master M: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.25.133:7004 slots: (0 slots) master replicates 5a8523db7e12ca600dc82901ced06741b3010076 M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.25.133:7005 slots: (0 slots) master replicates bf6f0929044db485dea9b565bb51e0c917d20a53 M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.25.133:7006 slots: (0 slots) master replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [[email protected] redis-cluster]#
至此,redis叢集搭建完成。
每個redis叢集的節點都是會互相ping pong 的,接下來我們測試一下
#結尾的-c一定要寫!不然會出現move失敗的錯誤!
[[email protected] redis-cluster]# redis01/redis-cli -h 192.168.25.133 -p 7002 -c #結尾的-c一定要寫!不然會出現move失敗的錯誤! [[email protected] redis-cluster]# redis01/redis-cli -h 192.168.25.133 -p 7002 192.168.25.133:7002> set a 100 (error) MOVED 15495 192.168.25.133:7003 192.168.25.133:7002> [[email protected] redis-cluster]# redis01/redis-cli -h 192.168.25.133 -p 7002 -c 192.168.25.133:7002> set a 100 -> Redirected to slot [15495] located at 192.168.25.133:7003 OK 192.168.25.133:7003>
2.5 java程式碼測試叢集
1 @Test 2 public void testJedisCluster() { 3 HashSet<HostAndPort> nodes = new HashSet<>(); 4 nodes.add(new HostAndPort("192.168.25.133", 7001)); 5 nodes.add(new HostAndPort("192.168.25.133", 7002)); 6 nodes.add(new HostAndPort("192.168.25.133", 7003)); 7 nodes.add(new HostAndPort("192.168.25.133", 7004)); 8 nodes.add(new HostAndPort("192.168.25.133", 7005)); 9 nodes.add(new HostAndPort("192.168.25.133", 7006)); 10 11 JedisCluster cluster = new JedisCluster(nodes); 12 13 cluster.set("key1", "1000"); 14 String string = cluster.get("key1"); 15 System.out.println(string); 16 17 cluster.close(); 18 }
2.6 關閉redis叢集(節點)
有開啟自然有關閉,比較麻煩,一般的教程裡沒寫,先cd到redis-cluster/,也可以把以下程式碼裝進指令碼如:vim shutdownall.sh,儲存後chmod +x shutdownall.sh ,執行的時候./shutdownall.sh即可
redis01/redis-cli -p 7001 shutdown redis02/redis-cli -p 7002 shutdown redis03/redis-cli -p 7003 shutdown redis04/redis-cli -p 7004 shutdown redis05/redis-cli -p 7005 shutdown redis06/redis-cli -p 7006 shutdown
2.7 重啟redis叢集(節點)
回憶我們建立redis叢集的時候是create的cluster,那麼重啟呢?其實重啟更簡單!完全無需我們在create一個新的cluster!百度一會了,發現幾乎沒有解決方案,或者有解決方案的沒有技術分享,不多說,直接說結論:
我們建立了叢集之後,叢集已經存在了,無需建立,僅僅重啟各個節點就可以運行了!本文上邊有提到startall.sh指令碼的建立,只需執行那個指令碼就啟動了叢集了!
./startall.sh
-------本文理論部分來自傳智黑馬授課筆記,僅作記錄,實際操作的部分以及筆記中不全的步驟在這裡得以補全,新增自認為會坑的細節。不喜勿噴。
無法連線的bug解決引用自:
http://blog.csdn.net/skymouse2002/article/details/52279553
相關推薦
redis安裝、測試&叢集的搭建&踩過的坑
1 redis的安裝 1.1 安裝redis 版本說明 本教程使用redis3.0版本。3.0版本主要增加了redis叢集功能。 安裝的前提條件: 需要安裝gcc:yum install gcc-c++ 1、下載redis的原始碼包。 2、把原始碼包上傳到linux伺服器 3
Hadoop及spark叢集搭建踩過的坑
本叢集總共有三臺主機,一臺master,兩臺slave Hadoop有一個節點無法啟動 在按照教程子雨大資料之Spark入門教程(Python版)搭建Hadoop叢集時,執行jps命令,發現master和其中一個slave能正常工作,執行./bin/yarn node -lis
redis-5.0.0基於Redis官方工具的叢集搭建(排坑指南,從安裝Redis開始)
一、前言 搭建Redis叢集的教程很多,介紹的也很全面,但是大多數 還是使用Ruby指令碼的版本,安裝Ruby本身也不是一件簡單的事情,redis-5.0.0之後已經將 redis-trib.rb 指令碼的功能全部整合到 redis-cli之中了,本章基於redis-cli 的&nbs
redis安裝、持久化、資料型別、常用操作、操作鍵值、安全設定、慢查詢日誌、儲存session、主從配置、叢集介紹、叢集搭建配置、叢集操作,php安裝redis擴充套件
21.9 redis介紹 21.10 redis安裝 21.11 redis持久化 21.12 redis資料型別 21.13/2
redis之二 主從複製、sentinel叢集搭建
redis中文官網: replication sentinel 一、主從複製 通過redis的持久化功能,redis可以保證伺服器重啟也不會損失(或少量損失)資料。但資料儲存在單臺redis伺服器上,如果這臺伺服器出現硬碟故障,則會導致資料丟失。 為了避免單點故障,可以將資
LNMP環境搭建:Nginx安裝、測試與域名配置
Nginx作為一款優秀的Web Server軟體同時也是一款優秀的負載均衡或前端反向代理、快取服務軟體 2.編譯安裝Nginx (1)安裝Nginx依賴函式庫pcre pcre為“perl相容正則表示式”perl compatible regu
分散式快取技術redis學習系列(四)——redis高階應用(叢集搭建、叢集分割槽原理、叢集操作)
Redis叢集簡介 Redis 叢集是3.0之後才引入的,在3.0之前,使用哨兵(sentinel)機制(本文將不做介紹,大家可另行查閱)來監控各個節點之間的狀態。Redis 叢集可謂是讓很多人久等了。 Redis 叢集是一組能進行資料共享的Redis 例項(
Redis(一)簡介及安裝、測試
一、Redis簡介: 關於關係型資料庫和nosql資料庫 關係型資料庫是基於關係表的資料庫,最終會將資料持久化到磁碟上,而nosql資料 庫是基於特殊的結構,並將資料儲存到記憶體的資料庫。從效能上而言,nosql資料庫 要優於關係型資料庫,從安全性上而言關係型資料庫要優於nosql資料庫,所以在實
redis安裝及cluster叢集環境搭建
===========================redis安裝=========================== 1.下載redis包redis-3.2.1.tar.gz 2.將redis-3.2.1.tar.gz包拷貝到/usr/local下,並解壓 3.修改資
分散式快取技術redis系列(四)——redis高階應用(叢集搭建、叢集分割槽原理、叢集操作)
[[email protected] redis-cluster]# mkdir /usr/local/redis-cluster/7037 && cp /usr/local/redis-cluster/7031/redis.conf /usr/local/redis-cluster
Python搭建Numpy、SciPy、MatPlotLib環境(下載、安裝、測試)
前言 Numpy是Python開發環境中一個獨立的函式庫; SciPy是以NumPy為基礎,一個應用更加廣泛的科學計算工具庫; MatPlotLib是一個在使用Numpy、SciPy時經常用到的一個強大的繪圖函式庫。 在安裝這三個package之前,需要
阿里雲學生機搭建spark、hadoop叢集(踩坑之路)
伺服器:三臺阿里雲學生機(三個賬號,都在華南1c)系統:ubuntu一、通過外網ip登入伺服器需要修改安全組,出入方向都一樣,都加入這兩條。為何加這兩條後續慢慢說明。第一條安全組功能之一就是為了能夠本地ssh到伺服器。(網上第一條几乎所有的埠配置都是22/22,後續解釋為何改
Redis 叢集時 踩過的坑
建立完成redis例項後,使用redis-trib.tb來新建叢集 redis-trib.rb create --replicas 1 127.0.0.1:7379 127.0.0.1:7380 127.0.0.1:7381 127.0.0.1:7382 127.0.0.
前端開發工具Brackets介紹,安裝及安裝Emme插件時踩過的坑
module 文件 不想 現在 div 當前 user 沒有 -s 對於前端開發的園友來說有可能IDE工具有很多,層次不窮,還有每個人的喜好及習慣也不一樣,因為我是一名後端開發的.Net程序員,但是大家都知道,現在都提倡什麽全棧工程師,所以也得會點前端開發,所以我對於
Redis 安裝、卸載、啟動
text 服務器端 開始 font serve 技術 通過 執行 根目錄 window 解壓redis 安裝包 文件信息 redis-benchmark.exe #基準測試 redis-check-aof.exe # aof redisch
Mosquitto安裝、測試
下載安裝 blog config 安裝完成 line download align ins 圖片 1、官網下載安裝包,並上傳到服務器 下載地址:http://mosquitto.org/download/ 上傳服務器,並解壓: 2、進入解壓完的目錄: 3、安裝依
Redis安裝、配置
技術 pac don 文件中 shu reads run rip mem 一、Redis安裝 Linux安裝 下載tar包,移至Linux目錄下 解壓:tar -zxvf redis-4.0.1.tar.gz 安裝gcc:yum install
ELK搭建踩過的坑
https mas reads name bin all 分析 www. hosts ELK搭建踩過的坑學習博客:http://blog.51cto.com/zero01/2082794 日誌多而雜,搜索慢--->集中式管理分布式系統--->快速定位服務器和模塊
PHP redis安裝及測試——Windows
Redis安裝 Windows下的Redis安裝: 下載地址:https://github.com/MSOpenTech/redis/releases 根據自己情況下載32位或是64位,下載完解壓到磁碟根目錄(我安裝在G盤)。資料夾重新命名為:redi
Linux下redis安裝以及遠端訪問 搭建過程綜合整理
虛擬機器以及linux安裝 VMware安裝,我安裝的版本是14.1.1.28517 虛擬機器以及linux安裝過程傳送門:點選開啟連結,虛擬機器簡簡單單的典型安裝就行 虛擬機器安裝後需要啟用,啟用碼傳送門:點選開啟連結 linux系統用的是centos7 linux系統安裝時候需要注