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命令