欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

單臺Linux服務(wù)器實現(xiàn)Redis群集-創(chuàng)新互聯(lián)

一、Redis簡介

Redis是目前大規(guī)模使用的緩存中間件,由于它強大、高效、便捷的功能,得到了廣泛的使用。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、青田網(wǎng)絡(luò)推廣、小程序開發(fā)、青田網(wǎng)絡(luò)營銷、青田企業(yè)策劃、青田品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學生創(chuàng)業(yè)者提供青田建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.chinadenli.net

Redis在2015年發(fā)布了3.0.0,官方就已經(jīng)支持了redis cluster。redis cluster在設(shè)計的時候,就考慮到了去中心化、去中間件。也就是說,集群中的每個節(jié)點都是平等的關(guān)系,每個節(jié)點都保存各自的數(shù)據(jù)和整個集群的狀態(tài)。每個節(jié)點都和其他所有節(jié)點連接,而且這些連接保持活躍,這樣就保證了我們只需連接集群中的任意一個節(jié)點,就可以獲取到其他節(jié)點的數(shù)據(jù)。

二、Redis集群介紹

Redis集群是一個可以在多個Redis節(jié)點之間進行數(shù)據(jù)共享的設(shè)施。Redis集群不支持那些需要同時處理多個鍵的redis命令,因為執(zhí)行這些命令需要在多個節(jié)點之間移動數(shù)據(jù),并且在高負載的情況下,這些命令將降低redis集群的性能,并導致不可預測的行為。

Redis集群通過分區(qū)來提供一定程度的可用性,即使集群中一部分節(jié)點失效或者無法通信,集群也可以繼續(xù)處理命令請求。

三、Redis集群原理

Redis是如何合理發(fā)呢配這些節(jié)點和數(shù)據(jù)的?

Redis并沒有采用傳統(tǒng)的一致性哈希來分配數(shù)據(jù),而是采用了另一種叫做哈希槽的方式分配的。Redis cluster默認分配了16384個slot,當我們set一個key時,會采用CRC16算法(循環(huán)冗余校驗碼)來獲取所屬的slot,然后將這個key分到哈希槽區(qū)間的節(jié)點山,具體算法:CRC16(key)%16384。

注意:必須是三個以上的主節(jié)點才可創(chuàng)建群集,否則群集會失敗。

Redis集群在工作時其中某一臺主節(jié)點宕機后有其他的master節(jié)點進行投票和選舉,并且投票的結(jié)果時一半以上才能確定主節(jié)點宕機,如果主節(jié)點宕機一半以上整個集群的狀態(tài)就是fail。這就是為什么至少需要三臺主節(jié)點才可搭建Redis群集環(huán)境。

Redis群集的好處:

  • 1)具有將數(shù)據(jù)自動切分split到多個節(jié)點上的能力;
  • 2)當群集中的一部分節(jié)點失效或者無法進行通訊時,仍然具有繼續(xù)處理命令請求的能力;
  • 3)所有的rredis節(jié)點彼此互聯(lián),內(nèi)部使用二進制協(xié)議優(yōu)化傳輸速度和帶寬;二進制協(xié)議:傳輸過程中給有消息頭和消息實體。如果消息頭長度固定。通過解析消息頭就可以得到消息實體;
  • 4)節(jié)點的fail是通過集群中超過半數(shù)的節(jié)點檢測失效時才生效;
  • 5)客戶端與redis節(jié)點直連,不需要中間proxy層,客戶端不需要連接集群所有節(jié)點,連接集群中任何一個可用節(jié)點即可;

Redis采用的之中哈希槽的分配方式有好也有壞,好處就是很清晰,比如:我想增加一個節(jié)點D,redis cluster的這種做法是從各個節(jié)點的前面各拿取一部分slot到D上。大致就會變成這樣:
節(jié)點A覆蓋1365-5460 節(jié)點B覆蓋6827-10922 節(jié)點C覆蓋12288-16383 節(jié)點D覆蓋01364,5461-6826,10923-12287 同樣刪除一個節(jié)點也是類似,移動完成后就可以刪除這個 節(jié)點了;

