1. 程式人生 > 實用技巧 >學習自動化運維的第八天(非關係型資料庫Memcached&Redis構建快取伺服器)

學習自動化運維的第八天(非關係型資料庫Memcached&Redis構建快取伺服器)

一、前言

許多Web應用都將資料儲存到關係型資料庫( RDBMS)中,應用伺服器從中讀取資料並在瀏覽器中顯示。但隨著資料量的增大、訪問的集中,就會出現RDBMS的負擔加重、資料庫響應惡化、 網站顯示延遲等重大影響。
Memcached/redis是高效能的分散式記憶體快取伺服器,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web等應用的速度、 提高可擴充套件性。

1.1關係型資料庫和非關係型資料庫的區別簡介

一、首先了解一下 什麼是關係型資料庫?(資料儲存到硬盤裡)
關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的一個數據組
織。

優點:
1、易於維護:都是使用表結構,格式一致;

2、使用方便:SQL語言通用,可用於複雜查詢;
3、複雜操作:支援SQL,可用於一個表以及多個表之間非常複雜的查詢。
缺點:
1、讀寫效能比較差,尤其是海量資料的高效率讀寫;
2、固定的表結構,靈活度稍欠;
3、高併發讀寫需求,傳統關係型資料庫來說,硬碟I/O是一個很大的瓶頸

二、 非關係型資料庫 (資料儲存到記憶體裡)
什麼非關係型資料庫呢?

非關係型資料是一種資料結構化儲存方法的集合,可以是文件或者鍵值對等

優點:
1、格式靈活:儲存資料的格式可以是key,value形式、文件形式、圖片形式等等,文件形式、圖片形式等等,使用靈活,應用場景廣泛,而關係型資料庫則只支援基礎型別。
2、速度快:nosql可以使用硬碟或者隨機儲存器作為載體,而關係型資料庫只能使用硬碟;

3、高擴充套件性;
4、成本低:nosql資料庫部署簡單,基本都是開源軟體。

缺點:
1、不提供sql支援,學習和使用成本較高;
2、無事務處理;
3、資料結構相對複雜,複雜查詢方面稍欠。

1.2非關係型資料庫優缺點

NOSQL名詞解釋:非關係型資料庫
優點:

  • 高可擴充套件性
  • 分散式計算
  • 低成本
  • 架構的靈活性
  • 沒有複雜的關係
    快取伺服器作用: 加快訪問速度 ,緩解資料庫壓力
    缺點:
  • 沒有標準化
  • 有限的查詢功能(到目前為止)
  • 最終一致是不直觀的程式

二、memcached

2.1簡介

1.內建記憶體儲存方式-----------為了提高效能,memcached中儲存的資料都儲存在memcache內建的記憶體儲存空間中。由於資料僅存在於記憶體中,重啟作業系統會導致全部資料消失


2.簡單key/value儲存---------------伺服器不關心資料本身的意義及結構,只要是可序列化資料即可。儲存項由“鍵、過期時間、可選的標誌及資料”四個部分組成;

2.2安裝

memcache能存放多少資料,取決於伺服器本身的記憶體有多大。
1.安裝
yum install memcached -y
啟動:
systemctl start memcached
2.修改配置檔案
vim /etc/sysconfig/memcached
在這裡插入圖片描述
3.測試
安裝telnet
yum install -y telnet
格式 : telnet ip 埠號
在這裡插入圖片描述
quit 推出
補:
不用它的原因:儲存的資料型別單一,而且資料只能儲存在記憶體中。無法實現資料的持久化,伺服器重啟,資料將消失

2.3擴充套件:安裝php支援memcached的擴充套件模組: 安裝php7.0

1.配置yum源
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

2.安裝
yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64 php70w-devel zlib-devel -y

yum -y install php70w-fpm

yum install -y make gcc zlib-devel libmemcached-devel git

yum install libmemcached -y

yum install php70w-pecl-memcached -y
3.設定nginx配置檔案
vim /etc/nginx/conf.d/nginx.conf
新增這個頁面:
在這裡插入圖片描述
在這裡插入圖片描述
4.建立測試頁面
cd /usr/share/nginx/html/
在這裡插入圖片描述
然後重啟nginx和php服務,瀏覽器測試
在這裡插入圖片描述

三、redis

3.1簡介

redis是一個開源的、使用C語言編寫的、支援網路互動的、可基於記憶體也可持久化的Key-Value資料庫
redis的特點:
1.豐富的資料結構 -----String,list,set,hash等資料結構的儲存
2.支援持久化
3.支援事務 ---------------事務是指“一個完整的動作,要麼全部執行,要麼什麼也沒有做”。
4.支援主從
redis和memcache比較
1).Redis不僅僅支援簡單的k/v型別的資料,同時還提供了list,set,zset,hash等資料結構的儲存
2).Redis支援master-slave(主-從)模式應用
3).Redis支援資料的持久化 (儲存到硬盤裡)

3.2安裝

1.下載redis
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
2.解壓
先建立一個解壓後的儲存目錄
mkdir -p /data/application
解壓:
tar xzf redis-4.0.9.tar.gz -C /data/application/
3.改名
進入檔案後改個名字
cd /data/application/
mv redis-4.0.9/ redis
cd redis/
4安裝編譯工具進行編譯
yum install -y gcc make
make
5.修改配置檔案
vim redis.conf
在這裡插入圖片描述
++++
在這裡插入圖片描述
++++
在這裡插入圖片描述
++++
在這裡插入圖片描述
++++
在這裡插入圖片描述
6.啟動和關閉 redis 有兩種方法:
一、手動啟動關閉
啟動redis:
進入到src的上一級目錄 ,也即進入到redis的主目錄
在這裡插入圖片描述
ser裡儲存著redis的命令檔案,所以我們只要執行相關的啟動檔案即可啟動redis:
在這裡插入圖片描述
++++
在這裡插入圖片描述

