redis
集羣安裝
node
環境
redis
版本:
5.0.5
redis
操做系統:
ubuntu 14.04
以上版本或內核
4.2.0-27-generic
以上
ubuntu
ruby:sudo apt-get install ruby
ruby
單節點安裝
下載
http://download.redis.io/releases/redis-5.0.5.tar.gz
app
解壓
tar -xvf redis-5.0.5.tar.gz
測試
編譯安裝
咱們安裝到
opt
下面
ui
sudo mv redis-5.0.5 /opt/redis
spa
給當前用戶賦權
(root
不須要此操做
)
操作系統
sudo chown -R
用戶名
:
用戶組
/opt/redis
線程
進入到
/opt/redis
cd /opt/redis
編譯
make
編譯測試
make test
![]()
配
置redis.confvi redis.conf修改daemonizeno爲daemonizeyes修改最大內存2G(redis的內存爲物理內存的0.75,就是說,物理內存*0.75/節點數)修改#maxmemory爲maxmemory 2147483648修改日誌文件logfile "redis.log"啓動服務:./src/redis-server redis.conf驗證是否啓動:ps -ef|grep reids
測試
./src/redis-cli
set aa 1
get aa
del aa
keys *
到此,咱們單節點redis安裝成功
配置密碼
中止
redis
服務
./src/redis-cli shutdown
配置redis.confvi redis.conf修改#requirepass foobared爲requirepass 123456(密碼123456,能夠本身修改。刪除#)啓動服務:./src/redis-server redis.conf
登錄加-a 指定密碼
./src/redis-cli -a 123456
集羣計劃3主、三從,一共六個節點。生產狀況下,須要6臺主機。最低兩個主機,三個主節點在一個主機,三個從節點在一個主機。本地模擬配置,是一個主機。
規劃主節點端口:700一、700二、7003
從節點端口:700四、700五、7006
sudo mkdir /opt/redis_cluster
sudo mkdir /opt/redis_cluster/
sudo mkdir /opt/redis_cluster/7001
sudo mkdir /opt/redis_cluster/7002
sudo mkdir /opt/redis_cluster/7003
sudo mkdir /opt/redis_cluster/7004
sudo mkdir /opt/redis_cluster/7005
sudo mkdir /opt/redis_cluster/7006
給文件夾賦權
sudo chown -R 用戶名:用戶組 /opt/redis_cluster/
複製redis.conf文件到/opt/redis_cluster/7001
sudo cp /opt/redis/redis.conf /opt/redis_cluster/7001/
配置redis.conf文件
vi /opt/redis_cluster/7001/redis.conf
修改:
端口
port 7001啓用集羣cluster-enabled yes集羣節點文件cluster-config-file nodes.conf集羣超時設置cluster-node-timeout 5000開啓aof模式appendonly yes修改線程問家pidfile /var/run/redis_7001.pid配置訪問密碼
requirepass 123456
配置訪問主節點 的密碼
masterauth 123456
後臺運行
daemonize yes
數據存放目錄
dir /opt/redis_cluster/7001
註釋bind
#bind 127.0.0.1
修改最大內存2G(redis的內存爲物理內存的0.75,就是說,物理內存*0.75/節點數)修改#maxmemory爲maxmemory 2147483648修改日誌保存文件logfile "redis.log"
把/opt/redis_cluster/7001/redis.conf複製到/opt/redis_cluster/700二、/opt/redis_cluster/700三、/opt/redis_cluster/700四、/opt/redis_cluster/700五、/opt/redis_cluster/7006下
cp /opt/redis_cluster/7001/redis.conf /opt/redis_cluster/7002/
cp /opt/redis_cluster/7001/redis.conf /opt/redis_cluster/7003/
cp /opt/redis_cluster/7001/redis.conf /opt/redis_cluster/7004
cp /opt/redis_cluster/7001/redis.conf /opt/redis_cluster/7005
cp /opt/redis_cluster/7001/redis.conf /opt/redis_cluster/7006
修改端口、和線程文件
sed -i "s/7001/7002/g" /opt/redis_cluster/7002/redis.conf
sed -i "s/7001/7003/g" /opt/redis_cluster/7003/redis.conf
sed -i "s/7001/7004/g" /opt/redis_cluster/7004/redis.conf
sed -i "s/7001/7005/g" /opt/redis_cluster/7005/redis.conf
sed -i "s/7001/7006/g" /opt/redis_cluster/7006/redis.conf
啓 動redis
cd /opt/redis_cluster/7001
/opt/redis/src/redis-server redis.conf
cd /opt/redis_cluster/7002
/opt/redis/src/redis-server redis.conf
cd /opt/redis_cluster/7003
/opt/redis/src/redis-server redis.conf
cd /opt/redis_cluster/7004
/opt/redis/src/redis-server redis.conf
cd /opt/redis_cluster/7005
/opt/redis/src/redis-server redis.conf
cd /opt/redis_cluster/7006
/opt/redis/src/redis-server redis.conf
![]()
![]()
![]()
查看啓動節點ps -ef|grep redis建立集羣/opt/redis/src/redis-cli --cluster create 192.168.3.153:7001 192.168.3.153:7002 192.168.3.153:7003 --cluster-replicas 0 -a 123456配置集羣主從複製查看集羣狀態/opt/redis/src/redis-cli -c -p 7001 -a 123456 cluster nodes動態添加節點添加節點/opt/redis/src/redis-cli -c -a 123456 -p 7001 cluster meet 192.168.3.153 7004/opt/redis/src/redis-cli -c -a 123456 -p 7001 cluster meet 192.168.3.153 7005/opt/redis/src/redis-cli -c -a 123456 -p 7001 cluster meet 192.168.3.153 7006設置7004爲7001的節點/opt/redis/src/redis-cli -c -a 123456 -p 7004 cluster REPLICATEbd88b8e1a32341b90eb0174cc13f227110d4cd45(是主節點的編號,須要自行修改)設置7005爲7002的節點/opt/redis/src/redis-cli -c -a 123456 -p 7005 cluster REPLICATE bd88b8e1a32341b90eb0174cc13f227110d4cd45(是主節點的編號,須要自行修改)設置7006爲7003的節點/opt/redis/src/redis-cli -c -a 123456 -p 7006 cluster REPLICATE b7716a9a899e4b12a2f368e2e07f0c97fdefa248(是主節點的編號,須要自行修改)查看集羣信息集羣搭建完畢
驗證
登錄:
/opt/redis$ src/redis-cli -c -a 123456 -p 7001
set aa 1
set bb 1
![]()
![]()
咱們發現aa寫在7001節點上,bb寫在7002節點上中止7001節點shutdown咱們發現aa還能夠取到1,可是在7004個節點上查看集羣狀態cluster nodes咱們發現7001已經disconnected了,7004是master節點啓動7001/opt/redis/src/redis-server /opt/redis_cluster/7001/redis.conf查看集羣狀態我
們看到7001已經恢復,變爲slave節點咱們的高可用配置成功。任何一個節點掛了不受影響。可是若是是主從都掛了,還會損失數據,這個損失部署不是平均1/3直接,是根據key的hash分佈來講的。
哨兵模式
哨兵模式是對於單個主歷來說的。安裝一個主節點、兩個從節點、三個哨兵主節點:8001從節點:8002、8003三個哨兵:12001、12002、12003、
安裝
創建
redis
文件夾
sudo mkdir /opt/sentinel/redis8001
sudo mkdir /opt/sentinel/redis8002
sudo mkdir /opt/sentinel/redis8003
創建
sentinel
文件夾
sudo mkdir /opt/sentinel/sentinel12001
sudo mkdir /opt/sentinel/sentinel12002
sudo mkdir /opt/sentinel/sentinel12003
cp
/opt/redis/sentinel.conf
/opt/sentinel/sentinel12001
cp
/opt/redis/sentinel.conf
/opt/sentinel/sentinel12002
cp
/opt/redis/sentinel.conf
/opt/sentinel/sentinel12003
修改權限
(root
用戶不須要
)
sudo chown -R
用戶名
:
用戶組
/opt/sentinel/
配置
redis
節點
配置
redis8001
節點
vi /opt/sentinel/redis8001/redis.conf
註釋
bind
#bind 127.0.0.1
修改端口
port 8001
在後臺執行
daemonize yes
數據存放目錄
dir /opt/sentinel/redis8001
主節點密碼masterauth 123456本節點密碼requirepass 123456修改最大內存2G(redis的內存爲物理內存的0.75,就是說,物理內存*0.75/節點數)修改#maxmemory爲maxmemory 2147483648修改日誌文件logfile "redis.log"
配置
redis8002
節點
cp /opt/sentinel/redis8001/redis.conf /opt/sentinel/redis8002/redis.conf
vi /opt/sentinel/redis8002/redis.conf
註釋
bind
#bind 127.0.0.1
修改端口
port 8002
在後臺執行
daemonize yes
數據存放目錄
dir /opt/sentinel/redis8002
配置複製節點replicaof 192.168.3.153 8001主節點密碼masterauth 123456本節點密碼requirepass 123456
配置
redis8003
節點
cp /opt/sentinel/redis8001/redis.conf /opt/sentinel/redis8003/redis.conf
vi /opt/sentinel/redis8002/redi3.conf
註釋
bind
#bind 127.0.0.1
修改端口
port 8003
在後臺執行
daemonize yes
數據存放目錄
dir /opt/sentinel/redis8003
配置複製節點replicaof 192.168.3.153 8001主節點密碼masterauth 123456本節點密碼requirepass 123456啓動redis節點/opt/redis/src/redis-server /opt/sentinel/redis8001/redis.conf/opt/redis/src/redis-server /opt/sentinel/redis8002/redis.conf/opt/redis/src/redis-server /opt/sentinel/redis8003/redis.conf
配置
sentinel
配置
sentinel12001
節點
vi /opt/sentinel/sentinel12001/sentinel.conf
修改端口
port 12001
後臺運行
daemonize yes
進程文件
pidfile /var/run/redis-sentinel-12001.pid
監控主節點名稱,當有兩個
sentinel
發現主節點掛了,切換節點。
sentinel monitor mymaster 192.168.3.153 8001 2sentinel心跳每隔1分鐘發送心跳sentinel down-after-milliseconds mymaster 60000當failover開始後,在此時間內仍然沒有觸發任何failover操做,當前sentinel 將會認爲這次failoer失敗sentinel failover-timeout mymaster 180000當新master產生時,同時進行slaveof到新master並進行同步複製的slave個數,也就是同時幾個slave進行同步。由於在salve執行salveof與新master同步時,將會終止客戶端請求,所以這個值須要權衡。此值較大,意味着「集羣」終止客戶端請求的時間總和和較大,此值較小,意味着「集羣」在故障轉移期間,多個salve向客戶端提供服務時仍然使用舊數據sentinel parallel-syncs mymaster 1配置sentinel 12002節點cp /opt/sentinel/sentinel12001/sentinel.conf /opt/sentinel/sentinel12002/sentinel.conf把端口改成12002sed -i 's/12001/12002/g' /opt/sentinel/sentinel12002/sentinel.conf配置sentinel 12003節點cp /opt/sentinel/sentinel12001/sentinel.conf /opt/sentinel/sentinel12003/sentinel.conf把端口改成12003sed -i 's/12001/12003/g' /opt/sentinel/sentinel12003/sentinel.conf啓動哨兵節點/opt/redis/src/redis-sentinel /opt/sentinel/sentinel12001/sentinel.conf/opt/redis/src/redis-sentinel /opt/sentinel/sentinel12002/sentinel.conf/opt/redis/src/redis-sentinel /opt/sentinel/sentinel12003/sentinel.conf查看哨兵ps -ef|grep sentinel
![]()
![]()
![]()
驗證登錄主節點/opt/redis/src/redis-cli -p 8001 -a 123456設置aa等於1set aa 1關閉主節點shutdown退出exit登錄8002節點/opt/redis/src/redis-cli -p 8002 -a 123456查看複製節點信息info replication當前節點是從節點登錄8003節點/opt/redis/src/redis-cli -p 8003 -a 123456查看複製節點信息info replication8003節點是主節點設置aa爲3set aa 3get aa啓
動8001節點/opt/redis/src/redis-server /opt/sentinel/redis8001/redis.conf查看ps -ef|grep redis|grep 800登錄8001節點/opt/redis/src/redis-cli -p 8001 -a 123456查看複製節點info replication查
看aa的值爲3,剛纔在8003上給aa賦值3已經同步過來了
安裝中問題
Increased maximum number of open files to 10032 (it was originally set to 1024).
解決辦法
#查看系統限制
ulimit -a
#設置「open files」數量
ulimit -n 10032