redis集羣主從切換,jedis客戶端如何自動切換訪問

你們好,我是redis學習的新人,今天寫這篇文章,但願記錄一下最近的學習 其實到如今我也不不知道redis具體能作什麼,大概是緩存,這個暫時無論,先實現我想要的結果。 這邊如何啓動redis不講了,請參考:http://www.runoob.com/redis/redis-tutorial.html redis是支持集羣的,因此須要配置redis集羣,總的來講,將下載的redis文件複製多份, 修改一下配置就能夠實現集羣,我本身的總結: 我把個人實例打了個包,但願對你們有幫助html

主從配置:
主服務器中的設置:
1:修改bind參數:綁定的服務器地址 (本地:127.0.0.1)

從服務器配置
1. 修改bing參數:綁定服務器地址 (注:不必定與主服務器在一塊兒)
2. 修改port參數:端口號 (注:若是在同一個服務器上,端口號不一樣來區分)
3. slaveof參數: 設置主服務器的地址以及端口號(設置master的Host以及Port) [注意:
須要頂格寫,不能有空格]  ]
4. 若是主服務器設置了密碼,從服務器須要修改masterauth參數

配置好了主從服務器(從服務器只讀),嘗試一下,確實能夠實現值的同步git

List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
		JedisShardInfo shard1 = new JedisShardInfo("127.0.0.1", "6379");
		JedisShardInfo shard2 = new JedisShardInfo("127.0.0.1", "6380");
		shards.add(shard1);
		shards.add(shard2);
		
		JedisPoolConfig jpc = new JedisPoolConfig();
		jpc.setMaxIdle(10);
		jpc.setMaxTotal(30);
		jpc.setMaxWaitMillis(3*1000);
		
		ShardedJedisPool sjPool = new ShardedJedisPool(jpc, shards);
		ShardedJedis jedis = sjPool.getResource();
		jedis.set("temp", "heeloworld");
		System.out.println("----"+jedis.get("temp")+"-----");

可是這樣還不夠,畢竟集羣真正做用是一個服務器掛了,其餘的能夠接着用 網上又看到「哨兵」(Redis-Sentinel),詳情請見:http://www.javashuo.com/article/p-vguqgocn-gw.html 所以本身作了一些嘗試,確實能夠實現該功能。redis

1.以前已經準備好了主從服務器多個,每一個裏面添加一個sentinel.conf的文件
2.文件的內容是
####master  sentinel.conf
##sentinel實例之間的通信端口  default 26379
port 36379
####sentinel須要監控的master信息:<mastername> <masterIP> <masterPort> <quorum>.
####<quorum>應該小於集羣中slave的個數,只有當至少<quorum>個sentinel實例提交"master失效" 纔會認爲master爲ODWON("客觀"失效) .
sentinel myid 45e995cdd93d2db1e48d563c8b3a4f69caf03274
##**如下地址是主服務器地址,特別留意:主從切換後,此處的地址會改變喲**
sentinel monitor mymaster 127.0.0.1 6379 1 
sentinel down-after-milliseconds mymaster 1000
sentinel config-epoch mymaster 10

接下來就展現一下個人例子segmentfault

下兩張圖展現的是兩個服務器,一個是6379端口一個是6380端口,
經過info replication命令,能夠從role看出服務器的角色:master(主服務器),slave(從服務器)
再下面兩張是啓動sentinel監聽的畫面,所佔用的端口能夠修改sentinel.conf的port屬性

輸入圖片說明

主從服務器都啓動,讀寫數據都沒有問題

輸入圖片說明

這個時候,將主服務器關閉

輸入圖片說明

這個時候注意從服務器的role從slave變成了master

輸入圖片說明

最後讀取數據也沒有問題,並且獲取數據的服務器地址從6379,變成了6380,
說明咱們的功能實現了,主從切換,客戶端請求也切換到獲取最新的主服務數據

輸入圖片說明

注意:想必你們也注意到個人代碼中的問題,前面我是用的ShardedJedisPool對象請求數據,
可是到後來,代碼裏使用的JedisSentinelPool,爲何會有這樣一個變化,
是由於ShardedJedisPool對象在主從服務器切換以後,就沒法請求到數據了,
可是JedisSentinelPool就能夠,具體原理我也不清楚。
最後,這是個人一點點見解,有不對的地方但願你們能夠提示我,畢竟我瞭解的很少,
在這裏但願大牛能夠給我些指導,在項目中如何使用redis,有沒有實例能夠給我學習學習,謝謝你們!
相關文章
相關標籤/搜索