關閉redis:
只能通過查詢redis的程序號,然後通過kill命令殺死這個服務
查詢程序:
ps aux | grep redis
殺死程序:
kill -9 程序號
在這裡插入圖片描述
二、配置systemctl
配置:
cd /lib/systemd/system
vim redis.service
在這裡插入圖片描述
++++
測試:

關閉redis
在這裡插入圖片描述
啟動redis
在這裡插入圖片描述
7.登入redis
進入到redis主目錄裡的src命令檔案裡 手動登入:
cd /data/application/redis/src/
./redis-cli
在這裡插入圖片描述
++++
測試:
在這裡插入圖片描述

3.3資料持久化 (資料備份)

即把資料儲存到可永久儲存的儲存裝置中(如磁碟)。
redis持久化 – 兩種方式:

redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)。

RDB(Redis DataBase):是在不同的時間點,將redis儲存的資料生成快照並存儲到磁碟等介質上;
特點:
1.週期性
2.不影響資料寫入 #RDB會啟動子程序,備份所有資料。當前程序,繼續提供資料的讀寫。當備份完成,才替換老的備份檔案。
3.高效 #一次性還原所有資料
完整性較差 #故障點到上一次備份,之間的資料無法恢復。

AOF(Append Only File)則是換了一個角度來實現持久化,那就是將redis執行過的所有寫指令記錄下來,在下次redis重新啟動時,只要把這些寫指令從前到後再重複執行一遍,就可以實現資料恢復了。
特點:
1.實時性
2.完整性較好
體積大 #記錄資料的指令,刪除資料的指令都會被記錄下來。

RDB和AOF兩種方式也可以同時使用,在這種情況下,如果redis重啟的話,則會優先採用AOF方式來進行資料恢復,這是因為AOF方式的資料恢復完整度更高。

如何選擇方式?
快取:不用開啟任何持久方式
雙開:因RDB資料不實時,但同時使用兩者時伺服器只會找AOF檔案,所以RDB留作以防萬一的手段。
官方的建議是兩個同時使用。這樣可以提供更可靠的持久化方案。
寫入速度快 ------------AOF
寫入速度慢 ------------RDB

3.3.1RDB進行資料持久化

RDB 功能預設是開啟的
1.配置檔案修改:
在這裡插入圖片描述
++++
在這裡插入圖片描述
++++
在這裡插入圖片描述
++++
在這裡插入圖片描述
++++
在這裡插入圖片描述
2.重啟
開啟持久化功能後,重啟redis後,資料會自動通過持久化檔案恢復
systemctl restart redis.server
在這裡插入圖片描述
3.驗證
找臺機器 也安裝上redis,然後把備份資料庫傳送過去,看資料是否能恢復,備份是否成功
恢復的機器裡的redis配置檔案設定:
和備份的機器配置一樣,修改備份檔案儲存位置即可,其他一樣(略)

接下來,我們在備份的機器裡的資料庫裡建立一些資料:
在這裡插入圖片描述

++++
在這裡插入圖片描述
再把備份的檔案發給另一臺機器,
在這裡插入圖片描述
++++
在這裡插入圖片描述
另一臺機器就收到了
重啟一下,開啟資料庫 一定要重啟redis!!!
再次開啟資料庫redis:

在這裡插入圖片描述

3.3.2主從配置

主從同步原理:
主從 – 同步原理
從伺服器會向主伺服器發出SYNC指令,當主伺服器接到此命令後,就會呼叫BGSAVE指令來建立一個子程序專門進行資料持久化工作,也就是將主伺服器的資料寫入RDB檔案中。在資料持久化期間,主伺服器將執行的寫指令都快取在記憶體中。
在BGSAVE指令執行完成後,主伺服器會將持久化好的RDB檔案傳送給從伺服器,從伺服器接到此檔案後會將其儲存到磁碟上,然後再將其讀取到記憶體中。這個動作完成後,主伺服器會將這段時間快取的寫指令再以redis協議的格式傳送給從伺服器。

另外,要說的一點是,即使有多個從伺服器同時發來SYNC指令,主伺服器也只會執行一次BGSAVE,然後把持久化好的RDB檔案發給多個從伺服器。

而在2.8版本之後,redis支援了效率更高的增量同步策略,這大大降低了連線斷開的恢復成本。主伺服器會在記憶體中維護一個緩衝區,緩衝區中儲存著將要發給從伺服器的內容。從伺服器在與主伺服器出現網路瞬斷之後,從伺服器會嘗試再次與主伺服器連線,一旦連線成功,主伺服器就會向從伺服器傳送增量內容。

增量同步功能,需要伺服器端支援全新的PSYNC指令。這個指令,只有在redis-2.8之後才具有。

1設定主伺服器
vim redis.conf
在這裡插入圖片描述
重啟redis服務
2.設定從伺服器
vim redis.conf
在這裡插入圖片描述
++++
在這裡插入圖片描述
修改完成後重啟redis服務
3.測試
在主服務上修改資料庫,觀察從伺服器
在這裡插入圖片描述
++++
在這裡插入圖片描述

這就是主從伺服器設定

3.3.3哨兵模式

1.修改配置檔案
每臺機器上修改redis主配置檔案redis.conf檔案設定:bind 0.0.0.0
2.每臺機器上修改sentinel.conf
在這裡插入圖片描述
++++
在這裡插入圖片描述

++++
在這裡插入圖片描述
3.啟動哨兵服務
./src/redis-sentinel sentinel.conf &
把主伺服器上的redis伺服器關掉
在從伺服器上檢視:
在這裡插入圖片描述