所以redis cluster就是這樣一個形狀,如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

四、Redis-cluster主從模式

Redis-cluster為了保證數(shù)據(jù)的高可用性,加入了主從模式,一個主節(jié)點對應(yīng)一個或多個從節(jié)點。主節(jié)點提供數(shù)據(jù)存取,從節(jié)點則是從主節(jié)點獲取數(shù)據(jù)備份;當主節(jié)點宕機后,就會由這個從節(jié)點中選取一個來充當主節(jié)點,從而保證群集不會掛掉。

五、案例實施

關(guān)于多臺Linux實現(xiàn)redis群集可以參考Redis數(shù)據(jù)庫群集

(1)案例環(huán)境

由于是使用單臺服務(wù)器實現(xiàn)集群環(huán)境,所以就根據(jù)其端口來進行區(qū)分!

(2)案例實施

下載Redis群集

1)創(chuàng)建六個節(jié)點
[root@docker ~]# tar zxf redis-4.0.14.tar.gz -C /usr/local
[root@docker ~]# cd /usr/local/redis-4.0.14/
[root@docker redis-4.0.14]# make && make install     //編譯安裝redis
[root@redis ~]# mkdir -p /usr/local/cluster/700{0..5}
//由于是在單臺創(chuàng)建多個節(jié)點,所以事先把這個目錄創(chuàng)建好,用于存放各個節(jié)點的配置信息
[root@docker ~]# cp /usr/local/redis-4.0.14/redis.conf /usr/local/cluster/7000
//將redis原本的配置文件復制一份
[root@docker ~]# vim /usr/local/cluster/7000/redis.conf       //編譯7000節(jié)點的配置文件
  92 port 7000                             //修改監(jiān)聽端口
 158 pidfile /var/run/redis_7000.pid              //修改pid文件名
 672 appendonly yes                 //開啟aof持久化
 676 appendfilename "appendonly-7000.aof"           //修改持久化的配置文件名
 814 cluster-enabled yes                   //開啟redis的群集模式
 822 cluster-config-file nodes-7000.conf     //修改群集的配置文件名
 828 cluster-node-timeout 5000             //修改群集的等待時間
[root@docker ~]# cd /usr/local/cluster/7000
[root@docker 7000]# redis-server redis.conf          //必須進入相應(yīng)的目錄啟動redis服務(wù)

不過啟動時,會出現(xiàn)這樣的錯誤,如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

[root@redis 7000]# vim /usr/local/cluster/7000/redis.conf          //編寫7000節(jié)點的配置文件
 136 daemonize yes                      //開啟守護進程讓其在后臺運行
