阿里雲部署Redis服務器遠程連接問題


昨天在阿里雲免費領了一個月的雲服務器,就着最近學的SpringBoot,准備做一個SpringBoot與Redis的整合。

因為以前用的Redis都是安裝在本地的,使用過程中沒遇到什么大問題,可是一旦部署到真實的雲服務器上就出現了一大堆問題,且聽我慢慢道來。

在安裝Redis前,雲服務器實例是完全純凈的。首先執行下面的命令下載並安裝redis:

//下載
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
//解壓
tar xzf redis-4.0.9.tar.gz
//進入解壓后的目錄
cd redis-4.0.9
//安裝到當前目錄
make

如果make失敗,一般是系統中還未安裝gcc造成的,因為Redis是用C語言寫成的,所以需要先通過yum install gcc安裝C語言環境。

安裝Redis后,先別慌着啟動,因為Redis對遠程連接要求比較苛刻,具體到以下幾點:

Redis服務默認只讓本機訪問,因為現在Redis是在人家阿里雲的服務器上,所以需要修改成讓外網也能訪問。主要是修改Redis的默認配置文件reidis.conf。

  • 注釋掉bind 127.0.0.1這一行,這樣可以使所有的ip訪問redis
  • 修改 protected-mode,值改為no,生產環境下要改為yes
  • 為了Redis的安全,需要把#requirepass foobared去掉注釋,foobared改為自己的密碼,例如可以改為requirepass 123456

經過以上幾步后,理論上就可以通過外網訪問到雲服務器上的Redis了。如果現在去啟動Redis的服務端,會發現Redis只能是前台啟動,在這里可以通過修改redis.conf里的daemonize為yes讓redis開啟后台啟動。

因為redis采用的是單進程多線程的模式。當redis.conf中選項daemonize設置成yes時,代表開啟守護進程模式。在該模式下,redis會在后台運行,並將進程pid號寫入至redis.conf選項pidfile設置的文件中,此時redis將一直運行,除非手動kill該進程。

在修改完配置文件后,我們進入redis-4.0.9的scr目錄,執行以下命令啟動Redis的服務端:

./redis-server ../redis.conf

這樣Redis就在雲服務器上以后台的方式啟動了,接下來我在本地快速搭建了一個SpringBoot整合Redis的案例。在application.properties添加如下內容:

#設置redis主機ip
spring.redis.host= #你的雲服務器IP地址
#連接redis服務的密碼
spring.redis.password= #剛剛在redis.conf中設置的密碼

添加controller如下:

@RestController
public class TestRedis {
    @Autowired
    private StringRedisTemplate strTplRedis;
    @GetMapping("/testredis")
    public String testRedis(){
        strTplRedis.opsForValue().set("testkey", "testvalue");
        strTplRedis.opsForValue().get("testkey");
        return "success";
    }
}

此時我們啟動項目后,訪問localhost:8080/testredis,出現如下錯誤:
這里寫圖片描述

這里問題就來了,顯示無法連接到Redis,此時配置文件里面該改到的都已經改了,后來我又想到應該是防火牆的問題,因為redis的端口是6379,服務器默認是不開啟這個端口的,所以我執行下面命令關閉了防火牆:

sudo service iptables stop

重新訪問url,發現還是報同樣的錯……

於是去請教大神,經過大神的一頓排查,最后告訴我應該是我服務器的安全組規則的問題。

原來,新建的阿里雲服務器實例,是默認不讓外網訪問的,一個實例屬於一個安全組,這個安全組里一開始有阿里雲為我們定義的規則,默認是不開放任何tcp端口的,具體的可以查看官方的介紹:添加安全組規則

在修改好安全組規則后,再訪問頁面url,頁面顯示success,這下總算是將數據存進去了,使用Redis的桌面客戶端也能遠程連接到Redis,顯示Redis里面的數據如下:
這里寫圖片描述

回頭看來,遠程連接Redis的坑基本上是被我踩完了……


免責聲明!

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



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