linux上安裝redis的踩坑過程

来源:https://www.cnblogs.com/lpcyj/archive/2018/05/01/8977190.html
-Advertisement-
Play Games

linux上安裝redis,本地遠程訪問問題總結,redis超時連接問題 ...


   redis用處很廣泛,我不再啰嗦了,我按照網上教程想在linux上安裝下,開始了踩坑過程,網上買了一個linux centos7.3,滴滴雲的,巨坑無比啊,不建議大家用這家的! redis 為4.0,

1.登錄雲服務並下載安裝:

   首先登錄不是root用戶,需要切換下,執行sudo su切為root用戶,感覺這樣很不方便,於是咨詢下,回覆是這樣的:

 

   (1) 然後換回root用戶了,開始wget下載,提示沒有這個命令,好吧,開始安裝它yum -y install wget

  下載完後就解壓, 執行:tar xzf redis-4.0.9.tar.gz

  (2) 進入 cd redis-4.0.9,執行 make,此時有可能報錯: 

 gcc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c  類似的;那麼再去安裝GCC環境, yum -y install gcc automake autoconf libtool make

 參考鏈接:https://blog.csdn.net/ygl6150373/article/details/50984420

 (3)安裝成功,開始啟動前準備,修改redis.conf里 bind的IP,直接註釋掉這一行,讓外網可以訪問,如果是3.2以後版本,還需要修改保護模式 protected-mode yes 改為no,註意修改完這個配置後,下次啟動要指定 redis.conf,不然不起作用!

2.開始啟動

  如果你linux沒什麼問題可能就直接啟動成功了,但有些時候會報3個警告,比如我就碰到了,2.8不會,4.0會,猜想可能是4.0對記憶體要求高了

  第一個警告:The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

  意思是:TCP  backlog設置值,511沒有成功,因為 /proc/sys/net/core/somaxconn這個設置的是更小的128.

 

 臨時解決方法:(即下次啟動還需要修改此值)

 

 echo 511 > /proc/sys/net/core/somaxconn

 

 永久解決方法:(即以後啟動還需要修改此值)

 

 將其寫入/etc/rc.local文件中。

 當然上面這個解決辦法是網上的,我試了,直接改somaxconn下次啟動仍然這樣,而寫到rc.local我不知道怎麼寫,直接寫也是沒用的,所以我又找到另外一個方法是可以的

在/etc/sysctl.conf中添加如下

net.core.somaxconn = 2048,此值根據你的記憶體自己寫定義,大於511即可

 

第二個警告:overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to/etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

意思是:overcommit_memory參數設置為0!在記憶體不足的情況下,後臺程式save可能失敗。建議在文件 /etc/sysctl.conf 中將overcommit_memory修改為1。 

 這個警告的處理我忘記了這個是否有效,應該有效的

 

第三個警告:you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix thisissue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain thesetting after a reboot. Redis must be restarted after THP is disabled.

意思是:你使用的是透明大頁,可能導致redis延遲和記憶體使用問題。執行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 修複該問題。

臨時解決方法:

echo never > /sys/kernel/mm/transparent_hugepage/enabled。

永久解決方法:

將其寫入/etc/rc.local文件中。

 

 這個解決方案也是網上的,但是根本沒用,至少我這裡是沒用的,所以我採取的是這個,修改etc/default/grub  里值,GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200 transparent_hugepage=never"

 

 在此行後面加了 transparent_hugepage=never,並執行,參考連接:https://blog.csdn.net/msdnchina/article/details/72968215

親測是有效的.

 

3.遠程連接

  終於順利啟動了, 啟動順序這樣: cd /redis/redis-4.0.9/src ,然後執行 ./redis-server  ../redis.conf,記住,一定要指定conf文件,不然上面修改IP和保護模式都沒用了.

不容易啊,現在開始在另外一個視窗里進入redis, cd /redis/redis-4.0.9/src,執行./redis-cli,進入redis,set個鍵取下看是否正常,然後開始進入遠程連接;

 我本地用的springboot,推薦大家使用,sprinboot自帶有springboot-redis功能,會自動載入redis配置文件,但它使用的redistemplate感覺並不好用,所以此時我用的還是jedis

 但一訪問就報錯,Caused by: java.net.SocketTimeoutException: connect timed out,然後我試著去關閉防火牆,如下:

  firewall-cmd --state #查看預設防火牆狀態(關閉後顯示notrunning,開啟後顯示running)

  systemctl stop firewalld.service #停止

  firewall systemctl disable firewalld.service #禁止firewall開機啟動

  init 6 #重啟虛擬機,然後再輸入第一條命令查看防火牆狀態

 在centos7.2里這樣操作防火牆是沒問題的,然後並沒什麼用,還是time out,試了很多方法還是不行,本地可以Ping通,就是訪問不了,此時突然想起我用的坑貨雲了,那裡是訪問白名單設置,

 

 

 我早就設置了6379埠的白名單,卻忘了綁定伺服器,這裡的DC2相當於阿裡的ECS,結果一直報超時,無奈,改了這個之後,馬上就可以了.

然後又報下麵的錯誤 :

JedisConnectionException: java.net.SocketException: Software caused connection abort: socket write error"異常

或者:Unable to validate object

或者可能會有下麵大段的錯誤:Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

此時說明redis.conf里設置沒起作用,說明你啟動時忘了指定conf,於是按正確方法啟動  ./redis.server ../redis.conf,終於可以ping 通了

 

 

總結下:在安裝完redis後,修改bindIP,和保護模式,並修改伺服器防火牆的埠訪問,在伺服器上能訪問redis的情況下,如果遠程不能訪問時,請檢查下是否使用了雲伺服器及雲伺服器的IP及埠限制是否設置正常.

另外,還有其它設置,如是否使用密碼,超時等待時間,持久化策略等下次再更.

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...