[root@redis 7000]# echo 512 > /proc/sys/net/core/somaxconn 
[root@redis 7000]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
[root@redis 7000]# sysctl -p
vm.overcommit_memory = 1
[root@redis 7000]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
//根據(jù)剛才提示的警告信息對redis服務(wù)簡單進行一個優(yōu)化
2)啟動各個節(jié)點
[root@redis 7000]# redis-server redis.conf                  //進入其目錄運行redis服務(wù)
[root@redis 7000]# cp redis.conf ../7001
[root@redis 7000]# cp redis.conf ../7002
[root@redis 7000]# cp redis.conf ../7003
[root@redis 7000]# cp redis.conf ../7004
[root@redis 7000]# cp redis.conf ../7005
//因為需要開啟六個節(jié)點,所以需要將其配置文件分為六份
[root@redis 7000]# sed -i s/7000/7001/g ../7001/redis.conf 
[root@redis 7000]# sed -i s/7000/7002/g ../7002/redis.conf 
[root@redis 7000]# sed -i s/7000/7003/g ../7003/redis.conf 
[root@redis 7000]# sed -i s/7000/7004/g ../7004/redis.conf 
[root@redis 7000]# sed -i s/7000/7005/g ../7005/redis.conf 
//因為六個節(jié)點都是根據(jù)端口來區(qū)分,所以配置文件中只需修改以端口號命名的內(nèi)容
[root@redis 7000]# cd ../7001 && redis-server redis.conf
[root@redis 7001]# cd ../7002 && redis-server redis.conf
[root@redis 7002]# cd ../7003 && redis-server redis.conf
[root@redis 7003]# cd ../7004 && redis-server redis.conf
[root@redis 7004]# cd ../7005 && redis-server redis.conf
//都是進入其相應(yīng)的目錄啟動服務(wù)
[root@redis 7005]# netstat -anpt | grep redis     
tcp        0      0 127.0.0.1:7004          0.0.0.0:*               LISTEN      5615/redis-server 1 
tcp        0      0 127.0.0.1:7005          0.0.0.0:*               LISTEN      5620/redis-server 1 
tcp        0      0 127.0.0.1:17000         0.0.0.0:*               LISTEN      5524/redis-server 1 
tcp        0      0 127.0.0.1:17001         0.0.0.0:*               LISTEN      5592/redis-server 1 
tcp        0      0 127.0.0.1:17002         0.0.0.0:*               LISTEN      5605/redis-server 1 
tcp        0      0 127.0.0.1:17003         0.0.0.0:*               LISTEN      5610/redis-server 1 
tcp        0      0 127.0.0.1:17004         0.0.0.0:*               LISTEN      5615/redis-server 1 
tcp        0      0 127.0.0.1:17005         0.0.0.0:*               LISTEN      5620/redis-server 1 
tcp        0      0 127.0.0.1:7000          0.0.0.0:*               LISTEN      5524/redis-server 1 
tcp        0      0 127.0.0.1:7001          0.0.0.0:*               LISTEN      5592/redis-server 1 
tcp        0      0 127.0.0.1:7002          0.0.0.0:*               LISTEN      5605/redis-server 1 
tcp        0      0 127.0.0.1:7003          0.0.0.0:*               LISTEN      5610/redis-server 1 
//查看端口都已經(jīng)在監(jiān)聽,剩下的17000這樣的端口是群集之間溝通使用的
3)為各個節(jié)點分配哈希槽,并加入群集環(huán)境
[root@redis 7005]# redis-cli -p 7000              //隨便指定一個端口進入redis終端
127.0.0.1:7000> CLUSTER INFO                  //查看群集詳細信息

cluster_state:fail                          //發(fā)現(xiàn)現(xiàn)在是fail(失敗)的狀態(tài)
……………………                       //省略 部分內(nèi)容
127.0.0.1:7000> CLUSTER NODES           //查看群集節(jié)點
d554512885b2679d432d0d6b011c9ea56ea1ebeb :7000@17000 myself,master - 0 0 0 connected
//發(fā)現(xiàn)加入群集的節(jié)點只有7000這個節(jié)點
127.0.0.1:7000> exit
[root@redis 7005]# redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0..5461}
OK
[root@redis 7005]# redis-cli -h 127.0.0.1 -p 7001 cluster addslots {5462..10922}
OK
[root@redis 7005]# redis-cli -h 127.0.0.1 -p 7002 cluster addslots {10923..16383}
OK
//為各個群集階段分配hash槽
127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7000
OK
127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7001
OK
127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7002
OK
127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7003
OK
127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7004
OK
127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7005
OK
//用來連接不同的開啟集群支持的 Redis 節(jié)點,以進入工作集群
[root@redis 7005]# redis-cli -p 7000
127.0.0.1:7000> CLUSTER INFO
cluster_state:ok                     //再次查看群集狀態(tài)發(fā)現(xiàn)已經(jīng)是“ok”的狀態(tài)
……………………                   //省略部分內(nèi)容
127.0.0.1:7000> CLUSTER NODES                   //再次查看群集節(jié)點信息

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

預設(shè)環(huán)境是7000是7003的主節(jié)點、7001是7004的主節(jié)點、7002是7005的主節(jié)點,操作如下:

