天天看點

[Redis基礎]-- Redis的HA搭建和主從複制搭建以及測試

Linux Redis主從複制\切換安裝、測試
軟體版本:redis-3.0.7,必須使用該穩定版本否則會錯各種問題

基本安裝步驟:
Redis安裝(三個節點)
安裝相關編譯的依賴包
# yum -y install gcc make

安裝redis(三個節點)
軟體上傳到/opt目錄
# cd /opt/
# tar -zxvf redis-3.0.7.tar.gz
# mv redis-3.0.7/ redis/
# cd redis/
# make && make install一、配置192.168.1.101(主機名:node1)的副本集(192.168.1.102--->主機名:node2,192.168.1.103-->主機名:node3)
 
1、修改192.168.1.102 、192.168.1.103的redis.cong檔案,儲存并且退出
   slaveof node1 6379
2、啟動192.168.1.101 ,再啟動192.168.1.102、192.168.1.103
   #./src/redis-server redis.conf
3、測試是否正常
   進入node1用戶端進行插入資料:
   #./redis-cli 6379
   
二、sentinel配置三台機器的redis叢集
1、叢集節點:
節點1:192.168.1.101  目錄----》/opt/soft/master-redis/redis
節點2:192.168.1.102  目錄----》/opt/soft/slave-redis/redis
節點3:192.168.1.103  目錄----》/opt/soft/slave-redis/redis
 
2、修改192.168.1.101節點上的檔案
   vi /redis/sentinel.conf
   内容如下:
   port 26379                                       ----##sentinel執行個體之間的通訊端口
   sentinel monitor mymaster node1 6379 2          ---mymaster是主節點名稱,node1是主節點主機名,6379是主節點端口,
    ---"2"是當有兩個sentinel執行個體同時檢測到redis異常時,才會有反應
   sentinel down-after-milliseconds mymaster 60000 ---心跳時間60秒      
   sentinel failover-timeout mymaster 180000             ---故障轉移時間180秒  
   sentinel parallel-syncs mymaster 2                           ---主節點對應2個slave從節點
 
3、發送sentinel.conf 到192.168.1.102 、192.168.1.102上
4、啟動sentinel;先在node1上啟動---》再啟動node2和node3的sentnel
    #./src/redis-sentinel sentinel.conf &
5、啟動redis服務端指令:
#/opt/soft/slave-redis/redis/src/redis-server /opt/soft/slave-redis/redis/redis.conf &
   停止服務指令:/opt/soft/maste-redis/redis/src/redis-cli shutdown
6、測試主從切換架構
 啟動redis後,主節點是node1,當停止node1的服務後,再啟動node2的redis服務,會發現node2變成了master
 Jedis API通路時,必須通路redis master才能獲得結果
 
import redis.clients.jedis.Jedis;
import java.util.Random;
/**
 * Document:本類作用---->測試連結redis,副本集測試、以及主從切換測試
 * 當主挂了以後,從節點之一馬上更新為主節點
 * User: yangjf
 * Date: 2016072016/7/315:26
 */
public class ConnectRedisTest {
    public static void main(String[] args) {
        Jedis jedis=new Jedis("node2",6379);
//        jedis.auth("test_redis"); 如果是redis-3.2.1版本,則需要該認證
        String keynode1=String.valueOf(new Random().nextInt(236));
        String keynode2=String.valueOf(new Random().nextInt(5645));
        jedis.set(keynode1,keynode2);
        String value=jedis.get(keynode1);
        System.out.println("node2結果是:"+value);
        Jedis jedis2=new Jedis("node1",6379);
        System.out.println("node1結果是:"+jedis2.get(keynode1));
        Jedis jedis3=new Jedis("node3",6379);
        System.out.println("node3結果是:"+jedis3.get(keynode1));
    }
}
 
7、停止服務:需要先停止sentinel,再停止redis服務      

繼續閱讀