首頁>技術>

OneProxy分庫分割槽設計

對於超大容量的表儲存來說,MySQL支援分割槽表設計,可以按某一欄位進行按範圍 (Range)、按值列表(List) 或按雜湊演算法(Hash) 等方法進行分割槽。

在OneProxy中同樣支援按範圍、按值列表或按雜湊演算法進行虛擬分庫分表設計,從內容上看,與MySQL建立分割槽表的關鍵資訊非常類似。

下面分別對這三種分割槽方法的分庫分表配置進行說明。

按範圍分庫分表

當按範圍分庫分表時,必須有一個針對應用的虛擬表名(Table) ,並指定一個用於 分割槽的欄位(PKey)、欄位的型別(Type) ,以及分割槽的方法(Method)。同時針對每-一個分割槽,都可以使用增加字尾( Suffix)的方式設定獨立的表名,並且指定分割槽所在的叢集分組(Group) ,以及分割槽欄位取值的上限(Value) 等。

例如,一個訂單表按範圍進行分割槽的設計如下所示:

{{"table": "t order","pkey": "id","type" : "int","method" : "range","partitions":{{"suffix" : " 0","group": "group1", "value": "100000" },{"suffix" : " 1","group": "group1", "value" : "200000" }{"suffix":" 2","group": "group2", "value": "300000" },{"suffix": " 3","group": "group2", "value": null}}}}

這樣,當訪問虛擬表名t _order 時,就將按其ID“value”的範圍導向真實表名,如“t _order. 0”、“t_ _order_ 1”等分表中進行資料的存取操作。

按值列表分庫分表

當按值列表分庫分表時,其實就是在虛擬表名中指定-一個用於分割槽的欄位、 欄位的型別、以及分割槽的方法。同時,針對每一個分割槽,都可使用增加字尾( Suffix)的方式設定獨立的表名,並且指定分割槽所在的叢集分組,以及分割槽欄位能取得的值列表等配置。當-個分割槽沒有指定任何分割槽值列表時,表示所有其他的值都落入這個分割槽中。

例如,一個訂單表按值列表進行分割槽的設計如下所示:

{{"table" : "t_order","pkey" : "id","type": "int","'method":"list","partitions":{{ "suffix" : "_0","group": "group1", "value" : ["1", "2", "3"] },{ "suffix": "_1", "group": "group1", "value" : ["4","5","6"] },{ "suffix" : "_2", "group": "group2", "value" : ["7", "8","9"] },{ "suffix" : "_3", "group": "group2", "value" : ["10", "11", "12"] },{ "suffix": " 4", "group": "group2", "value" :[] }}}}

其中,真實表名由虛擬表名及其後綴組成,例如“t_order_0”,並且資料的存取將在分到的指定叢集分組中進行。

按雜湊演算法分庫分表

當按雜湊演算法分庫分表時,必須有-一個針對應用的虛擬表名(Table) ,並指定-一個用於分割槽的欄位、欄位的型別,以及分割槽的方法。同時,針對每-一個分割槽, 都可以使用增加字尾的方式設定獨立的表名,並且指定分割槽所在的叢集分組。需要注意的是,按雜湊演算法分割槽並不需要為每個分割槽指定值範圍或值列表,它們是由OneProxy裡的雜湊演算法根據分割槽數自動計算得來的。當按雜湊演算法分割槽時,分割槽數量不能隨便調整。

例如,一個訂單表按雜湊演算法進行分割槽的設計如下所示:

[{"table" : "t_ order","pkey" : "id","type" : "int","method" : "hash","partitions" :[{ "suffix" :" 0", "group": "group1" },{ "suffix" :"group": "group2"},{ "suffix" : " _2", "group": "group1" },{ "suffix" :”3",, "group": "group2"}}}}

其中,真實表名由虛擬表名及其後綴組成,並且分別儲存在指定的不同叢集分組中。例如“t order_ 0”將儲存於分組“group1” 中,“t _order_ 1”將儲存於分組“group2"中。

針對上面三種分割槽方法,讀者可以根據實際情況進行選用。一般建議使用雜湊演算法進行分割槽,這樣資料分佈會比較合理。

分割槽的配置都是使用文字檔案實現的,如果想在-一個檔案中使用多個分割槽配置,則可以使用如下所示的格式進行配置:

{{"table" : "t_ goods","pkey" : "id","type" : "int","method""hash","partitions" :{{ "suffix" :" _0", "group": "group1" },"suffix" :"group": "group2" },"suffix": " 2","group": "group1" },"suffix" : "_3", "group": "group2"}}},"table" : "t order","pkey" : "id","type" :"char","method""hash","partitions" :[{"suffix" : " 0", "group": "group1" },{"suffix":"group": "group2" }{"suffix" :" 2", "group": "group1" },{ "suffix" : "_3", "group": "group2"}}}}

在檔案配置完成之後( 例如將配置檔案儲存為part1.txt) ,可以使用如下所示的方式把它加到OneProxy的配置之中:

proxy-part-tables.1 = /usr/ 1ocal/ oneproxy/conf/part1.txt
雙機熱備設計

在使用了資料庫的代理中介軟體之後,我們就實現了高效能的讀寫分離配置,但是,對於代理伺服器本身,還存在-一個單點故障問題。

想要解決單點故障問題,就需要使用LVS和Keepalived實現雙機熱備設計。

LVS是Linux虛擬伺服器的簡稱。Linux 核心已經完全內建了LVS的各個功能模組,它工作在OSI (Open System Interconnect)模型的網路層中,可以進行負載均衡和伺服器叢集設計。

Keepalived是一個交換機軟體,工作在OSI模型的網路層、傳輸層和應用層中,主要提供負載均衡和高可用等功能。負載均衡的實現需要依賴LVS核心的IPVS模組,而高可用是透過VRRP (Virtual Router Redundancy Protocol,虛擬路由冗餘協議)實現多臺機器之間的故障轉移服務的。

使用LVS+Keepalived可以在OnePoxy的伺服器之上構建-一個雙機熱備設計,如圖13-3所示。

在這個架構設計中,包含-一個廣播IP地址和四個伺服器,如下所示:

VIP: 10.10.10.100LVS Master: 10.10.10.28LVS Back: 10.10.10.38Real Server1: 10.10.10.24Real Server2: 10.10. 10.34

其中,VIP是一個虛擬的廣播IP地址,LVS_ Master 和LVS_ _Back 是雙機熱備的主機伺服器和備機伺服器,Real Server 是真實伺服器,即已經安裝了OneProxy 的資料庫代理伺服器。下面詳細說明各個伺服器的設定。

Real Server配置

參照13.6節OneProxy的安裝和配置方法,在另- - 臺伺服器(假如IP地址為10.10.10.34)上安裝一個配置相同的OneProxy代理伺服器,然後在這兩臺機器上配置Real_ Server。

使用如下命令建立-一個啟動檔案:

vi /etc/init. d/ realserver

輸入如下內容:

SNS VIP=10.10.10.100/etc/rc.d/init. d/ functionscase "$1" instart)ifconfig lo:0 $SNS_ VIP netmask 255.255.255.255 broadcast $SNS_ VIP/sbin/route add -host $SNS_ VIP dev 1o:0echo "1" >/proc/sys/net/ipv4/conf/1o/arp_ ignoreecho "2" >/proc/sys/net/ ipv4/conf/1o/arp_ announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_ announcesysctl -p >/dev/null 2>&1echo "RealServer Start OK";;stop)ifconfig 1o:0 downroute del $SNS_ VIP > /dev/null 2>&1echo "0" >/proc/sys/net/ ipv4/conf/1o/arp_ ignoreecho "0" >/proc/sys/net/ ipv4/conf/lo/arp_ announceecho "0" >/proc/sys/net/ ipv4/conf/all/arp_ ignoreecho "0" >/proc/sys/net/ ipv4/conf/all/arp announceecho "RealServer Stoped";*)echo "Usage: $0 {startIstop}"exit 1I esacexit0

儲存並退出編輯狀態。

將檔案設為可執行:

chmod 755 /etc/ init.d/ realserver

使用下列命令啟動服務:

service realserver start

LVS 主機配置

使用如下命令,安裝Keepalived:

yum install -y keepalived

進入安裝目錄:

cd /etc/keepalived

清除原來的配置:

> keepal ived. conf

重新編輯配置:

vi keepalived. conf
設定如下所示內容:global defs {noti fication email {demo@com. cn}notification email_ from demo@com. cnsmtp_ server 10.10.10.1smtp_ connection timeout 30router_ id LVS_ DEVEL # LVS的ID,在一個網路內應該是唯一的}vrrp_ instance VI 1 {state MASTER#指定Keepalived的角色,MASTER為主機,BACKUP 為備用機interface ens192 #本機網絡卡名稱, 可使用ifconfig命令檢視virtual_ router_ id 51 #虛擬路由編號, 主機和備用機要一- 致priority 100 #定義優先順序, 數字越大,優先順序越高,主機DR必須大於備用機DRadvert_ int 1 #檢查間隔, 預設為1sauthentication {auth_ type PASSauth pass 1111}virtual ipaddress {10.10.10.100 #定義 VIP地址,可設定多個,每行一個}}#定義對外提供服務的LVS的VIP地址及portvirtual server 10.10.10.100 3306 {delay loop 6 #設定健康檢查時間,單位是秒1b_ algo wrr #設定負載排程的演算法為WRR1b kind DR #設定IVS實現負載的機制,有NAT、TUN和DR三個模式nat_ mask 255.255.255.0persistence_ timeout 0protocol TCPreal_ server 10.10.10.26 3306 { #指定Real_ Serverl 的IP地址weight 3#配置節點權重,數字越大,權重越高TCP CHECK {connect timeout 10nb_ get_ retry 3delay_ before_ retry 3connect_ port 3306}}real_ server 10.10.10.36 3306 { # 指定Real_ Server2 的IP地址weight 3 #配置節點權值重,數字越大,權重越高TCP CHECK {connect timeout 10nb _get_ retry 3delay before_ retry 3connect port 3306}}}

啟動Keepalived:

service keepalived start

啟動VIP地址:

ifconfig ens192:0 10.10.10.100 broadcast 10.10.10.100 netmask 255.255.255.255up

使用如下命令檢視VIP地址的啟動結果:

ip addr

如果在輸出結果中能看到VIP地址為“10.10.10.100”,則表示啟動成功,程式碼如下所示:

1: 1o: <LOOPBACK,UP,LOWER _UP> mtu 65536 qdisc noqueue state UNKNOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host 1ovalid lft forever preferred lft foreverinet6: :1/128 scope hostvalid lft forever preferred_ lft forever2: ens192: <BROADCAST ,MULTICAST,UP, LOWER UP> mtu 1500 qdisc pfifo_ fast state UPqlen1000link/ether 00:0c:29:81:6a:85 brd ff:ff:ff:ff:ff:ffinet 10.10.10.26/24 brd 10.10.10.255 scope global ens192valid_lft forever preferred_ lft foreverinet 10.10.10.100/32 brd 10.10.10.100 scope global ens192:0valid lft forever preferred lft foreverinet6 fe80: :20c:29ff:fe81:6a85/64 scope linkvalid lft forever preferred lft forever

如果要關閉VIP地址,則可以使用如下命令:

I i fconfig ens192:0 down

LVS備用機配置

備用機的安裝方法和過程與主機基本相同,只有"keepalived.conf" 的配置內容略有不同,

程式碼如下所示:

global defsnoti fication email {demo@com. cn}notification email_ from demo@com. cnsmtp_ server 10.10.10.1smtp connection timeout 30router_ _id LVS_ DEVEL # LVS的ID,在一個網路內應該是唯一的}vrrp instance VI 1 {state BACKUP#指定Keepalived的角色,MASTER為主機,BACKUP 為備用機interface ens192 #本機網絡卡名稱,可使用ifconfig命令檢視virtual_ router_ id 51 #虛擬路由編號, 主機和備用機要一致priority 99 #定義優先順序, 數字越大,優先順序越高,主機DR必須大於備用機DRadvert_ int. 1 #檢查間隔, 預設為1sauthentication {auth_ type PASSauth pass 1111virtual ipaddress {10.10.10.100 #定義 VIP地址,可設定多個,每行一個}}#定義對外提供服務的LVS的VIP地址及portvirtual_ server 10.10.10.100 3306 {delay_ loop 6 #設定健康檢查時間,單位是秒1b_ algo wrr #設定負載排程的演算法為WRRlb kind DR #設定LVS實現負載的機制,有NAT、 TUN和DR三個模式nat_ mask 255.255.255.0persistence_ timeout (protocol TCPreal server 10.10.10.26 3306 { #指定Real_ Serverl 的IP地址weight 3 # 配置節點權重,數字越大,權重越高rCP CHECK {connect_ timeout 10nb_ get_ retry 3delay_ before_ retry 3connect_ port 3306}}real server 10.10.10.36 3306 { # 指定Real Server2 的IP地址weight 3 # 配置節點權重,數字越大,權重越高TCP CHECK {connect_ timeout 10nb_ get_ retry 3delay_ before_ retry 3connect_ port 3306}}}

其中,在“rp jinstance" 配置中,把“state”改為“BACKUP”,把“priority"改為“99”,其他各項配置基本相同。

在啟動了雙機熱備的資料庫代理服務之後,在微服務應用中,即可將資料來源中連線伺服器的地址改為VIP地址。

小結

本章介紹了在CentOS 7中安裝MySQL的簡易方法,並使用主從設計構建了分散式的資料庫叢集,搭建了-一個高效能、可擴充套件的資料庫叢集體系,同時,使用分組的方式實現了高可用叢集的設計。在資料庫訪問設計中,使用OneProxy中介軟體實現了可配置的讀寫分離呼叫方法,並結合分庫分表功能提高了資料庫的訪問效率。最後,使用雙機熱備設計,為資料庫代理中介軟體及其叢集的使用提供更加安全可靠的有力保障。

透過本章對資料庫叢集設計的介紹,讀者可深入地理解資料庫叢集的工作原理。如果使用雲服務的資料庫,則建議使用雲服務供應商提供的分散式資料庫,這樣可以使價效比更高。

15
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 【20201003】ElasticSearch安裝筆記