redis的主從複製和高可用集羣

1、redis的簡介node

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。redis是一個key-value存儲系統。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都 支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排 序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文 件,而且在此基礎上實現了master-slave(主從)同步。redis

Redis 是一個高性能的key-value數據庫數據庫

Redis支持主從同步。數據能夠從主服務器向任意數量的從服務器上同步,從服務器能夠是關聯其餘從服務器的主服務器。這使得Redis可執行單層樹複製。存盤能夠有意無心的對數據進行寫操做。因爲徹底實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈 記錄。同步對讀取操做的可擴展性和數據冗餘頗有幫助。vim

2、redis的安裝和部署緩存

系統: redhat 6.5 
ruby

server1  redis  
服務器

server2  redis
網絡

(一)redis的安裝
app

一、在server一、2上安裝redis服務memcached

--->  tar  zxf  redis-4.0.8.tar.gz     # 解包

--->  cd  redis-4.0.9 

--->  yum  install -y gcc              # 先安裝gcc依賴包

--->  make      # 此時會出現以下錯誤

 

 

解決方法: 使用命令: make MALLOC=lib

--->  make install           # 安裝 (當在src中執行make test後結果以下。不執行也能夠)

--->  cd  /root/redis-4.0.9/utils        

--->  ./install_server.sh              # 執行redis的安裝腳本。有配置,直接回車便可。

# 注意,必定要再utils目錄下,不然會提示找不到。

二、檢測redis是否安裝成功

--->  redis-cli      

--->  info 

三、修改master的redis服務的監聽端口

--->  vim  /etc/redis/6379.conf           # 註釋6379監聽的ip

--->  /etc/init.d/redis_6379  restart

--->  netstat -antlp      

註釋:在server2和3中只須要安裝好redis,並測試便可。

(二)redis實現主從複製

一、在server1中對redis配置文件設置、redis命令行設置鍵值對

--->  vim  /etc/redis/6379.conf   # 關閉保護模式(註釋6379監聽的ip,以前作過,在此就不須要註釋了)

--->  redis-server  /etc/redis/6379.conf           # 重啓服務

--->  redis-cli           # 設置key-value

--->  set name  xniu

二、在server2中編輯配置文件

--->  vim  /etc/redis/6379.conf         # 設置本身的master的ip和端口號(和以前的註釋端口號)

--->  /etc/inti.d/redis_6379  restart

# 而後在redis中查看在server1中設置的變量

--->  redis-cli

--->  get  name

# 此時,咱們完成了redis的主從複製。

3、redis集羣部署實現高可用

此時,咱們使用server一、二、3構成集羣。server3的redis安裝配置和server2相同。

高可用原理:當一個主服務器不能正常工做時, Sentinel 會開始一次自動故障遷移操做, 它會將失效主服務器的其中一個從服務器升級爲新的主服務器, 並讓失效主服務器的其餘從服務器自動更改本身的主服務器; 當客戶端試圖鏈接失效的主服務器時, 集羣也會向客戶端返回新主服務器的地址, 使得集羣可使用新主服務器代替失效服務器。(redis具備監控、提醒、故障轉移功能)

server1  master   (前提環境是一主兩從)

server二、3  slave

一、在server1中修改sentinel.conf配置文件

--->  cd  /root/redis-4.0.8

--->  cp  sentinel.conf  /etc/redis   # 首先複製到/etc/redis目錄下

--->  vim  /etc/redis/sentinel.conf

# 關閉保護模式

# 配置指示 Sentinel 去監視一個名爲 mymaster 的主服務器,這個主服務器的IP爲172.25.2.1,端口爲6379,而將這個主服務器判斷爲失效至少須要2個Sentinel贊成(只要贊成 Sentinel 的數量不達標,自動故障遷移就不會執行)

# down-after-milliseconds 表示 Sentinel 認爲服務器已經斷線所需的毫秒數。在指定時間內沒有返回響應,則視爲下線。

--->  scp   /etc/redis/sentinel.conf   server2:/etc/redis      # 把修改好的文件複製到server二、server3中

--->  scp   /etc/redis/sentinel.conf   server3:/etc/redis

2) 三臺服務器啓動sentinel服務。(以server1爲例。在server2和3中監控到信息和1相同)

--->  redis-sentinel  /etc/redis/sentinel.conf  # 能夠監控到master和slave。

 

注意: +slave 表示 :一個新的從服務器已經被 Sentinel 識別並關聯。此時master爲172.25.2.1;salve爲server2和3。

3)在master端使用info查看,也會有master、slave的信息

--->  redis-cli

--->  info

 

4)當咱們把master中的redis宕掉以後,此時監控中,咱們能夠看到master切換到其它server3主機上, 而此時server2中配置文件的slaveof的值也變爲server3了。

server1:

server3:(監控狀況以下)

server2: slaveof的值變爲172.25.2.3

4、redis集羣化工具的使用

在server1中執行

一、將集羣化工具的運行腳本放在第三方軟件目錄中

--->  cd /root/redis-4.0.2/src

--->  cp  redis-trib.rb  /usr/local/bin

--->  cd  /usr/local/bin

二、執行redis-trib.rb的時候,會出現依賴錯誤

--->  yum  install -y ruby

--->  yum  install -y  rubygems-1.3.7-5.el6.noarch.rpm  libyaml-0.1.3-4.el6_6.x86_64  ruby-2.2.3-1.el6.x86_64.rpm

--->  gem  install --local redis-4.0.1.gem

三、查看集羣化工具是否安裝成功

--->  gem  list  --local    # 此時能夠看到redis

4)建立集羣,並查看集羣中的主從關係

--->  cd  /usr/local

--->  mkdir  cluster

--->  mkdir  cluster/700{1..6}

--->  vim  cluster/7001/redis.conf         # 在每一個集羣節點中添加配置文件

port 7001        # 端口號;不一樣目錄對應相應的端口

cluster-enabled  yes

cluster-config-file  nodes.conf

cluster-node-timeout  5000

appendonly  yes

daemonize  yes    # 默認值爲no,yes表示redis服務以守護模式運行

pidfile  /usr/local/cluster/7001/redis.conf     # 節點的pid所在位置 (每一個節點對應相應的)

logfile  /usr/local/cluster/7001/redis.log     # 節點的log文件所在位置

--->  redis-server  redis.conf      # redis.conf是節點的配置文件

# 查看日誌,查看節點的信息

--->  netstat  -antlp        # 查看端口是否打開

5)建立集羣

--->  redis-trib.rb  create  --replicas  1 127.0.0.1:7001  127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

# 此時有三個master,三個slave

6)在集羣中寫入值,並查看

--->  redis-cli  -c  -p  7001

--->  set  name xnih

--->  get name

# 此時咱們能夠查詢其餘節點的name值

7)宕掉7001的master,而後進入集羣查看(此時,依然能夠查看到信息。由於宕掉7001,還有它對應的slave在提供數據) 。當把對應的slave都宕掉的話,此時就不能查詢到信息。啓動slave或master,數據又能夠恢復。

相關文章
相關標籤/搜索