[root@redis 7005]# redis-cli -p 7003          //連接7003的節(jié)點
127.0.0.1:7003> CLUSTER REPLICATE d554512885b2679d432d0d6b011c9ea56ea1ebeb
OK           //這個是7000的ID號
127.0.0.1:7003> exit
[root@redis 7005]# redis-cli -p 7004          //連接7004的節(jié)點
127.0.0.1:7004> CLUSTER REPLICATE 182a55ee8b38afbf5b48209979f220dc4da7c14a
OK                    //這個是7001的ID號
127.0.0.1:7004> exit
[root@redis 7005]# redis-cli -p 7005          //連接7005的節(jié)點
127.0.0.1:7005> CLUSTER REPLICATE 82b62bda5b31d8ee27aee8d7320663ee86276e9f
OK                   //這個是7002的ID號
127.0.0.1:7005> CLUSTER NODES           //再次查看群集節(jié)點的詳細信息

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

4)存取數(shù)據(jù)進行測試
[root@redis 7005]# redis-cli -p 7000            //進入節(jié)點插入數(shù)據(jù)進行測試
127.0.0.1:7000> set name lzj
(error) MOVED 5798 127.0.0.1:7001           
//發(fā)現(xiàn)出現(xiàn)錯誤,提示應(yīng)該是7001的節(jié)點來存儲這個數(shù)據(jù)
127.0.0.1:7000> exit
[root@redis 7005]# redis-cli -p 7000 -c          //使用“-c”選項表示進入群集中
127.0.0.1:7000> set name lzj                  //重新插入數(shù)據(jù)
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK               //提示將數(shù)據(jù)存放在7001節(jié)點上
127.0.0.1:7001> get name               //獲取鍵所對應(yīng)的值
"lzj"
5)模擬單個節(jié)點發(fā)生故障
[root@redis 7001]# cd ../7001
[root@redis 7001]# redis-cli -p 7001 shutdown
//模擬7001節(jié)點故障
[root@redis 7001]# redis-cli -p 7000
127.0.0.1:7000> CLUSTER NODES            //進入節(jié)點查看群集節(jié)點的狀態(tài)
127.0.0.1:7004> get name
"lzj"

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

[root@redis 7001]# redis-server redis.conf 
//進入7001對應(yīng)的目錄,啟動redis節(jié)點
[root@redis 7001]# redis-cli -p 7000  
127.0.0.1:7000> CLUSTER NODES               //進入群集查看群集狀態(tài)

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

6)安裝ruby軟件

下載ruby所需軟件包

[root@redis ~]# yum -y install rpm-build openssl openssl-devel
//安裝ruby所需依賴
[root@redis ~]# tar zxf ruby-2.3.1.tar.gz -C /usr/src
cd [root@redis ~]# cd /usr/src/ruby-2.3.1/
[root@redis ruby-2.3.1]# ./configure --prefix=/usr/local/ruby && make && make install
//編譯安裝ruby,可能時間較長
[root@redis ~]# ln -s /usr/local/ruby/bin/* /usr/local/bin
//為gem命令創(chuàng)建符號鏈接
[root@redis ~]# ln -s /usr/local/redis-4.0.14/src/* /usr/local/bin
//為redis常用命令創(chuàng)建符號鏈接
[root@redis ~]# gem install redis-3.3.0.gem 
//使用gem命令安裝Redis群集必備軟件包
7)添加主節(jié)點7006
[root@redis ~]# redis-trib.rb check 127.0.0.1:7000
//檢查群集節(jié)點狀態(tài)

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

[root@redis ~]# mkdir /usr/local/cluster/7006
[root@redis ~]# cd /usr/local/cluster/7006
//創(chuàng)建相應(yīng)目錄并進入
[root@redis 7006]# cp ../7000/redis.conf .
[root@redis 7006]# sed -i s/7000/7006/g redis.conf 
//復制配置文件、并進行修改
[root@redis 7006]# redis-server redis.conf 
//修改7006節(jié)點的redis服務(wù)
[root@redis ~]# redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
//將7006節(jié)點加入到7000節(jié)點群集環(huán)境中(默認是master狀態(tài))
[root@redis ~]# redis-trib.rb check 127.0.0.1:7000
//再次查看群集狀態(tài)

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集
截圖時,不小心擋上了,可以發(fā)現(xiàn)7006這個節(jié)點是沒有槽點的,不能存儲數(shù)據(jù)的!

