主要流程:
一. redis的解壓安裝
二. 集群是配置
一. redis的解壓安裝:
1.下載redis壓縮包並解壓
1.wget http://download.redis.io/releases/redis-3.2.9.tar.gz 2.tar -zvxf redis-3.2.9.tar.gz
注:redis在5.0版本后,是使用redis-cli 命令來創建集群的,之前舊的 redis-trib.rb 創建命令已集成到redis-cli中。
2.安裝,在redis-3.2.9目錄下執行
1. make install PREFIX=/home/hadoop/soft/redis-3.2.9(注意后面PREFIX的值為你解壓后生成的Redis目錄的絕對路徑)
執行完后會生成一個在redis-3.2.9目錄下會生成一個bin目錄,並且deps和src也會更新
3.開始配置
先在一台機器上做一下配置:
(1)redis-3.2.9目錄下創建一個cluster-conf目錄,並在cluster-conf目錄下創建6380、6381兩個目錄
1. [hadoop@masterredis-3.2.9]$ mkdir cluster-config 2. [hadoop@mastercluster-config]$ mkdir 6380 3. [hadoop@mastercluster-config]$ mkdir 6381
(2)創建端口目錄並修改配置信息,如下
1. [hadoop@masterredis-3.2.9]$ cp redis.conf ./cluster-config/6380 2. [hadoop@masterredis-3.2.9]$ cp redis.conf ./cluster-config/6381
分別修改6380、6381目錄下redis.conf文件如下內容:
以6380端口為例:
1.端口 port 6380 2.指定日志文件路徑 logfile “/home/hadoop/soft/redis-3.2.9/cluster-config/6380/redis.log” 3.指定rdb、aof文件寫入路徑 dir /home/hadoop/soft/redis-3.2.9/cluster-config/6380/ 4.是否開啟集群 cluster-enabled yes 5.集群配置文件名稱 cluster-config-file nodes-6380.conf 6.超時時間 cluster-node-timeout 15000(默認值)
7.持久化配置
appendonly yes
8.pidfile redis-3.2.9/cluster-config/6380.pid/ pid位置
9.ip 綁定 一定要寫本機ip並且建立集群的時候要用這個ip建立
bind 10.233.45.23 需要綁定本機的真實ip,這樣外部才能連接進來
10.redis 密碼設置,每個節點的密碼必須一致
masterauth <yourpassword> 連接主節點密碼
requirepass <yourpassword> 各個節點訪問密碼
11.cluster-config-file nodes.conf 節點信息,自動生成
12.daemonize yes 守護線程模式(后台啟動)
13.關閉保護模式用 於公網訪問
protected-mode no
(3)將文件復制到其他兩台機器上
[hadoop@mastersoft]$ scp -r redis-3.2.9 root@10.1.1.12:/home/hadoop/soft
[hadoop@mastersoft]$ scp -r redis-3.2.9 root@10.1.1.39:/home/hadoop/soft
注:由於是分三台機器(真實的高可用),所以涉及到的端口配置不需要修改 。如果是在同一台機器上搭建的集群屬於偽集群
(4)啟動,先切換到redis的src目錄下分別在三台機器上都執行對應命令,開啟每個端口實例,后便可啟動集群。
[hadoop@mastersrc]$ ./redis-server /home/hadoop/soft/redis-3.2.9/cluster-config/6380/redis.conf & [hadoop@mastersrc]$ ./redis-server /home/hadoop/soft/redis-3.2.9/cluster-config/6381/redis.conf &
執行完后在終端輸入,會看到對應的進程信息,則表示成功啟動
[hadoop@masterbin]$ ps -ef|grep redis hadoop 4046 16759 0 16:00 pts/1 00:00:00 grep redis hadoop 25805 16759 0 11:48 pts/1 00:00:04 ./redis-server 0.0.0.0:6380 [cluster] hadoop 25808 16759 0 11:48 pts/1 00:00:04 ./redis-server 0.0.0.0:6381 [cluster]
(5)創建集群
集群結構:每個節點保存數據和集群信息狀態,每個節點和其他節點連接
1、所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬。
2、節點的fail是通過集群中超過半數的節點檢測失效時才生效。
3、客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可。
4、redis-cluster把所有的物理節點映射到[0-16383]slot上(不一定是平均分配),cluster 負責維護node<->slot<->value。
5、Redis集群預分好16384個桶,當需要在 Redis 集群中放置一個 key-value 時,根據 CRC16(key) mod 16384的值,決定將一個key放到哪個桶中。
容錯性:
容錯性指軟件檢測應用程序所在運行的軟件或硬件中發生的錯誤並從錯誤中恢復的能力,通常可以從系統的可靠性,可用性,可測性的等幾方面來衡量。
- 1 什么時候判斷 master 不可用?
投票機制。投票過程是集群中所有 master 參與,如果半數以上 master 節點與 master節點通信超時(cluster-node-timeout)認為當前 master 節點掛掉
- 2 什么時候整個集群不可用(cluster state: fail)
如果集群任意 master 掛掉,且當前 master 沒有 slave。集群進入fail狀態也可以理解成集群的 Slot 映射 0-16383] 不完整時進入 fail 狀態。如果集群超過半數以上 master 掛掉,無論是否有 slave,集群進入 fail 狀態
分 5.0下的版本,和 5.0 以上的版本安裝
1)5.0以上的版本:
使用redis-cli 創建redis集群(redis5以前的版本集群是依賴 ruby 腳本實現)
啟動了每個端口之后,就直接創建集群:
第一種:直接創建,隨機分配從機。
選項–replicas 1 表示為集群中的每個主節點創建一個從節點
1. [root@mastersrc]# ./redis-5.0.2/src/redis-cli --cluster create --cluster-replicas 1 10.1.1.34:6380 10.1.1.34:6381 10.1.1.12:6380 10.1.1.12:6381 10.1.1.39:6380 10.1.1.39:6381
接着會出現一個選項,直接輸入 yes 既可繼續創建任務
第二種:指定從機
選項–replicas 0 表示先為集群創建不含slaver 的集群。
手動添加slaver(從機)
使用創建時的cluster-master-id 或執行 ./src/redis-cli --cluster check 172.16.71.183:7001 查看運行狀態
掛載slaver
./src/redis-cli --cluster add-node 172.16.71.183:7004 172.16.71.183:7001 --cluster-slave --cluster-master-id ba8415845612eceeb50f89eaa44485a393b58d1a ./src/redis-cli --cluster add-node 172.16.71.183:7005 172.16.71.183:7001 --cluster-slave --cluster-master-id 52aa810b8d3cf6dfcf37fbb3d64805f632d6af91 ./src/redis-cli --cluster add-node 172.16.71.183:7006 172.16.71.183:7001 --cluster-slave --cluster-master-id 18b31f22eccc86ca13bcd992776cd3987b572441
如果創建了集群之后,想要設置密碼,進行一下操作,不需要去修改 redis.conf 配置文件
./redis-cli -c -h bigdata24 -p 6380 config set masterauth <yourpassword> config set requirepass <yourpassword> config rewrite
示例:
./redis-cli -c -h bigdata24 -p 6380
config set masterauth 123 config set requirepass 123 config rewrite
加入了密碼之后,進入到集群時,需要加 -a 選項 ,后面跟上你設置的密碼
集群基本使用;
查看集群狀態:
./redis-5.0.2/src/redis-cli -p 6380 cluster nodes
使用redis-cli 連接集群, 指定 -c 參數
./redis-5.0.2/src/redis-cli -p 6380 -c -a 123
指定連接的主機節點(-h 主機ip, -a redis的密碼(前提要設置密碼,每個節點的密碼必須保持一致))
./redis-5.0.2/src/redis-cli -h id地址 -p 6380 -c
進入集群的一個節點的一些操作: 查看節點信息命令: > cluster info > cluster nodes
示例:
[root@locslhost src]# redis-cli -c -p 6380
127.0.0.1:6380> get aa
->Redirected to slot [2422]located at 127.0.0.1:6381
"222"
127.0.0.1:6381>
上面示例可以看出,客戶端連接加 -c 選項進入到集群中,存儲和提取 key 的時候不斷在 6380和6381 之間跳轉,這個稱為客戶重定向。之所以會客戶端重定向,是因為redis cluster 中的每個Master 節點都會負責一部分的槽(slot),存取的時候都會進行鍵值空間計算定位 key 映射在哪個槽上,如果是映射的槽正好是的當前的master節點負責則直接存取,否則就會跳轉到其他master節點負責的槽中存取。
-----------------------------------------------------------------------
2)5.0以下的版本安裝:
安裝ruby、redis
安裝ruby2.3.1版本,建議采用這種方式安裝(網上的其他方式基本都會失敗,親測)
第一步:下載安裝包到對應目錄(wget命令不指定目錄 ,則下載到當前目錄)
[root@masterruby-2.3.1]$ wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
第二步:下載成功后解壓,並切換到解壓后的ruby目錄下執行編譯與安裝:
[root@masterruby-2.3.1]$ ./configure --prefix= [root@masterruby-2.3.1]$ make && make install
第三步:至此2.3.1版本ruby安裝完成,輸入如下命令,驗證ruby是否安裝完成
[root@masterruby-2.3.1]$ ruby -v
第四步:安裝redis
[root@masterruby-2.3.1]$ gem install redis
第五步:開啟集群在Redis的src目錄下執行
[root@mastersrc]# ./redis-trib.rb create --replicas 1 10.1.1.34:6380 10.1.1.34:6381 10.1.1.12:6380 10.1.1.12:6381 10.1.1.39:6380 10.1.1.39:6381
至此集群搭建完成
可跨機器驗證集群
[hadoop@slave2 bin]$ ./redis-cli -c -h 10.1.1.39 -p 6381 10.1.1.39:6381> -c 為集群形式開啟 -h ip -p 端口
查看集群狀態
[root@mastersrc]# ./redis-trib.rb check 127.0.0.1:6380 >>> Performing Cluster Check (using node 127.0.0.1:6380) M: a0d41b839bf4f71cd32249587d9d00d571c2ec05 127.0.0.1:6380 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 0b1fb1ccd3af0a85a75f27b915a96ac832175ee5 10.1.1.12:6380 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: 2b1c67e00dfab99c46c5ad46b5b5af0a1021ce8e 10.1.1.39:6380 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: a62ac61543200fdbfd278f9e80e2105ff11d1780 10.1.1.34:6381 slots: (0 slots) slave replicates 0b1fb1ccd3af0a85a75f27b915a96ac832175ee5 S: 26a7f4214285c39985c9803283f9ac8b39a72ac6 10.1.1.12:6381 slots: (0 slots) slave replicates a0d41b839bf4f71cd32249587d9d00d571c2ec05 S: b0b2ace762a2210070a444cf8c9b6adf2ae585e1 10.1.1.39:6381 slots: (0 slots) slave replicates 2b1c67e00dfab99c46c5ad46b5b5af0a1021ce8e [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.