天天看點

如何在 CentOS 7 上安裝 Redis 伺服器如何在 CentOS 7 上安裝 Redis 伺服器

大家好,本文的主題是 redis,我們将要在 centos 7 上安裝它。編譯源代碼,安裝二進制檔案,建立、安裝檔案。在安裝了它的元件之後,我們還會配置 redis ,就像配置作業系統參數一樣,目标就是讓 redis 運作的更加可靠和快速。

如何在 CentOS 7 上安裝 Redis 伺服器如何在 CentOS 7 上安裝 Redis 伺服器

redis 伺服器

redis 是一個開源的多平台資料存儲軟體,使用 ansi c 編寫,直接在記憶體使用資料集,這使得它得以實作非常高的效率。redis 支援多種程式設計語言,包括 lua, c, java, python, perl, php 和其他很多語言。redis 的代碼量很小,隻有約3萬行,它隻做“很少”的事,但是做的很好。盡管是在記憶體裡工作,但是資料持久化的儲存還是有的,而redis 的可靠性就很高,同時也支援叢集,這些可以很好的保證你的資料安全。

<a></a>

redis 目前沒有官方 rpm 安裝包,我們需要從源代碼編譯,而為了要編譯就需要安裝 make 和 gcc。

如果沒有安裝過 gcc 和 make,那麼就使用 yum 安裝。

<code>yum install gcc make</code>

<code>curl http://download.redis.io/releases/redis-3.0.4.tar.gz -o redis-3.0.4.tar.gz</code>

解壓縮。

<code>tar zxvf redis-3.0.4.tar.gz</code>

進入解壓後的目錄。

<code>cd redis-3.0.4</code>

使用make 編譯源檔案。

<code>make</code>

進入源檔案的目錄。

<code>cd src</code>

複制 redis 的伺服器和用戶端到 /usr/local/bin。

<code>cp redis-server redis-cli /usr/local/bin</code>

最好也把 sentinel,benchmark 和 check 複制過去。

<code>cp redis-sentinel redis-benchmark redis-check-aof redis-check-dump /usr/local/bin</code>

建立redis 配置檔案夾。

<code>mkdir /etc/redis</code>

在<code>/var/lib/redis</code> 下建立有效的儲存資料的目錄

為了讓 redis 正常工作需要配置一些核心參數。

<code>sysctl -w vm.overcommit_memory=1</code>

<code>sysctl -w net.core.somaxconn=512</code>

取消對透明巨頁記憶體(transparent huge pages)的支援,因為這會造成 redis 使用過程産生延時和記憶體通路問題。

<code>echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled</code>

redis.conf 是 redis 的配置檔案,然而你會看到這個檔案的名字是 6379.conf ,而這個數字就是 redis 監聽的網絡端口。如果你想要運作超過一個的 redis 執行個體,推薦用這樣的名字。

複制示例的 redis.conf 到 /etc/redis/6379.conf。

<code>cp redis.conf /etc/redis/6379.conf</code>

現在編輯這個檔案并且配置參數。

<code>vi /etc/redis/6379.conf</code>

設定 <code>daemonize</code> 為 no,systemd 需要它運作在前台,否則 redis 會突然挂掉。

<code>daemonize no</code>

設定 <code>pidfile</code> 為 <code>/var/run/redis_6379.pid</code>。

<code>pidfile /var/run/redis_6379.pid</code>

如果不準備用預設端口,可以修改。

<code>port 6379</code>

設定日志級别。

<code>loglevel notice</code>

修改日志檔案路徑。

<code>logfile /var/log/redis_6379.log</code>

設定目錄為 /var/lib/redis/6379

<code>dir /var/lib/redis/6379</code>

下面有幾個可以提高安全性的操作。

在很多情況下,用戶端程式和伺服器端程式運作在同一個機器上,是以不需要監聽網絡上的 socket。如果這和你的使用情況類似,你就可以使用 unix socket 替代網絡 socket,為此你需要配置 <code>port</code> 為0,然後配置下面的選項來啟用 unix socket。

設定 unix socket 的套接字檔案。

<code>unixsocket /tmp/redis.sock</code>

限制 socket 檔案的權限。

<code>unixsocketperm 700</code>

現在為了讓 redis-cli 可以通路,應該使用 -s 參數指向該 socket 檔案。

<code>redis-cli -s /tmp/redis.sock</code>

你可能需要遠端通路,如果是,那麼你應該設定密碼,這樣子每次操作之前要求輸入密碼。

<code>requirepass "btfbx1nyywrmtueynhhscg"</code>

想象一下如下指令的輸出。是的,這會輸出伺服器的配置,是以你應該在任何可能的情況下拒絕這種通路。

<code>config get *</code>

為了限制甚至禁止這條或者其他指令可以使用 <code>rename-command</code> 指令。你必須提供一個指令名和替代的名字。要禁止的話需要設定替代的名字為空字元串,這樣禁止任何人猜測指令的名字會比較安全。

<code>rename-command flushdb "flushdb_my_salt_g0es_here09u09u"</code>

<code>rename-command flushall ""</code>

<code>rename-command config "config_my_s4lt_go3s_here09u09u"</code>

如何在 CentOS 7 上安裝 Redis 伺服器如何在 CentOS 7 上安裝 Redis 伺服器

使用密碼通過 unix socket 通路,和修改指令

預設情況下,redis 會周期性的将資料集轉儲到我們設定的目錄下的 dump.rdb 檔案。你可以使用 <code>save</code> 指令配置轉儲的頻率,它的第一個參數是以秒為機關的時間幀,第二個參數是在資料檔案上進行修改的數量。

每隔15分鐘并且最少修改過一次鍵。

<code>save 900 1</code>

每隔5分鐘并且最少修改過10次鍵。

<code>save 300 10</code>

每隔1分鐘并且最少修改過10000次鍵。

<code>save 60 10000</code>

檔案 <code>/var/lib/redis/6379/dump.rdb</code> 包含了從上次儲存以來記憶體裡資料集的轉儲資料。因為它先建立臨時檔案然後替換之前的轉儲檔案,這裡不存在資料破壞的問題,你不用擔心,可以直接複制這個檔案。

你可以使用 systemd 将 redis 添加到系統開機啟動清單。

複制示例的 init_script 檔案到 <code>/etc/init.d</code>,注意腳本名所代表的端口号。

<code>cp utils/redis_init_script /etc/init.d/redis_6379</code>

現在我們要使用 systemd,是以在 <code>/etc/systems/system</code> 下建立一個機關檔案名字為<code>redis_6379.service</code>。

<code>vi /etc/systemd/system/redis_6379.service</code>

填寫下面的内容,詳情可見 systemd.service。

<code>[unit]</code>

<code>description=redis on port 6379</code>

<code></code>

<code>[service]</code>

<code>type=forking</code>

<code>execstart=/etc/init.d/redis_6379 start</code>

<code>execstop=/etc/init.d/redis_6379 stop</code>

<code>[install]</code>

<code>wantedby=multi-user.target</code>

現在添加我之前在 <code>/etc/sysctl.conf</code> 裡面修改過的記憶體過量使用和 backlog 最大值的選項。

<code>vm.overcommit_memory = 1</code>

<code>net.core.somaxconn=512</code>

對于透明巨頁記憶體支援,并沒有直接 sysctl 指令可以控制,是以需要将下面的指令放到 <code>/etc/rc.local</code> 的結尾。

謝謝閱讀。

本文來自雲栖社群合作夥伴“linux中國”

原文釋出時間為:2013-04-02.