Java之品优购部署_day01(8)
2.1 Redis-Cluster簡介
2.1.1 什么是 Redis-Cluster
為何要搭建 Redis 集群。Redis 是在內存中保存數據的,而我們的電腦一般內存都不大, 這也就意味著 Redis 不適合存儲大數據,適合存儲大數據的是 Hadoop 生態系統的 Hbase 或者是 MogoDB。Redis 更適合處理高并發,一臺設備的存儲能力是很有限的,但是多臺設備協同合作,就可以讓內存增大很多倍,這就需要用到集群。
Redis 集群搭建的方式有多種,例如使用客戶端分片、Twemproxy、Codis 等,但從redis 3.0 之后版本支持 redis-cluster 集群,它是 Redis 官方提出的解決方案, Redis-Cluster 采用無中心結構,每個節點保存數據和整個集群狀態,每個節點都和其他所有節點連接。其 redis-cluster 架構圖如下:
客戶端與 redis 節點直連,不需要中間 proxy 層.客戶端不需要連接集群所有節點連接集群中任何一個可用節點即可。
所有的 redis 節點彼此互聯(PING-PONG 機制),內部使用二進制協議優化傳輸速度和帶
寬.
2.1.1 分布存儲機制-槽
(1) redis-cluster 把所有的物理節點映射到[0-16383]slot 上,cluster 負責維護
node<->slot<->value
(2) Redis 集群中內置了 16384 個哈希槽,當需要在 Redis 集群中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,然后把結果對 16384 求余數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點。
例如三個節點:槽分布的值如下:
SERVER1:
0-5460
SERVER2:
5461-10922
SERVER3:
10923-16383
2.1.2 容錯機制-投票
(1)選舉過程是集群中所有 master 參與,如果半數以上 master 節點與故障節點通信超過(cluster-node-timeout),認為該節點故障,自動觸發故障轉移操作. 故障節點對應的從節點自動升級為主節點
(2)什么時候整個集群不可用(cluster_state:fail)?
如果集群任意 master 掛掉,且當前 master 沒有 slave.集群進入 fail 狀態,也可以理解成集群的 slot 映射[0-16383]不完成時進入 fail 狀態.
4.2 搭建 Redis-Cluster4.2.1 搭建要求
需要 6 臺 redis 服務器。搭建偽集群。需 要 6 個 redis 實 例 。
需要運行在不同的端口 7001-7006
4.2.2 準備工作
(1)安裝 gcc 【此步省略】
Redis 是 c 語言開發的。安裝 redis 需要 c 語言的編譯環境。如果沒有 gcc 需要在線安裝。
yum install gcc-c++
(2)使用 yum 命令安裝 ruby (我們需要使用 ruby 腳本來實現集群搭建)【此步省略】
yum install ruby
yum install rubygems
Ruby,一種簡單快捷的面向對象(面向對象程序設計)腳本語言,在 20 世紀 90 年代由日本人松本行弘
(Yukihiro Matsumoto)開發,遵守 GPL協議和 Ruby License。它的靈感與特性來自于 Perl、Smalltalk、Eiffel
Ada以及 Lisp語言。由 Ruby 語言本身還發展出了 JRuby(Java 平臺)、IronRuby(.NET平臺)等其
他平臺的 Ruby 語言替代品。Ruby 的作者于 1993 年 2 月 24 日開始編寫 Ruby,直至 1995 年 12 月才正
式公開發布于 f(j 新聞組)。因為 Perl 發音與 6 月誕生石 pear(l 珍珠)相同,因此 Ruby 以 7 月誕生石 ruby
file:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71AB.tmp.pngfile:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71AC.tmp.pngfile:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71AD.tmp.png
Ruby,一種簡單快捷的面向對象(面向對象程序設計)腳本語言,在 20 世紀 90 年代由日本人松本行弘
(Yukihiro Matsumoto)開發,遵守 GPL協議和 Ruby License。它的靈感與特性來自于 Perl、Smalltalk、Eiffel
Ada以及 Lisp語言。由 Ruby 語言本身還發展出了 JRuby(Java 平臺)、IronRuby(.NET平臺)等其
他平臺的 Ruby 語言替代品。Ruby 的作者于 1993 年 2 月 24 日開始編寫 Ruby,直至 1995 年 12 月才正
式公開發布于 f(j 新聞組)。因為 Perl 發音與 6 月誕生石 pear(l 珍珠)相同,因此 Ruby 以 7 月誕生石 ruby
file:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71AE.tmp.pngfile:///C:\Users\user\AppData\Local\Temp\ksohtml\wps71BF.tmp.png(3)將 redis 源碼包上傳到 linux 系統 ,解壓 redis 源碼包
(4)編譯 redis 源碼 ,進入 redis 源碼文件夾
make
看到以下輸出結果,表示編譯成功
(5)創建目錄/usr/local/redis-cluster 目錄 安裝 6 個 redis 實例,分別安裝在以下目錄
/usr/local/redis-cluster/redis-1
/usr/local/redis-cluster/redis-2
/usr/local/redis-cluster/redis-3
/usr/local/redis-cluster/redis-4
/usr/local/redis-cluster/redis-5
/usr/local/redis-cluster/redis-6
以第一個 redis 實例為例,命令如下
make install PREFIX=/usr/local/redis-cluster/redis-1
出現此提示表示成功,按此方法安裝其余 5 個 redis 實例
(6)復制配置文件 將 /redis-3.0.0/redis.conf 復制到 redis 下的 bin 目錄下
[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-1/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-2/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-3/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-4/bin [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-5/bin
[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-6/bin
轉載于:https://blog.51cto.com/13517854/2140237
總結
以上是生活随笔為你收集整理的Java之品优购部署_day01(8)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL通过添加索引解决线上数据库服务
- 下一篇: Java用freemarker导出wor