1.資料庫高可用(HA)
1.1 實作資料庫讀寫分離/負載均衡

1.1 Mycat代理
1.1.1 Mycat 介紹

1.1.2 Mycat代理

1.2 MyCat配置
1.2.1 上傳安裝包

1.2.2 解壓Mycat
1).解壓Mycat
[root@localhost src]# tar -xvf Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz
2).移動Mycat檔案

1.2.3 編輯Server.xml
說明: 用戶與代理資料庫之間的鏈接,通過Server.xml進行配置.
1).默認埠

2).編輯server.xml

1.2.4 編輯schemas.xml
說明:該檔案表示代理與資料庫的配置 HOST:PORT:用戶名:密碼:資料庫名稱
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--name屬性是自定義的 dataNode表示資料庫的節點資訊 jtdb表示邏輯庫-->
<schema name="jtdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="jtdb"/>
<!--定義節點名稱/節點主機/資料名稱-->
<dataNode name="jtdb" dataHost="localhost1" database="jtdb" />
<!--引數介紹 UTF-8 中文報錯 使用單行注釋 -->
<!--balance 0表示所有的讀操作都會發往writeHost主機 -->
<!--1表示所有的讀操作發往readHost和閑置的主節點中-->
<!--writeType=0 所有的寫操作都發往第一個writeHost主機-->
<!--writeType=1 所有的寫操作隨機發往writeHost中-->
<!--dbType 表示資料庫型別 mysql/oracle-->
<!--dbDriver="native" 固定引數 不變-->
<!--switchType=-1 表示不自動切換, 主機宕機后不會自動切換從節點-->
<!--switchType=1 表示會自動切換(默認值)如果第一個主節點宕機后,Mycat會進行3次心跳檢測,如果3次都沒有回應,則會自動切換到第二個主節點-->
<!--并且會更新/conf/dnindex.properties檔案的主節點資訊 localhost1=0 表示第一個節點.該檔案不要隨意修改否則會出現大問題-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select 1</heartbeat>
<!--配置第一臺主機主要進行寫庫操作,在默認的條件下Mycat主要操作第一臺主機在第一臺主機中已經實作了讀寫分離.因為默認寫操作會發往137的資料庫.讀的操作默認發往141.如果從節點比較忙,則主節點分擔部分壓力.
-->
<writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
<!--讀資料庫1-->
<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
<!--讀資料庫2-->
<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
</writeHost>
<!--定義第二臺主機 由于資料庫內部已經實作了雙機熱備.-->
<!--Mycat實作高可用.當第一個主機137宕機后.mycat會自動發出心跳檢測.檢測3次.-->
<!--如果主機137沒有給Mycat回應則判斷主機死亡.則回啟東第二臺主機繼續為用戶提供服務.-->
<!--如果137主機恢復之后則處于等待狀態.如果141宕機則137再次持續為用戶提供服務.-->
<!--前提:實作雙機熱備.-->
<!--<writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="root">
<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
</writeHost>-->
</dataHost>
</mycat:schema>
1.2.5 上傳安裝檔案
將課前資料中的檔案上傳到指定的位置: /usr/local/src/mycat/conf

1.2.6 Mycat命令

1.2.7 報錯檢查

1.2.8 負載均衡測驗
將從資料庫資訊,手動的進行修改. 效果:主庫和從庫的資料暫時不一致(存在風險)

2).如果測驗成功,則將資料進行修改保存.檢查讀寫分離是否成功.

1.3 實作資料庫雙機熱備
1.3.1 原理說明
說明: 實作資料庫高可用的前提條件是實作主從的備份.
之前的操作:
主庫 :192.168.126.129
從庫 : 192.168.126.130
現在的配置:
主庫 :192.168.126.130
從庫 : 192.168.126.129

1.3.2 實作雙主模式配置
1).檢查主庫狀態

2).實作主從配置
show MASTER status
# 我是129 之前是主庫,今天當從庫
CHANGE MASTER to MASTER_HOST="192.168.126.130",
MASTER_PORT=3306,
MASTER_user="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=700;
#啟動主從服務
start slave
#檢查狀態
show slave status;

