1. 程式人生 > >配置最簡單的Redis主從讀寫分離

配置最簡單的Redis主從讀寫分離

要求:

1、你已經知道redis是什麼
2、熟悉Linux基本操作(CentOS 6.5)
3、有單機redis開發相關經驗
4、有主觀能動性,至少熟練百度的使用

redis主從配置初步:2個節點主從

如果我們redis的壓力很大,如果我們的併發高到我們讀資料和寫資料都有了很大壓力。
那麼我們可能就需要把redis分開部署,並且配置為一個『主從』的狀態。
這裡寫圖片描述

首先我們要安裝redis

下載之後,會有一個redis-3.2.8.tar.gz
(注意我們後面整個過程不要使用root帳號,我這裡是在一個叫’admin’的使用者下’)
這裡寫圖片描述

1、解壓

tar zxvf redis-3.2.8.tar.gz
  • 1

2、進入redis原始碼目錄

cd redis-3.2.8
  • 1

這裡邊的檔案,我們需要編譯
這裡寫圖片描述

make
  • 1

編譯好後會在src目錄生成一些可執行檔案
這裡寫圖片描述

為了方便,我們把一些檔案拷貝到/usr/local/redis中

1、在/usr/local/下建立需要的目錄

cd /usr/local
sudo mkdir redis #建立目錄
  • 1
  • 2

注意:如果報”admin is not in the sudoers file. This incident will be reported.”錯誤。是因為執行sudo命令的使用者不在sudoers檔案的列表中。可以通過編輯sudoers檔案,來解決這個問題。
切換到root帳號執行:vi /etc/sudoers
為了讓admin這個使用者能夠執行sudo命令,在sudoers檔案中加入一行:
admin ALL=(ALL) ALL

2、/usr/local/redis目錄建立成功,需要修改redis目錄所有者

sudo chown -R admin:admin redis/
  • 1

3、然後在redis目錄,新建binconf目錄。(不是必須的,只不是過為了方便而已)
這裡寫圖片描述

4、把前面編譯後的redis的可執行檔案(在redis-3.2.8/src/下),複製到/usr/local/redis/bin裡面去

sudo cp redis* /usr/local/redis/bin/
#拷貝redis開頭的所有檔案
  • 1
  • 2

5、redis提供給我們了一個預設的配置檔案redis.conf
把它複製到/usr/local/redis/conf目錄下,並改名為6379.conf

sudo cp redis.conf  /usr/local/redis/conf/6379.conf
  • 1

這裡寫圖片描述

6、刪除一些不必要的檔案(我們只需要redis的可執行檔案)

 sudo rm *.c
 sudo rm *.o
 sudo rm *.h
  • 1
  • 2
  • 3

這裡寫圖片描述

7、修改配置檔案

sudo vi 6379.conf
  • 1

修改如下幾個配置:

daemonize no 
修改為:
daemonize yes  (後臺程式方式執行)

pidfile /var/run/redis_6379.pid
修改為:
pidfile /usr/local/redis/redis_6379.pid
(把pidfile生成到有許可權的目錄下)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

8、啟動
注意資料夾路徑不要搞錯

/usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf 
  • 1

這裡寫圖片描述

9、配置從節點

sudo cp 6379.conf 6380.conf
  • 1

修改6380.conf
修改對應的埠和pid配置
然後加入slaveof 127.0.0.1 6379

port 6379
修改為:
port 6380

pidfile /usr/local/redis/redis_6379.pid
修改為:
pidfile /usr/local/redis/redis_6380.pid

增加一行:
slaveof 127.0.0.1 6379
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

10、啟動2個redis例項

/usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6380.conf 
  • 1
  • 2

這裡寫圖片描述

11、啟動redis客戶端
去連線6379那個例項

cd /usr/local/redis/bin/

./redis-cli -h 127.0.0.1 -p 6379
  • 1
  • 2
  • 3

連上之後輸入:info命令
這裡寫圖片描述
可以從中看到很多資訊,比如:

role:master #本機是『主』
connected_slaves:1 #有1個『奴隸』
slave0:ip=127.0.0.1,port=6380,state=online,offset=11957,lag=1
#"從"伺服器iP地址和埠是
  • 1
  • 2
  • 3
  • 4

這裡寫圖片描述

12、新增

set name zhangsan
  • 1
#讀取
get name
  • 1
  • 2

這裡寫圖片描述

13、然後訪問6380那個例項

./redis-cli -h 127.0.0.1 -p 6380

get name
  • 1
  • 2
  • 3

這裡寫圖片描述

我們發現這2個例項已經完成了資料的同步。

如果我們要在從伺服器寫入

set name lisi
#會提示:(error) READONLY You can't write against a read only slave.
#因為從伺服器只有讀許可權,我們做的就是redis的讀寫分離啊
  • 1
  • 2
  • 3

這裡寫圖片描述

我們這裡演示是在一臺機器上,分了2個埠,真實開發肯定是2臺機器了,不然分離就沒有意義了。