主庫宕機,從庫會被自動選舉為主庫master,並繼承原主庫的哈希槽,當master恢復,會成為現主庫的從庫,且同步宕機期間的數據
若集群創建出錯
step1:關服務
./redis-cli -h fdv-web02.reda -p 7000 -a reda2019 shutdown
step2:刪除rdb數據文件,nodes-****.conf
rm -rf dump.rdb nodes-****.conf
redis-5.0.5單機版安裝
Step1: 安裝依賴包make,gcc
yum -y install make gcc
step2:使用rz(lrzsz) 上傳redis-5.0.5.tar.gz到/apps/applications/software目錄http://download.redis.io/releases/redis-5.0.3.tar.gz
Step3:tar解包redis-5.0.5.tar.gz,刪除tar包,並cd進入
tar -xf redis-5.0.5.tar.gz
rm -rf redis-5.0.5.tar.gz //刪除tar包
cd redis-5.0.5
Step4:編譯redis
make //編譯
make install PREFIX=/apps/applications/software/redis //安裝
mkdir /apps/applications/software/redis/{conf,log,data}
step5:配置/etc/security/limits.conf 文件添加
* - nofile 10032
* soft nofile 65536
* hard nofile 65536
step6:准備redis配置文件
cp /apps/applications/software/redis-5.0.5/redis.conf apps/applications/software/redis/conf/redis-7000.conf
編輯redis-7000.conf
詳解:(進入文件后輸入/並在其后寫入關鍵字)
pidfile /apps/applications/software/redis/data/redis-7000.pid //pid存放路徑
logfile /apps/applications/software/redis/log/redis-7000.log //redis日志文件存放路徑
port 7000 //redis端口
bind econ-web01.reda //主機名
dbfilename dump-7000.rdb //redis數據文件名
dir /apps/applications/software/redis/data //redis數據庫數據文件rdb文件放置的路徑
cluster-config-file /apps/applications/software/redis/data/nodes-7000.conf //集群信息存放文件
cluster-enabled yes //啟用集群
clster-node-timeout 5000 //節點超時時間,一直最好
protected-mode no //關閉redis保護模式
daemonize yes //開啟守護進程模式
Step7:復制redir-7000.conf到redir-7001.conf
cd /apps/applications/software/redis/conf/
cp redis-7000.conf redis-7001.conf
Step8:將redis-7001.conf配置文件的7000批量更改為7001
vim redis-7001.conf
輸入:
:% s/7000/7001/g
其他兩台操作相同,但是記得修改port和bind
Step9:編寫redis啟動腳本和停服務腳本
cd /apps/applications/software/redis
啟動腳本start.sh:
#!/bin/bash
export BASH_HOME=$HOME
$BASH_HOME/software/redis/bin/redis-server $BASH_HOME/software/redis/conf/redis-7000.conf > $BASH_HOME/software/redis/log/redis-7000.log &
$BASH_HOME/software/redis/bin/redis-server $BASH_HOME/software/redis/conf/redis-7001.conf > $BASH_HOME/software/redis/log/redis-7001.log &
停止腳本stop.sh:
#!/bin/bash
export BASH_HOME=$HOME
$BASH_HOME/software/redis/bin/./redis-cli -h fdv-web02.reda -p 7000 -a reda2019 shutdown
$BASH_HOME/software/redis/bin/./redis-cli -h fdv-web02.reda -p 7001 -a reda2019 shutdown
chmod +x start_all.sh stop_all.sh #賦予x權限,變成可執行腳本
1、在 redis5 之后,redis cluster 的搭建不在需要默認的ruby腳本,使用 redis-cli 命令即可完成搭建
2、創建集群的這些redis實例中都必須是空的
3、在一個 redis 的集群中默認存在 16384 個哈希槽,這 16384 個哈希槽會默認分配給集群中的主節點
4、增加一個主節點,就意味着要從原來的主節點中移動部分哈希槽給新的主節點
5、刪除一個主節點,就需要把該主節點分配到的哈希槽歸還給別的主節點
6、在主節點之間移動哈希槽不需要停止操作,因此對集群沒多大影響
7、一個集群最好有奇數個主節點
8、集群創建過程中涉及到的命令
集群創建:./redis-cli --cluster create
ip:port ip:port
ip:port ip:port
ip:port ip:port --cluster-replicas 1 [-a 密碼] [--cluster-replicas 1 表示每個主節點下有一個從節點]
添加一個主節點:
./redis-cli --cluster add-node 新ip:port 集群任一ip:port
添加一個節點作為另外一個節點的從節點:
./redis-cli --cluster add-node 新ip:port 集群任一ip:port --cluster-slave
刪除一個節點 :
./redis-cli --cluster del-node 集群任一ip:port 節點id
連接到集群:
./redis-cli -c -p 訪問的端口 -h 訪問的機器 -a 密碼
查看集群中的節點:
./redis-cli -p 7000 cluster nodes
./redis-cli --cluster check 集群ip:端口 -a 密碼
./redis-cli --cluster info 集群ip:端口 -a 密碼
集群中的每個redis節點需要放行2個端口的訪問:
正常的客戶端通訊端口,比如6379
集群總線端口,總是 客戶端通訊接口+10000,比如:16379,該端口主要是 集群總線進行故障檢測、配置更新、故障轉移等操作
如果redis集群中的某個主節點和與之相關的所有從節點都宕機了,那么redis集群將無法提供服務,因為我們不能再提供 這個master node 節點上的 哈希槽。
1.redis 集群不保證強一致性,這意味着在某些時候可能丟失某些寫數據。
|- 因為集群中從節點的復制是異步的。
|- redis 集群在絕對需要時也支持同步寫入,但是這也不能保證完全的強一致性。
2.配置redis集群的最小配置文件如下:
3.cluster-config-file 這個配置中指定的 配置文件 由redis自動維護,我們自己不要隨意修改。這個文件有redis集群實例在啟動時生成
4.由於本地機器不夠,因此可在一台電腦上進行搭建,以不同的端口進行區分。
redis集群配置清單
********************************************************
創建集群
1、集群創建命令
redis-cli --cluster create host1:port1 ... hostN:portN --cluster-replicas 一個主 的從個數
2、集群創建(3主3從-注意節點的順序)
可以看到:16384個哈希槽平均分配給了3個主節點,從節點沒有分配哈希槽。
3、向集群中設置值測試一下
-c 表示的是連接集群.
從上圖可以看到,我們連接的是 7001 端口,但是設置值的時候,由於key(cluster)對應的哈希槽的值是14041,所以重定向到了 7003 端口上。
動態向集群中添加一個主節點並分片
添加節點命令:redis-cli --cluster add-node 新節點ip:新節點port 集群中以存在的節點ip:集群中已存在的節點port
分片命令:redis-cli --cluster reshard 需要分片的節點ip:需要分片的節點端口
注意:此時該節點只是作為主節點添加到了集群中,但是沒有進行分片,是不可存儲數據的,如果要存儲數據,需要進行分片操作。
動態向集群中添加一個從節點
/usr/local/redis/redis-5.0.3/src/redis-cli --cluster add-node 新節點ip:新節點port 集群中以存在的節點ip:集群中已存在的節點port --cluster-slave
動態刪除集群中一個從節點
/usr/local/redis/redis-5.0.3/src/redis-cli --cluster del-node 集群中以存在的節點ip:集群中已存在的節點 所要刪除的redis服務器id
動態刪除集群中一個主節點
step1:歸還槽
step2:刪除節點
命令: /usr/local/redis/redis-5.0.3/src/redis-cli --cluster del-node 集群中以存在的節點ip:集群中已存在的節點 所要刪除的redis服務器id