外网访问redis cluster的大坑
昨天下午3-4點開始一直到夜里12點半,在加上今天上午的兩個半小時算是勉強搞定了。真鬧心啊
首先我用的是oracle oci(云端的計算實例)搭建了一個三臺機器(3主,3從,每一對主從在一臺機器)的redis cluster 集群,redis版本是最新的5…0.7
接下來我描述一下問題的細節
三臺機器A(port: 7001,7002)B(port: 7003,7004), C(port: 7005,7006),在云端要把security list對應的端口7000-7006,17000-17006(redis集群后臺通信用,)打開。
集群創建完畢后,顯示成功。
因為我想在本地測試,所以需要外網訪問redis集群
此處為止注意點
1 redis 配置文件中 把bind取消,然后把保護模式關閉
2 創建集群的時候用外網ip
redis-cli --cluster create 外網Ip:7001 外網Ip:7002 外網Ip:7003 外網Ip:7004 外網Ip:7005
外網Ip:7006 --cluster-replicas
上面是從網上查到的,照做肯定沒問題,如果不做的話是否可以我沒試過(太累了,不試驗了)
奇怪的問題發生了,我在jedis中連接的時候一直報錯 No more cluster attempts left
換了幾次jedis驅動3.1和3.2就是 No more cluster attempts left
這個錯誤,網上也找不到對策,換了2.9的驅動就是time out。后來反復各種調試,無意中發現是7005(master)
連不上,只要在jedis中剔除掉7005 就可以了
繼續調試,把7005停掉,它對應的slave7002(在另一臺機器上)變成了新的master,在啟動7005,7005變成了slave,然后一切都正常了,7005也能連上了。好神奇
繼續調查,把7001(也是一臺master)的reds配置文件和7005對比,發現除了端口號不同,完全一致。其實當時做集群的時候都是按照7001改的,最后無奈又復制了一份7001的配置文件到7005那臺機器。
把端口號改成7000,停掉7005,把7000加入集群,作為7002的slave。一切正常了,停掉7002,7000變成了master。依然正常。
實在是找不到原因了,暫時先記錄下 最后我有兩點疑問 1 我不知道這個問題是不是和外網訪問redis 有關
(等有時間的時候把代碼考到云上去運行下試試)
2 當然redis一般來說肯定是內網訪問,但是如果像我這樣搭建redis
cluster,是不是redis集群間的通信全是走外網?那速度豈不是很慢了,而且會浪費很多帶寬流量
總結
以上是生活随笔為你收集整理的外网访问redis cluster的大坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【unity shader】unity游
- 下一篇: Google Play 上架总结(二)G