[root@redis ~]# redis-trib.rb reshard 127.0.0.1:7000                //分配7000這個群集的槽點
How many slots do you want to move (from 1 to 16384)? 4096    //針對多少個節(jié)點進行操作
What is the receiving node ID?7add42108b3fc3e9c0af2846fb06ceaf8b172c87  
//給7006節(jié)點,這里輸入的是7006節(jié)點的ID號
Source node #1:all       //從所有節(jié)點開始分配
[root@redis ~]# redis-trib.rb check 127.0.0.1:7000
//再次查看群集狀態(tài)

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

8)添加從節(jié)點7007
[root@redis ~]# mkdir /usr/local/cluster/7007
[root@redis ~]# cd /usr/local/cluster/7007
//創(chuàng)建相應(yīng)目錄并進入
[root@redis 7007]# cp ../7000/redis.conf .
[root@redis 7007]# sed -i s/7000/7007/g redis.conf 
//復制配置文件并進行修改
[root@redis 7007]# redis-server redis.conf
//啟動7007節(jié)點redis服務(wù)
[root@redis ~]# redis-trib.rb add-node --slave 127.0.0.1:7007 127.0.0.1:7000
//往7000群集中添加7007節(jié)點,而且指定其為slave
[root@redis ~]# redis-trib.rb check 127.0.0.1:7000
//查看群集狀態(tài)

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

9)添加從節(jié)點7008
[root@redis ~]# mkdir /usr/local/cluster/7008
[root@redis ~]# cd /usr/local/cluster/7008
[root@redis 7008]# cp ../7000/redis.conf .
[root@redis 7008]# sed -i s/7000/7008/g redis.conf 
[root@redis 7008]# redis-server redis.conf 
//創(chuàng)建相應(yīng)目錄并進行修改配置文件,啟動服務(wù)
[root@redis ~]# redis-trib.rb add-node --slave --master-id 7add42108b3fc3e9c0af2846fb06ceaf8b172c87 127.0.0.1:7008 127.0.0.1:7000
//向群集中添加節(jié)點,指定其為salve,并指定主節(jié)點ID號(7006節(jié)點的ID)
[root@redis ~]# redis-trib.rb check 127.0.0.1:7000
//查看群集狀態(tài)

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

10)將7000節(jié)點刪除
[root@redis ~]# redis-trib.rb reshard 127.0.0.1:7000                                     //對群集節(jié)點進行操作
How many slots do you want to move (from 1 to 16384)? 4096                     //針對多個節(jié)點進行操作
What is the receiving node ID? 
7add42108b3fc3e9c0af2846fb06ceaf8b172c87             //這里輸入將刪除的槽節(jié)點給那個節(jié)點(7006節(jié)點)
Source node d554512885b2679d432d0d6b011c9ea56ea1ebeb    //輸入刪除的節(jié)點
Source node  done
Do you want to proceed with the proposed reshard plan (yes/no)? yes
//表示確認
[root@redis ~]# redis-trib.rb del-node 127.0.0.1:7000 d554512885b2679d432d0d6b011c9ea56ea1ebeb
//刪除7000群集中的7000節(jié)點
[root@redis ~]# redis-trib.rb check 127.0.0.1:7001        //查看群集狀態(tài)

如圖:
單臺Linux服務(wù)器實現(xiàn)Redis群集

——————————————本文到此結(jié)束,感謝閱讀————————————————————

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標題:單臺Linux服務(wù)器實現(xiàn)Redis群集-創(chuàng)新互聯(lián)
標題來源:http://www.chinadenli.net/article10/degigo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)域名注冊虛擬主機網(wǎng)站排名App設(shè)計網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化