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