Redis安裝部署
redis安裝
1.拷貝redis-5.0.8.tar.gz到伺服器 /opt
2.解壓縮安裝包
tar -zxvf redis-5.0.8.tar.gz
3.安裝c語言環境
yum install gcc-c++ -y
#或者
yum install gcc gcc-c++ openssl* readline* ncurses* zlib* libxml* libjpeg* libpng* libxslt* libtool* -y
4.基本的環境安裝
make
make install
5.到Redis的預設安裝路徑
cd /usr/local/bin
6.設定後臺啟動的配置檔案
mkdir myconfig
cp /opt/redis-5.0.8/redis.conf /usr/local/bin/myconfig
cd myconfig
7.Redis預設不是後臺啟動的,修改配置檔案
vim redis.conf
:wq #退出並儲存
cd ..
8.通過自己的配置檔案啟動Redis服務
redis-server myconfig/redis.conf
9.使用redis-cli進行連線測試
redis-cli -h 127.0.0.1 -p 6379
10.檢視Redis的程序是否開啟
ps -ef|grep redis
11.防火牆開放6379埠
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
#知識點 lsof -i命令檢視開放的埠
12.如何關閉Redis服務
shutdow
redis叢集安裝
本次安裝會使用3臺伺服器,每臺伺服器上搭載3個redis例項,一主二從,按照上面的方式在另外兩臺安裝redis,myconfig中的配置檔案可以跳過。叢集部署,需要另外配置9個配置檔案。這裡一個配置檔案為例,其他類同
地址清單如下:
Master 1.IP:102.102.104.117 Port:7001
Master 2.IP:102.102.104.121 Port:7002
Master 3.IP:102.102.104.123 Port:7003
Slave 4.IP:102.102.104.117 Port:6001
Slave 5.IP:102.102.104.121 Port:6002
Slave 6.IP:102.102.104.123 Port:6003
Slave 7.IP:102.102.104.117 Port:6004
Slave 8.IP:102.102.104.121 Port:6005
Slave 9.IP:102.102.104.123 Port:6006
以IP:102.102.104.117為例,建立資料夾
cd /usr/local/bin
mkdir redis-cluster
mkdir redis-cluster/7001
mkdir redis-cluster/6001
mkdir redis-cluster/6004
以7001下的配置檔案為例:
先拷貝一份初始配置:
cp /opt/redis-5.0.8/redis.conf /usr/local/bin/redis-cluster/7001/redis.conf
然後按下方內容進行修改
bind 0.0.0.0
port 7001
daemonize yes //redis後臺執行
pidfile /var/run/redis_7001.pid
logfile /usr/local/bin/redis-cluster/7001/7001.log
dir /usr/local/bin/redis-cluster/7001
appendonly yes //aof日誌開啟 有需要就開啟,它會每次寫操作都記錄
cluster-enabled yes //開啟叢集 把註釋#去掉
cluster-config-file nodes_7001.conf //叢集的配置 配置檔案首次啟動自動生成 7000,7001,7002
cluster-node-timeout 15000 //請求超時 預設15秒,可自行設定
到對應伺服器啟動各節點伺服器
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/7001/redis.conf
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/6001/redis.conf
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/6004/redis.conf
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/7002/redis.conf
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/6002/redis.conf
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/6005/redis.conf
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/7003/redis.conf
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/6003/redis.conf
/usr/local/bin/redis-server /usr/local/bin/redis-cluster/6006/redis.conf
建立叢集
記得先到各伺服器開放9個防火牆埠
102.102.104.117上輸入下面命令
/usr/local/bin/redis-cli -p 7001 --cluster create 102.102.104.117:7001 102.102.104.121:7002 102.102.104.123:7003 102.102.104.117:6001 102.102.104.121:6002 102.102.104.123:6003 102.102.104.117:6004 102.102.104.121:6005 102.102.104.123:6006 --cluster-replicas 2
--cluster-replicas 2表示一個master待兩個slave
等待叢集搭建
成功了d
叢集驗證
/usr/local/bin/redis-cli -h 102.102.104.117 -c -p 7001
進入客戶端後, 通過cluster nodes命令檢視 叢集狀態:
我們存入test資料, 切換節點檢視, 測試通過.大功告成:
info replication也可以看主從關係,還有cluster info指令可以看相關資訊
簡單說一下原理
redis cluster在設計的時候,就考慮到了去中心化,去中介軟體,也就是說,叢集中的每個節點都是平等的關係,都是對等的,每個節點都儲存各自的資料和整個叢集的狀態。每個節點都和其他所有節點連線,而且這些連線保持活躍,這樣就保證了我們只需要連線叢集中的任意一個節點,就可以獲取到其他節點的資料。
Redis 叢集沒有並使用傳統的一致性雜湊來分配資料,而是採用另外一種叫做雜湊槽 (hash slot)
的方式來分配的。redis cluster 預設分配了 16384 個slot,當我們set一個key 時,會用CRC16
演算法來取模得到所屬的slot
,然後將這個key 分到雜湊槽區間的節點上,具體演算法就是:CRC16(key) % 16384。所以我們在測試的時候看到set 和 get 的時候,直接跳轉到了7000埠的節點。
Redis 叢集會把資料存在一個 master 節點,然後在這個 master 和其對應的salve 之間進行資料同步。當讀取資料時,也根據一致性雜湊演算法到對應的 master 節點獲取資料。只有當一個master 掛掉之後,才會啟動一個對應的 salve 節點,充當 master 。
需要注意的是:必須要3個或以上
的主節點,否則在建立叢集時會失敗,並且當存活的主節點數小於總節點數的一半時,整個叢集就無法提供服務了。