1.4 實作資料庫高可用
1.4.1 修改schema.xml組態檔
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--name屬性是自定義的 dataNode表示資料庫的節點資訊 jtdb表示邏輯庫-->
<schema name="jtdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="jtdb"/>
<!--定義節點名稱/節點主機/資料名稱-->
<dataNode name="jtdb" dataHost="localhost1" database="jtdb" />
<!--引數介紹 UTF-8 中文報錯 使用單行注釋 -->
<!--balance 0表示所有的讀操作都會發往writeHost主機 -->
<!--1表示所有的讀操作發往readHost和閑置的主節點中-->
<!--writeType=0 所有的寫操作都發往第一個writeHost主機-->
<!--writeType=1 所有的寫操作隨機發往writeHost中-->
<!--dbType 表示資料庫型別 mysql/oracle-->
<!--dbDriver="native" 固定引數 不變-->
<!--switchType=-1 表示不自動切換, 主機宕機后不會自動切換從節點-->
<!--switchType=1 表示會自動切換(默認值)如果第一個主節點宕機后,Mycat會進行3次心跳檢測,如果3次都沒有回應,則會自動切換到第二個主節點-->
<!--并且會更新/conf/dnindex.properties檔案的主節點資訊 localhost1=0 表示第一個節點.該檔案不要隨意修改否則會出現大問題-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select 1</heartbeat>
<!--配置第一臺主機主要進行寫庫操作,在默認的條件下Mycat主要操作第一臺主機在第一臺主機中已經實作了讀寫分離.因為默認寫操作會發往137的資料庫.讀的操作默認發往141.如果從節點比較忙,則主節點分擔部分壓力.
-->
<writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
<!--讀資料庫1-->
<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
<!--讀資料庫2-->
<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
</writeHost>
<!--定義第二臺主機 由于資料庫內部已經實作了雙機熱備.-->
<!--Mycat實作高可用.當第一個主機137宕機后.mycat會自動發出心跳檢測.檢測3次.-->
<!--如果主機137沒有給Mycat回應則判斷主機死亡.則回啟東第二臺主機繼續為用戶提供服務.-->
<!--如果137主機恢復之后則處于等待狀態.如果141宕機則137再次持續為用戶提供服務.-->
<!--前提:實作雙機熱備.-->
<writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="root">
<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
1.4.2 上傳檔案
1).停止mycat服務

2).洗掉組態檔

3).上傳檔案
將組態檔上傳到指定的目錄中

4).啟動Mycat

1.4.3 資料庫高可用的測驗
1.首先應該將129的資料庫宕機(關閉)
2.啟動程式,通過資料庫代理檢查是否訪問正確(查). 入庫是否正常(寫)
3.重啟129的資料庫. 檢查資料是否真的同步了.
2.Redis快取
2.1 系統優化策略
說明:引入快取機制可以有效的降低用戶訪問物理設備的頻次,從而提高回應速度.

2.2 如何設計快取
1.快取資料如何存盤? 應該采用什么樣的資料結構呢? K-V key的唯一性
2.快取資料的容量大小 應該動態維護快取資料,將不需要的資料提前洗掉. LRU演算法/LFU演算法/隨機演算法/TTL演算法
3.快取資料保存到記憶體中,但是記憶體的特點斷電即擦除. 定期將記憶體資料持久化(寫入磁盤中)
4.單臺快取服務器性能不足,所以一般需要搭建集群(實作高可用).
5.使用C語言開發.
2.3 Redis快取服務
2.3.1 什么是Redis
Redis 是一個開源(BSD許可)的,記憶體中的資料結構存盤系統,它可以用作資料庫、快取和訊息中間件, 它支持多種型別的資料結構,如 字串(strings), 散列(hashes), 串列(lists), 集合(sets), 有序集合(sorted sets) 與范圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢, Redis 內置了 復制(replication),LUA腳本(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁盤持久化(persistence), 并通過 Redis哨兵(Sentinel)和自動 磁區(Cluster)提供高可用性(high availability),
速度: 讀: 11.2萬/秒 寫:8.6萬/秒 50萬/秒
2.3.2 上傳Redis
1).上傳redis

2).解壓redis服務
[root@localhost src]# tar -xvf redis-5.0.4.tar.gz
3).移動檔案/修改檔案名稱

2.3.3 安裝Redis
說明:在Redis根目錄中執行如下命令
1).make

2). make install

2.3.4 修改redis組態檔
修改redis根目錄下的redis.conf檔案
1).去除IP系結

2).修改保護模式

3).開啟后臺啟動

2.4 Redis服務器命令
說明: Redis服務在運行時,必須依賴于組態檔 redis.conf. 操作redis時最好在根目錄中操作
1).啟動redis
redis-server redis.conf

2).進入redis客戶端
redis-cli -p 6379
ctrl + c 退出客戶端

3).關閉redis服務器

方法二:
redis-cli -p 6379 shutdown
補充說明: 如果操作的埠號是默認埠6379 則可以省略不寫.
作業
1.熟悉redis命令
2.完成當天的課堂任務
3.熟練掌握 基礎Linux命令
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/231480.html
標籤:其他
