解決:連線遠端redis服務失敗(在linux部署)
問題描述:
我在遠端linux上部署了redis服務並在linux本地連線成功,但是在遠端windows上用Jedis(或redis客戶端)連線失敗。
程式碼如下:
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.*.*", 6379);
System.out.println(jedis.ping());
}
錯誤日誌如下(*是為了隱藏真實資訊)
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host 192.168.*.*:6379
at redis.clients.jedis.Connection.connect(Connection.java:204)
at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:100)
at redis.clients.jedis.Connection.sendCommand(Connection.java:125)
at redis.clients.jedis.Connection.sendCommand(Connection.java:120)
at redis.clients.jedis.BinaryClient.ping(BinaryClient.java:113)
at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:188)
at com.term.TestPing.main(TestPing.java:8)
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at redis.clients.jedis.Connection.connect(Connection.java:181)
... 6 more
排錯
- 確定redis啟動成功
[root@localhost bin]# ps -ef|grep redis
root 3257 1 0 10:31 ? 00:00:00 redis-server 127.0.0.1:6379
root 3321 3161 0 10:32 pts/0 00:00:00 grep --color=auto redis
- 確定6379埠號向外開放
[root@localhost bin]# firewall-cmd --list-ports
8080/tcp 9090/tcp 8848/tcp 6379/tcp
- 確定能夠ping通遠端ip
PS C:\Users\Termlis> ping 192.168.*.*
正在 Ping 192.168.31.150 具有 32 位元組的資料:
來自 192.168.31.150 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.31.150 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.31.150 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.31.150 的回覆: 位元組=32 時間<1ms TTL=64
192.168.31.150 的 Ping 統計資訊:
資料包: 已傳送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
最短 = 0ms,最長 = 0ms,平均 = 0ms
通過排錯發現ip能夠ping通,埠號也是開放的,redis服務也正常執行中。(如果有人排錯結果跟我不一樣,請解決上述問題,保證以上三個條件)
但是可以看到在我們檢視redis程式的時候他指定了127.0.0.1本地訪問!
(00:00:00 redis-server 127.0.0.1:6379)
檢視redis.conf(vim命令)
發現如下配置及註釋:
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT OUT THE FOLLOWING LINE.
# 意識就是如果你想遠端訪問,請註釋下一行配置
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1
# Protected mode is a layer of security protection, in order to avoid that
# Redis instances left open on the internet are accessed and exploited.
#
# When protected mode is on and if:
#
# 1) The server is not binding explicitly to a set of addresses using the
# "bind" directive.
# 2) No password is configured.
#
# The server only accepts connections from clients connecting from the
# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
# sockets.
#
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
# 上面一大堆,反正就是說開啟了protected-mode就不能遠端訪問,我們得把它關上。
protected-mode yes
根據上面註釋的內容,我們想要遠端訪問redis服務,需要將bind 127.0.0.1配置註釋。
然後將protected-mode yes設定為no
- 註釋bind 127.0.0.1
- protected-mode yes設定為no
- 儲存並退出
重啟Redis再次測試
linux本地連線成功
127.0.0.1:6379> ping
PONG
遠端jedis連線成功:
//java 程式執行結果
PONG
Process finished with exit code 0
Is over!
相關文章
- 遠端連線 Mysql 失敗的解決方法MySql
- VSCode 遠端連線失敗VSCode
- 關於 SQLyog 遠端連線 Linux 系統的 MySQL 失敗的解決方法LinuxMySql
- linux配置mysql資料庫遠端連線失敗LinuxMySql資料庫
- 資料庫遠端連線失敗資料庫
- 在新裝Homestead環境下,Redis連線失敗的解決辦法。Redis
- Linux下安裝redis資料庫服務,並開啟遠端連線LinuxRedis資料庫
- linux安裝redis和遠端連線LinuxRedis
- Windows遠端連線Docker服務WindowsDocker
- 解決使用SSH連線Linux伺服器時連線失敗的故障Linux伺服器
- 遠端桌面連線失敗 批次管理雲伺服器伺服器
- windows10系統下遠端桌面連線失敗客戶端無法建立與遠端計算機的連線如何解決Windows客戶端計算機
- win10連線遠端桌面失敗提示“出現身份驗證錯誤”怎麼解決Win10
- vnc遠端連線linux,vnc遠端連線linux的具體操作VNCLinux
- vnc遠端連線linux,vnc遠端連線linux的具體方法。VNCLinux
- Linux 連線遠端桌面Linux
- 在容器外部連線kafka失敗Kafka
- zblog應用中心連線失敗的解決方案
- linux 資料庫localhostl連線成功127.0.0.1連線失敗Linux資料庫localhost127.0.0.1
- telnet23埠連線失敗怎麼處理win10_win10系統telnet在埠23連線失敗解決方法Win10
- win10 如何開啟遠端服務_win10如何開啟遠端連線服務Win10
- 解決 Windows 下 Homestead 建立軟連線失敗問題Windows
- 資料庫連線失敗的原因及解決方法資料庫
- 無界滑鼠MOUSE WITHOUT BORDERS連線失敗解決方法
- redis lRem 刪除失敗?(已解決)RedisREM
- 解決linux rz傳輸失敗Linux
- 無法遠端連線mysql怎麼解決MySql
- mysql遠端連線不上怎麼解決?MySql
- 遠端連線Linux相關操作Linux
- 使用免費的Oracle雲服務-遠端連線ATPOracle
- Win Server 2019遠端桌面服務部署Server
- Kettle8.2連線Oracle資料庫失敗解決方法Oracle資料庫
- Linux下 SSH遠端管理服務Linux
- Linux上Redis使用視覺化工具RedisDesktopManager遠端連線不上LinuxRedis視覺化
- navicat無法遠端連線mysql的解決方法MySql
- 阿里雲伺服器遠端連線redis阿里伺服器Redis
- mysql連線失敗:ArgumentException: 指定的值在“SslProtocolType”MySqlExceptionProtocol
- ubuntu18.04開啟ssh服務和ssh遠端連線Ubuntu