redis sentinel哨兵模式集群搭建教程


1.環境說明

我們將使用192.168.220.128、192.168.220.129兩台機器搭建sentinel交叉主從為例

當前我們已在192.168.220.128上按redis安裝教程安裝了redis,192.168.220.129上沒有安裝

 

2. 配置128上的slave

cd /usr/myapp/redis-2.8.17/conf   #進入配置文件所在目錄
cp redis.conf redis-6379.conf     #128上的master所用配置文件
cp redis.conf redis-6380.conf     #128上的slave所用配置文件
                                  #配置128上的6380從屬129的6379端口
cat >> redis-6380.conf << EOF
slaveof 192.168.220.129 6379
EOF

 

3. 配置128上的sentinel

2.1修改conf/redis-6379.conf和conf/redis-6380.conf,配置masterauth字段值

2.2修改conf/sentinel.conf,配置以下字段的值

port 26379
sentinel announce-ip 192.168.220.128
dir /usr/myapp/redis-2.8.17/data

sentinel monitor mymaster1 192.168.220.128 6379 2
sentinel down-after-milliseconds mymaster1 30000
sentinel parallel-syncs mymaster1 2
sentinel failover-timeout mymaster1 180000
sentinel auth-pass mymaster1 yourpasswd

sentinel monitor mymaster2 192.168.220.129 6379 2
sentinel down-after-milliseconds mymaster2 30000
sentinel parallel-syncs mymaster2 2
sentinel failover-timeout mymaster2 180000
sentinel auth-pass mymaster2 yourpasswd

mymaster1和mymaster2可理解為后邊master的別名,如果還有其他master類似地添加上即可。

2.3為了方便把sentinel啟動腳本寫到adm目錄下

cd adm

cat > start_sentinel << EOF
../bin/redis-sentinel ../conf/sentinel.conf
EOF

 

4. 在129部署redis

3.1將128上的redis打包發送到129上

tar -cf redis.tar redis-2.8.17
scp redis.tar root@192.168.220.129:/usr/myapp

 

 3.2修改配置文件中的ip地址

修改conf/redis-6379.conf和conf/redis-6380.conf,將bind的IP修改為本機網卡IP:

修改conf/redis-6380.conf中的slaveof,將129的6380配置為從屬128的6379

修改conf/sentinel.conf,將sentinel announce-ip值修改為本機IP

 

5. 啟動集群

到128、129和130三台機器redis的adm文件夾下分別執行./start_redis和./start_sentinel,啟動redis和sentinel服務即可。

redis是數據庫服務,sentinel相當於哨兵作用,兩者相互獨立;sentinel監視redis服務如果sentinel查看到自己參與管理的master停止,則會與其他參與管理的sentinel共同商量,從原master下屬的slave中選出一個來擔任新的master。

如果redis服務停止之前是master,當其重新啟動后不再是master而是變成各sentinel新選舉出來的master的slave。

master和slave的區別是master可讀寫,slave只可讀;其實通過配置slave也可讀寫,所以最為嚴謹的說法是master和slave的區別是,slave同步master的操作而master不會同步slave的操作slave之間也不會互相同步操作。

 

6. 應用連接集群

在哨兵模式中,應用應該往主里寫數據但是應用是不知道哪個是主那個是從的,一個個去連接然后查看是主是從的做法也是不夠合理的。

在實際使用中是通過sentinel來獲取哪個是主哪個是從的。

Set sentinels = new HashSet();  
sentinels.add(new HostAndPort("192.168.220.128", 26379).toString());  
sentinels.add(new HostAndPort("192.168.220.129", 26379).toString());  
sentinels.add(new HostAndPort("192.168.220.130", 26379).toString());  
JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels);  
Jedis master = sentinelPool.getResource();  
master.set("name","張三"); 
String value = master2.get("name");

 

參考:

http://blog.csdn.net/ownfire/article/details/51546543

https://segmentfault.com/a/1190000002680804

http://blog.csdn.net/xianymo/article/details/46412271


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM