drbd編譯安裝
㈠ 怎麼在linux上內核啟動drbd模塊
linux下編譯運行驅動嵌入式linux下設備驅動的運行和linux x86 pc下運行設備驅動是類似的,由於手頭沒有嵌入式linux設備,先在vmware上的linux上學習驅動開發。
按照如下方法就可以成功編譯出hello world模塊驅動。
1、首先確定本機linux版本
怎麼查看Linux的內核kernel版本?
'uname'是Linux/unix系統中用來查看系統信息的命令,適用於所有Linux發行版。配合使用'uname'參數可以查看當前伺服器內核運行的各個狀態。
㈡ heartbeat在rhel5上安裝包與安裝基本步驟
這個啊,用Grub安裝。不過ISO文件必須放在FAT32的分區。
詳細補充說明:首先下載RHEL5的5塊CD盤或1塊DVD盤,把它們放到一個FAT32的分區根目錄里,再下載個GRUB4DOS,裝好GRUB4DOS後,在menu.lst文件里添加下面代碼:
title install RHEL5
root (hd0,0)
kernel /vmlinuz
initrd /initrd.img
並在RHEL5的第一塊CD盤或DVD盤里提取出一個名為boot.iso的文件,將這個文件里的vmlinuz和initrd.img提取出放到C盤目錄里,C盤格式可以是NTFS也可以是FAT32。(注意,vmlinuz和initrd.img這兩個文件只能從那個boot.iso文件中提取出來,其他文件夾內的無法啟動硬碟安裝)重啟電腦,進去GRUB選單,裡面選擇「install RHEL5」就可以啟動安裝程序了。
多說的話:不建議安裝RHEL5,安裝要序列號,並且只能試用30天,官方也不提供更新,因為這個系統是要錢DI。你可以安裝CENTOS5,這個本質和RHEL5是一樣的,是RHEL5的二次開發版本,其實就是下載了RHEL5的源代碼重新編譯生成的LINUX發行版,但是CENTOS5是免費,並且也提供更新,我也裝過,穩定性還不錯要比Fedora 7穩定多了。但是硬碟安裝CENTOS5隻能下載6CD版本,它的DVD版本無法硬碟安裝,而且存在很多安裝問題。
㈢ 資料庫如何優化
body{
line-height:200%;
}
如何優化Mysql資料庫
當MySQL資料庫邂逅優化,它有好幾個意思,今天我們所指的是性能優化。
我們究竟該如何對MySQL資料庫進行優化呢?下面我就從MySQL對硬體的選擇、Mysql的安裝、my.cnf的優化、MySQL如何進行架構設計及數據切分等方面來說明這個問題。
1.伺服器物理硬體的優化
1)磁碟(I/O),MySQL每一秒鍾都在進行大量、復雜的查詢操作,對磁碟的讀寫量可想而知,所以推薦使用RAID1+0磁碟陣列,如果資金允許,可以選擇固態硬碟做RAID1+0;
2)cpu對Mysql的影響也是不容忽視的,建議選擇運算能力強悍的CPU。
2.MySQL應該採用編譯安裝的方式
MySQL資料庫的線上環境安裝,我建議採取編譯安裝,這樣性能會較大的提升。
3.MySQL配置文件的優化
1)skip
-name
-resolve,禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間;
2)back_log
=
384,back_log指出在MySQL暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆棧中,對於Linux系統而言,推薦設置小於512的整數。
3)如果key_reads太大,則應該把my.cnf中key_buffer_size變大,保持key_reads/key_read_requests至少在1/100以上,越小越好。
4.MySQL上線後根據status狀態進行適當優化
1)打開慢查詢日誌可能會對系統性能有一點點影響,如果你的MySQL是主-從結構,可以考慮打開其中一台從伺服器的慢查詢日誌,這樣既可以監控慢查詢,對系統性能影響也會很小。
2)MySQL伺服器過去的最大連接數是245,沒有達到伺服器連接數的上限256,應該不會出現1040錯誤。比較理想的設置是:Max_used_connections/max_connections
*
100%
=85%
5.MySQL資料庫的可擴展架構方案
1)MySQL
cluster,其特點為可用性非常高,性能非常好,但它的維護非常復雜,存在部分Bug;
2)DRBD磁碟網路鏡像方案,其特點為軟體功能強大,數據可在底層塊設備級別跨物理主機鏡像,且可根據性能和可靠性要求配置不同級別的同步。
㈣ ubuntu14.04 怎麼編譯安裝drbd
apt-get install build-essential 安裝編譯環境, apt-get install linux-source 安裝源碼 cd /usr/src tar xvjf linux-source-2.6.24.tar.bz2 cd linux-srouce-2.6.24 下面就可以按照一般的方式編譯了
㈤ 怎樣給訪問量過大的mysql資料庫減壓
單機MySQL資料庫的優化
一、伺服器硬體對MySQL性能的影響
①磁碟尋道能力(磁碟I/O),我們現在上的都是SAS15000轉的硬碟。MySQL每秒鍾都在進行大量、復雜的查詢操作,對磁碟的讀寫量可想而知。
所以,通常認為磁碟I/O是制約MySQL性能的最大因素之一,對於日均訪
問量在100萬PV以上的Discuz!論壇,由於磁碟I/O的制約,MySQL的性能會非常低下!解決這一制約因素可以考慮以下幾種解決方案:
使用RAID1+0磁碟陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁碟陣列上的效率不會像你期待的那樣快。
②CPU 對於MySQL應用,推薦使用DELL R710,E5620 @2.40GHz(4 core)* 2 ,我現在比較喜歡DELL R710,也在用其作Linuxakg 虛擬化應用;
③物理內存對於一台使用MySQL的Database Server來說,伺服器內存建議不要小於2GB,推薦使用4GB以上的物理內存,不過內存對於現在的伺服器而言可以說是一個可以忽略的問題,工作中遇到高端伺服器基本上內存都超過了32G。
我們工作中用得比較多的資料庫伺服器是HP DL580G5和DELL R710,穩定性和性能都不錯;特別是DELL R710,我發現許多同行都是採用它作資料庫的伺服器,所以重點推薦下。
二、MySQL的線上安裝我建議採取編譯安裝的方法,這樣性能上有較大提升,伺服器系統我建議用64bit的Centos5.5,源碼包的編譯參數會默
認以Debgu模式生成二進制代碼,而Debug模式給MySQL帶來的性能損失是比較大的,所以當我們編譯准備安裝的產品代碼時,一定不要忘記使用「—
without-debug」參數禁用Debug模式。而如果把—with-mysqld-ldflags和—with-client-ldflags二
個編譯參數設置為—all-static的話,可以告訴編譯器以靜態方式編譯和編譯結果代碼得到最高的性能。使用靜態編譯和使用動態編譯的代碼相比,性能
差距可能會達到5%至10%之多。我參考了簡朝陽先生的編譯參數,特列如下,供大家參考
./configure
–prefix=/usr/local/mysql –without-debug –without-bench
–enable-thread-safe-client –enable-assembler –enable-profiling
–with-mysqld-ldflags=-all-static –with-client-ldflags=-all-static
–with-charset=latin1 –with-extra-charset=utf8,gbk –with-innodb
–with-csv-storage-engine –with-federated-storage-engine
–with-mysqld-user=mysql –without-我是怎麼了ded-server
–with-server-suffix=-community
–with-unix-socket-path=/usr/local/mysql/sock/mysql.sock
三、MySQL自身因素當解決了上述伺服器硬體制約因素後,讓我們看看MySQL自身的優化是如何操作的。對 MySQL自身的優化主要是對其配置文件my.cnf中的各項參數進行優化調整。下面我們介紹一些對性能影響較大的參數。
下面,我們根據以上硬體配置結合一份已經優化好的my.cnf進行說明:
#vim /etc/my.cnf
以下只列出my.cnf文件中[mysqld]段落中的內容,其他段落內容對MySQL運行性能影響甚微,因而姑且忽略。
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
#避免MySQL的外部鎖定,減少出錯幾率增強穩定性。
skip-name-resolve
#禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!
back_log = 384
#back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。
如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。不同的操作系統在這個隊列大小上有它自
己的限制。 試圖設定back_log高於你的操作系統的限制將是無效的。默認值為50。對於Linux系統推薦設置為小於512的整數。
key_buffer_size = 384M
#key_buffer_size指定用於索引的緩沖區大小,增加它可得到更好的索引處理性能。對於內存在4GB左右的伺服器該參數可設置為256M或384M。注意:該參數值設置的過大反而會是伺服器整體效率降低!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 614K
sort_buffer_size = 6M
#查詢排序時所能使用的緩沖區大小。注意:該參數對應的分配內存是每連接獨占,如果有100個連接,那麼實際分配的總共排序緩沖區大小為100 × 6 = 600MB。所以,對於內存在4GB左右的伺服器推薦設置為6-8M。
read_buffer_size = 4M
#讀查詢操作所能使用的緩沖區大小。和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。
join_buffer_size = 8M
#聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
#指定MySQL查詢緩沖區的大小。可以通過在MySQL控制台觀察,如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩沖不
夠
的情況;如果Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,如果該值較小反而會影響效率,那麼可以考慮不用查詢緩
沖;Qcache_free_blocks,如果該值非常大,則表明緩沖區中碎片很多。
tmp_table_size = 256M
max_connections = 768
#指定MySQL允許的最大連接進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。
max_connect_errors = 1000
wait_timeout = 10
#指定一個請求的最大連接時間,對於4GB左右內存的伺服器可以設置為5-10。
thread_concurrency = 8
#該參數取值為伺服器邏輯CPU數量*2,在本例中,伺服器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實際取值為4*2=8;這個目前也是雙四核主流伺服器配置。
skip-networking
#開啟該選項可以徹底關閉MySQL的TCP/IP連接方式,如果WEB伺服器是以遠程連接的方式訪問MySQL資料庫伺服器則不要開啟該選項!否則將無法正常連接!
table_cache=1024
#物理內存越大,設置就越大。默認為2402,調到512-1024最佳
innodb_additional_mem_pool_size=4M
#默認為2M
innodb_flush_log_at_trx_commit=1
#設置為0就是等到innodb_log_buffer_size列隊滿後再統一儲存,默認為1
innodb_log_buffer_size=2M
#默認為1M
innodb_thread_concurrency=8
#你的伺服器CPU有幾個就設置為幾,建議用默認一般為8
key_buffer_size=256M
#默認為218,調到128最佳
tmp_table_size=64M
#默認為16M,調到64-256最掛
read_buffer_size=4M
#默認為64K
read_rnd_buffer_size=16M
#默認為256K
sort_buffer_size=32M
#默認為256K
thread_cache_size=120
#默認為60
query_cache_size=32M
※值得注意的是:
很多情況需要具體情況具體分析
一、如果Key_reads太大,則應該把my.cnf中Key_buffer_size變大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。
二、如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。
很多時候我們發現,通過參數設置進行性能優化所帶來的性能提升,可能並不如許多人想像的那樣產生質的飛躍,除非是之前的設置存在嚴重不合理的情況。我們
不能將性能調優完全依託於通過DBA在資料庫上線後進行的參數調整,而應該在系統設計和開發階段就盡可能減少性能問題。
【51CTO獨家特稿】如果單MySQL的優化始終還是頂不住壓力時,這個時候我們就必須考慮MySQL的高可用架構(很多同學也愛說成是MySQL集群)了,目前可行的方案有:
一、MySQL Cluster
優勢:可用性非常高,性能非常好。每份數據至少可在不同主機存一份拷貝,且冗餘數據拷貝實時同步。但它的維護非常復雜,存在部分Bug,目前還不適合比較核心的線上系統,所以這個我不推薦。
二、DRBD磁碟網路鏡像方案
優勢:軟體功能強大,數據可在底層快設備級別跨物理主機鏡像,且可根據性能和可靠性要求配置不同級別的同步。IO操作保持順序,可滿足資料庫對數據一致
性的苛刻要求。但非分布式文件系統環境無法支持鏡像數據同時可見,性能和可靠性兩者相互矛盾,無法適用於性能和可靠性要求都比較苛刻的環境,維護成本高於
MySQL Replication。另外,DRBD也是官方推薦的可用於MySQL高可用方案之一,所以這個大家可根據實際環境來考慮是否部署。
三、MySQL Replication
在實際應用場景中,MySQL
Replication是使用最為廣泛的一種提高系統擴展性的設計手段。眾多的MySQL使用者通過Replication功能提升系統的擴展性後,通過
簡單的增加價格低廉的硬體設備成倍
甚至成數量級地提高了原有系統的性能,是廣大MySQL中低端使用者非常喜歡的功能之一,也是許多MySQL使用者選擇MySQL最為重要的原因。
比較常規的MySQL Replication架構也有好幾種,這里分別簡單說明下
MySQL Replication架構一:常規復制架構--Master-slaves,是由一個Master復制到一個或多個Salve的架構模式,主要用於讀壓力大的應用資料庫端廉價擴展解決方案,讀寫分離,Master主要負責寫方面的壓力。
MySQL Replication架構二:級聯復制架構,即Master-Slaves-Slaves,這個也是為了防止Slaves的讀壓力過大,而配置一層二級 Slaves,很容易解決Master端因為附屬slave太多而成為瓶勁的風險。
MySQL Replication架構三:Dual Master與級聯復制結合架構,即Master-Master-Slaves,最大的好處是既可以避免主Master的寫操作受到Slave集群的復制帶來的影響,而且保證了主Master的單點故障。
以上就是比較常見的MySQL replication架構方案,大家可根據自己公司的具體環境來設計 ,Mysql 負載均衡可考慮用LVS或Haproxy來做,高可用HA軟體我推薦Heartbeat。
MySQL
Replication的不足:如果Master主機硬體故障無法恢復,則可能造成部分未傳送到slave端的數據丟失。所以大家應該根據自己目前的網路
規劃,選擇自己合理的Mysql架構方案,跟自己的MySQL
DBA和程序員多溝涌,多備份(備份我至少會做到本地和異地雙備份),多測試,數據的事是最大的事,出不得半點差錯
㈥ 如何編譯drbd
(一)DRBD的編譯安裝
1、DRBD軟體包的獲取
[root@www tmp]# wget http://oss.linbit.com/drbd/8.3/drbd-8.3.10.tar.gz
2、DRBD的編譯
解壓:
[root@www tmp]# tar -zxvf drbd-8.3.10.tar.gz
進入:
[root@www tmp]# cd drbd-8.3.10
編譯:
[root@www drbd-8.3.10]# ./configure –prefix=/ –with-km
[root@www drbd-8.3.10]# make
3、DRBD的安裝
[root@www drbd-8.3.10]# make install
4、查看安裝是否成功
[root@www drbd-8.3.10]# drbdadm
USAGE: drbdadm [OPTION...] [-- DRBDSETUP-OPTION...] COMMAND {all|RESOURCE…}
OPTIONS:
{–stacked|-S}
{–dry-run|-d}
{–verbose|-v}
{–config-file|-c} val
{–config-to-test|-t} val
{–drbdsetup|-s} val
{–drbdmeta|-m} val
{–drbd-proxy-ctl|-p} val
{–sh-varname|-n} val
{–force|-f}
{–peer|-P} val
{–version|-V}
COMMANDS:
attach detach
connect disconnect
up down
primary secondary
invalidate invalidate-remote
outdate resize
syncer verify
pause-sync resume-sync
adjust wait-connect
wait-con-int role
cstate dstate
mp mp-xml
create-md show-gi
get-gi mp-md
wipe-md hidden-commands
Version: 8.3.10 (api:88)
GIT-hash: build by [email protected], 2011-04-26 10:47:49
missing arguments
參考:http://blog.chinaunix.net/uid-24020646-id-2942207.html
㈦ 基於MySQL雙主的高可用解決方案理論及實踐
MySQL在互聯網應用中已經遍地開花,但是在銀行系統中,還在生根發芽的階段。本文記錄的是根據某生產系統實際需求,對資料庫高可用方案從需求、各高可用技術特點對比、實施、測試等過程進行整理,完善Mysql高可用方案,同時為後續開展分布式資料庫相關測試做相應准備。
存儲復制技術: 傳統IOE架構下,常用高可用方案,靠存儲底層復制技術實現數據的一致性,優點數據安全性有保障,限制在於是依賴存儲硬體,實施成本較高。
keepalived+雙主復制: 兩台MySQL互為主從關系,即雙主模式,通過Keepalived配置虛擬IP,實現當其中的一台資料庫故障時,自動切換VIP到另外一台MySQL資料庫,備機快速接管業務來保證資料庫的高可用。
MHA: MHA部署在每台mysql伺服器上,定時探測集群中的master節點,當master出現故障時,它可以自動將最新的slave提升為新的master,然後將所有其他的slave重新指向新的master,優點在最大程度保證數據的一致性的前提下實現快速切換,最少需要3台伺服器,存在數據丟失的可能性。
PXC: Percona eXtra Cluster是Percona基於galera cluster封裝的集群方案。不同於普通多主復制,PXC保障強一致性和實時同步,故障切換更快。但是也需要3個節點,配置相對復雜,對性能也稍有影響。
除了上述方案外,還有MMM、Heartbeat+DRBD等高可用方案,此處不做詳細介紹。
綜合評估下,本次實施採用了 keepalived+mysql雙主實現資料庫同城雙機房的高可用。MySQL版本為: 5.7.21。操作系統:Red Hat Enterprise Linux Server 7.3。
配置過程如下:
Mysql-master1: IP地址1 --以下簡稱master1
Mysql-master2: IP地址2 --以下簡稱master2
Mysql-vip : VIP地址 --應用連接使用
Mysql復制相關概念描述:
1、 Mysql主從復制圖示:
2、 Mysql主從復制過程描述:
(1)master記錄二進制日誌:在每個事務更新數據完成之前,master在二進制日誌記錄這些改變。MySQL將事務寫入二進制日誌。在事務寫入二進制日誌完成後,master通知存儲引擎提交事務。
(2)slave將master的binarylog拷貝到自己的中繼日誌:首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接,然後開始binlog mp process。Binlog mp process從master的二進制日誌中讀取事務,如果已經同步了master,它會睡眠並等待master產生新的事件。I/O線程將這些事務寫入中繼日誌。
(3)SQL slave thread處理該過程的最後一步:SQL線程從中繼日誌讀取事務,並重放其中的事務而更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日誌通常會位於OS的緩存中,所以中繼日誌的開銷很小。
主主同步就是兩台機器互為主的關系,在任何一台機器上寫入都會同步至備端。
為了便於後續資料庫伺服器的擴展,且在整個復制環境中能夠自動地切換,降低運維成本,引入了當前主流的基於Mysql GTID的復制特性,工作原理及優缺點簡介如下。
3、 GTID工作原理簡介:
(1) master更新數據時,會在事務前產生GTID,一同記錄到Binlog日誌中。
(2) slave的I/O線程將變更的binlog寫入到本地的relay log中。
(3) slave的sql線程從relay log中獲取GTID,然後對比slave端的binlog是否有記錄。
(4) 如果有記錄說明該GTID的事務已經執行,slave會忽略。
(5) 如果沒有記錄,slave就會從relay log中執行該GTID的事務,並記錄到binlog。
(6) 在解析的過程中會判斷是否有主鍵,如果有就用索引,如果沒有就用全部掃描。
4、 GTID優點:
(1) 一個事務對應一個唯一的ID,一個GTID在一個伺服器上 只會執行一次。(2) GTID是用來替代傳統復制的方法,GTID復制與普通復制模式的最大不同就是不需要指定二進制文件名和位置。
(3) 減少手工干預和降低服務故障時間,當主機宕機之後會通過軟體從眾多的備機中提升一台備機為新的master。
5、 GTID也存在一些限制:
(1) 不支持非事務引擎。
(2) 不支持create table … select 語句復制(主庫直接報錯)。
(3) 不允許一個sql同時更新一個事務引擎表和非事務引擎表。
(4) 在一個復制組中,必須要求統一開啟GTID或者是統一關閉GTID。
(5) 開啟GTID需要重啟(5.7版本除外)。
(6) 開啟GTID後,就不再使用原理的傳統復制方式。
(7) 不支持create temporary table 和 drop temporary table語句。
(8) 不支持sql_slave_skip_counter。
前置條件:
主備兩個節點使用行內統一的安裝部署腳本安裝mysql5.7.21介質(略)
Master1端創建應用的資料庫(略)
1、 修改MySQL配置文件
參考相關配置規范,分別設置master1、master2的my.cnf文件,
其中server-id參數設置為不同值;
由於後續keepalived會掛起VIP,應用通過VIP連接資料庫,為了避免應用程序無法通過VIP訪問,需將兩個節點的bind-address參數注釋掉;
2、 設置master1端自動半同步模式
Mysql的同步模式主要有如下3種:
a. 主從同步復制:數據完整性好,但是性能消耗略高;
b. 主從非同步復制:性能消耗低,但容易出現不一致;
c. 主從半自動復制:介於上述兩種之間,既保持了數據的完整性,又提高了性能;
基於上述特性,建議採用半自動同步模式,由於後續要配置為雙主模式,因此任一節點其角色既為master又為slave,因此相關的master/slave插件要同時配置,過程如下。
(1) 首先查看庫是否支持動態載入(默認都支持)
(2) 主從庫上分別安裝插件
作為主庫,安裝插件semisync_master.so
作為從庫,安裝插件semisync_slave.so
(3) 安裝完成後,從plugin表中能夠看到剛剛安裝的插件
(4) 分別打開主從庫半同步復制
同時添加到各自的my.cnf中,在後續資料庫實例重啟時自動載入該配置。
此時查看狀態還沒有啟動
(5) 兩個節點分別啟動IO進程
(6) 查看半同步狀態
3、 將master1設為master2的主伺服器
(1)在master1主機上創建授權賬戶,允許在master2主機上連接
(2)將主庫master1數據導出
(3)將master.sql傳輸到master2上並導入
(4)在master2端將master1設置為自己的主庫,並開啟slave功能
在master2上查看slave狀態
至此master1到master2的主從復制關系已經建立完成。
4、 將master2設為master1的主伺服器
在master1上執行
在master1上查看slave狀態
1、keepalived相關概念說明:
keepalived是集群管理中保證集群高可用的一個軟體解決方案,其功能類似於heartbeat,用來防止單點故障
keepalived是以VRRP協議為實現基礎的,VRRP全稱VirtualRouter Rendancy Protocol,即虛擬路由冗餘協議。
虛擬路由冗餘協議,可以認為是實現路由器高可用的協議,即將N台提供相同功能的路由器組成一個路由器組,這個組裡面有一個master和多個backup,master上面有一個對外提供服務的vip,master會發組播(組播地址為224.0.0.18),當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先順序來選舉一個backup當master,這樣的話就可以保證路由器的高可用了。
keepalived主要有三個模塊,分別是core 、check和vrrp。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的載入和解析。check負責 健康 檢查,包括常見的各種檢查方式。vrrp模塊是來實現VRRP協議的。同時為了避免出現腦裂,應關閉防火牆或者開啟防火牆但允許接收VRRP協議。
2、keepalived的安裝配置
(1)配置本地yum源,在master1和master2兩台伺服器上安裝keepalived的相關依賴包Kernel-devel/openssl-devel/popt-devl等
配置指向rhel-7.5.iso的yum本地源,步驟略
注意:如不知道keepalived需要哪些依賴包,可到下載後的源碼解壓目錄下查看INSTALL 文件內容,安裝需要的依賴包,源碼安裝任何一個軟體都要養成查看源碼包文檔的習慣,比如INSTALL,README,doc等文檔,可以獲得很多有用的信息。
(2)在兩台mysql上解壓縮並編譯安裝keepalived
(3)master1、master2上分別配置keepalived.conf
注意上圖紅色字體中兩個節點配置相同處及差異。
說明:keepalived只有一個配置文件keepalived.conf,裡面主要包括以下幾個配置區域:
· global_defs:主要是配置故障發生時的通知對象以及機器標識。
· vrrp_instance:用來定義對外提供服務的VIP區域及其相關屬性。
· virtual_server:虛擬伺服器定義
(4)同時兩個節點上都需要添加檢測腳本
作用:是當mysql停止工作時自動關閉本機的keeplived服務,從而實現將故障主機踢出熱備組,因每台機器上keepalived只添加了本機為realserver,所以當mysqld正常啟動後,我們還需要手動啟動keepalived服務。
(5)分別啟動兩個節點的keepalived服務
檢查兩個節點keepalived啟動進程
檢查兩個節點的vip掛載情況
(6)主備機故障切換測試
停止master2的mysql服務,看keepalived 健康 檢查程序是否會觸發腳本,自動進行故障切換,步驟略
查看master1節點的VIP掛載情況,驗證是否實現了自動切換,步驟略
說明在master2伺服器的mysql服務發生故障時,觸發了腳本,自動完成了切換。
(7)現在我們把master2的mysql服務開起來,並且keepalived的服務也需要啟動。
即便master2的mysql服務和keepalived服務都重新開啟了,master1仍然是主master了,master2未對主master的權利進行搶奪,說明設置的nopreempt參數生效了,為了保證群集的穩定性,生產環境不允許搶占配置,只有當master1的mysql服務壞掉的時候,master2才會再次成為主master,否則它永遠只能當master1的備份。(註:nopreempt一般是在優先順序高的mysql上設置)
Sysbench是一個模塊化的、跨平台、多線程基準測試工具,可用於評估資料庫負載情況,通過sysbench命令配置IP地址、埠號、用戶名、密碼連接到指定的資料庫db1中,創建多個表,並快速插入指定條數的記錄,觀察主備庫同步效率
(1) 下載開源工具sysbench-0.4.12.14.tar.gz,放置在相應目錄下並解壓
(2) 使用iso配置本地yum源並安裝Sysbench如下的依賴包(步驟略):autoconf/automake/cdbs/debhelper(>=9)/docbook-xml/docbook-xsl/libmysqlclient15-dev/libtool/xsltproc
(3) 編譯sysbench
編輯配置文件/etc/ld.so.conf中添加mysql lib目錄/mysql/app/5.7.21/lib,並執行命令ldconfig生效
(4) 執行sysbench壓測
使用sysbench工具向主節點的db1資料庫中創建5張表,並且每張表分別插入10萬條記錄
同時觀察備機同步效率
幾個重要的參數說明:
B、半自動同步模式、非同步模式切換測試
(1) 檢查主備同步狀態,及同步參數設置
rpl_semi_sync_master_enabled參數表示啟用半同步模式;
rpl_semi_sync_master_timeout參數單位為毫秒,表示主庫事務等待從庫返回commit成功信息超過10秒就降為非同步模式,不再等待從庫,等探測到從庫io線程恢復後,再返回為半自動同步;
rpl_semi_sync_master_wait_no_slave參數表示事務提交後需要等待從庫返回確認信息;
(2) 將slave的io線程停止
(3) 使用sysbench向master寫入少量的數據,本例創建一張表,並插入10條記錄,命令包裝在1.sh測試腳本中
通過記錄的時間戳發現,master在等待了slave10秒無響應,自動切換為非同步模式,將數據寫入本地。
(4) Slave啟動io線程,數據自動追平
至此MySQL主主復制配置完成,運行在半自動同步模式,通過keepalived實現Mysql的HA高可用。
上線後應符合統一的標准監控策略,添加備份協議對數據進行周期備份並保存到帶庫中,以及定期的數據恢復測試。
由於是靠keepalived實現的高可用,還應將如下資源添加到監控管理平台:
1、 對每台資料庫主機的3個keepalived進程進行監控;
2、 對主備節點的io線程、sql線程工作狀態進行監控;
