下文我給大家簡單講講關(guān)于搭建MySQL雙主MM+keepalived高可用架構(gòu)的具體流程,大家之前了解過相關(guān)類似主題內(nèi)容嗎?感興趣的話就一起來看看這篇文章吧,相信看完搭建MySQL雙主MM+keepalived高可用架構(gòu)的具體流程對大家多少有點(diǎn)幫助吧。
創(chuàng)新互聯(lián)從2013年成立,先為凌河等服務(wù)建站,凌河等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為凌河企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。比較常見的高可用架構(gòu)有MHA,MM,PXC等
MM架構(gòu)優(yōu)點(diǎn)是:
搭建快速方便,適合中小型公司,MySQL互為主從,保證兩臺數(shù)據(jù)庫的一致性,keepalived實現(xiàn)虛擬IP和自動的服務(wù)監(jiān)控功能,利用VIP自動切換保證高可用,基本可以滿足業(yè)務(wù)需要。
但是這種架構(gòu)存在以下問題:
1 切換后出現(xiàn)雙vip的問題,腦裂問題等,可以通過增加仲裁節(jié)點(diǎn)。
2 切換時丟數(shù)據(jù),可以配合腳本監(jiān)控binlog日志或者采用5.7版本的增強(qiáng)半同步。
3 主從延遲不能避免,如果要求沒有主從延遲,可以采用PXC架構(gòu)。
4 當(dāng)發(fā)生故障的云服務(wù)器恢復(fù)后,不能自動切回,切換回來比較麻煩,還需要手動修改配置文件中的權(quán)重。
5 對腳本編寫的能力也有不小考驗。
想要了解keepalived工作原理和配置文件說明的童鞋可以自行百度,或者看看這篇很詳細(xì), 傳送門keepalived工作原理與配置文件說明
公司大部分的架構(gòu)為MM+keepalived或者M(jìn)M+heartbeat,然后主庫下面掛上從庫作為讀庫,再配合mycat集群實現(xiàn)讀寫分離和分庫分表就是一套比較完善的MySQL高可用架構(gòu)了(如下圖)。
現(xiàn)在有新的業(yè)務(wù)需要一套新的環(huán)境,在此記錄下部署過程,希望對剛接觸MySQL的同學(xué)有所幫助,前面MySQL安裝和主從搭建可以不看,廢話不多少,架構(gòu)圖如下
一 環(huán)境準(zhǔn)備
操作系統(tǒng)版本為 Ubuntu 14.04.5
云服務(wù)器為16G內(nèi)存 4核CPU 1T數(shù)據(jù)目錄存儲
數(shù)據(jù)庫版本為 5.6.39-log
IP規(guī)劃
master1: 192.168.70.154
master2: 192.168.70.156
vip 192.168.70.157
二 MySQL雙主搭架
在兩臺數(shù)據(jù)庫云服務(wù)器上
上傳安裝包
mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
解壓
tar -zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
將解壓后的包移動到MySQL的basedir
mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql
創(chuàng)建mysql組和用戶
groupadd mysql
useradd -r -m -s /bin/bash -g mysql mysql
修改相關(guān)目錄的權(quán)限
chown -R mysql:mysql /usr/local/mysql/
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /etc/my.cnf
編輯配置文件
配置文件需要特別注意的地方為:
1 server-id必須不同,否則主從搭建報錯。
2 主鍵自增參數(shù),可以避免主鍵沖突的錯誤
master1 設(shè)置如下
auto-increment-increment = 2
auto-increment-offset = 1
master 2 設(shè)置如下
auto-increment-increment = 2
auto-increment-offset = 2
下面給出一個比較全的可以作為參考,其他的要根據(jù)自己的實際情況修改:
vim /etc/my.cnf
[client] #password = [your_password] port = 3306 socket = /tmp/mysql.sock #設(shè)置客戶端字符集 default-character-set = utf8 [mysqld] # generic configuration options port = 3306 socket = /tmp/mysql.sock basedir = /usr/local/mysql datadir = /data/mysql user = mysql #設(shè)置云服務(wù)器時區(qū),建議每次都顯示指定 default-time-zone='+8:00' #設(shè)置云服務(wù)器端字符集,注意和客戶端字符集一樣,建議都設(shè)置utf8,防止中文亂碼 character-set-server=utf8 skip-name-resolve #是否支持federated 分布式引擎默認(rèn)不支持 #federated #設(shè)置sql校驗?zāi)J剑撛O(shè)置影響到數(shù)據(jù)庫對字段數(shù)據(jù)的校驗嚴(yán)格程度 #sql_mode = STRICT_TRANS_TABLES expire_logs_days = 15 #在同步配置中這個要額外注意否則容易導(dǎo)致主鍵沖突 auto-increment-increment = 2 auto-increment-offset = 1 back_log = 50 max_connections = 10000 max_connect_errors = 100000 table_open_cache = 1024 #external-locking max_allowed_packet = 16M binlog_cache_size = 2M max_heap_table_size = 64M read_buffer_size = 2M read_rnd_buffer_size = 4M sort_buffer_size = 8M join_buffer_size = 4M thread_cache_size = 64 #這個變量是針對Solaris系統(tǒng)的,如果設(shè)置這個變量的話,mysqld就會調(diào)用thr_setconcurrency()。#這個函數(shù)使應(yīng)用程序給同一時間運(yùn)行的線程系統(tǒng)提供期望的線程數(shù)目。 thread_concurrency = 4 #無論是否有misam表建議都16-128M,如果misam表多那么建議設(shè)置為128M大不要超#過256M #query_cache_size = 64M #query_cache_limit = 2M ft_min_word_len = 4 #memlock #5.5以下版本建議顯示設(shè)置。5.5默認(rèn)是innodb default-storage-engine = innodb thread_stack = 192K # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE transaction_isolation = REPEATABLE-READ tmp_table_size = 64M #防止夸庫更新混亂,同步里推薦的設(shè)置 #replicate_wild_do_table=tang_monitor_report.% replicate_wild_do_table=%.% #建議顯示指定binlog和relaylog的名字,防止因修改hostname而導(dǎo)致出錯 log-bin=mysql-bin relay-log=mysql-relay-bin #binlog記錄格式,建議設(shè)置row,防止statement格式導(dǎo)致的數(shù)據(jù)不一直無法檢測的問題 binlog_format=mixed #設(shè)置是否將主庫的更新寫入binlog ,一般情況關(guān)閉,建議關(guān)閉 log_slave_updates #log_warnings slow_query_log slow_query_log_file=/data/mysql/myslow.log long_query_time = 2 innodb_buffer_pool_instances=4 innodb_change_buffering =changes innodb_old_blocks_time=1000 innodb_autoextend_increment=50 sync_binlog=100 innodb_open_files=1024 innodb_file_per_table =1 open-files-limit = 8192 log-error =/data/mysql/error.log server-id = 3306154 #半同步配置參數(shù),很簡單吧,簡單的讓人震驚 #rpl_semi_sync_slave_enabled=1 #rpl_semi_sync_master_enabled=1 #rpl_semi_sync_master_timeout=1000 #slave庫的時候有用,設(shè)置是否slave庫為只讀,建議開啟 #read_only #misam index 緩存如果misam表多建議適當(dāng)?shù)脑龃?key_buffer_size = 128M bulk_insert_buffer_size = 64M #當(dāng)在REPAIR TABLE或用CREATE INDEX創(chuàng)建索引或ALTER TABLE過程中排序 MyISAM索引分#配的緩沖區(qū)。 myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G #設(shè)置misam表修復(fù)的線程數(shù) myisam_repair_threads = 1 #myisam表自動崩潰恢復(fù)級別 myisam_recover= BACKUP,FORCE #設(shè)置innodb數(shù)據(jù)字典的緩存,一般16-20M基本可以,如果innodb表特別多可適當(dāng)增大到#32M innodb_additional_mem_pool_size = 16M innodb_buffer_pool_size = 10G innodb_data_file_path = ibdata1:512M:autoextend #5.1版本為(innodb_file_io_threads)及其之前的版本都是硬編碼為4,默認(rèn)是4即使修改也無用 ,5.5之后可以修改大#不超過64 innodb_write_io_threads = 8 innodb_read_io_threads = 8 #innodb_force_recovery=1 #設(shè)置innodb內(nèi)部線程并發(fā)數(shù) innodb_thread_concurrency = 16 #設(shè)置日志刷新的方式 innodb_flush_log_at_trx_commit = 1 #設(shè)置binlog刷新方式,1表示提交前寫入了二進(jìn)制,但事務(wù)commit失敗。二進(jìn)制日志無法回#滾解決:設(shè)置innodb_support_xa=1(默認(rèn)開啟),能夠確保二進(jìn)制日志和數(shù)據(jù)文件的同步 #sync_binlog = 1 #innodb_fast_shutdown innodb_log_buffer_size = 4M innodb_log_file_size = 256M innodb_log_files_in_group = 3 #配置數(shù)據(jù)臟葉的比例 innodb_max_dirty_pages_pct = 75 #設(shè)置mysql 數(shù)據(jù)刷新的方式默認(rèn)是fdatasync # doublewrite flush logic. The default value is "fdatasync", another # option is "O_DSYNC". innodb_flush_method=O_DSYNC innodb_lock_wait_timeout = 15 #控制普通用戶show database的權(quán)限 #skip-show-database #控制是否支持UDF log_bin_trust_function_creators = 1 # 控制是否slave線程隨mysql server的重啟而重啟,建議開啟 #skip_slave_start ##之前是回滾當(dāng)前query,現(xiàn)在是回滾整個事物,這樣可以更快的釋放資源 innodb_rollback_on_timeout = ON #設(shè)置連接的超時時間,如果不希望長連接可以設(shè)置相對較小的值,有個高手老王建議設(shè)置為10-15 interactive_timeout = 300 #wait_timeout只作用于TCP/IP和Socket鏈接的線程,一般設(shè)置值和interactive_timeout一樣 wait_timeout = 300 ##新連接時候用到,在高并發(fā)的系統(tǒng)里建議10-15默認(rèn)10 connect_timeout=15 ####主從復(fù)制里面slave檢查主庫是否正常并試圖從新連接之前的等待時間的時間,默認(rèn)1小時建議30秒 slave_net_timeout = 30 # 不復(fù)制的數(shù)據(jù)庫 replicate-ignore-db=performance_schema replicate-ignore-db=information_schema replicate-ignore-db=test replicate-ignore-db=mysql [mysqldump] # Do not buffer the whole result set in memory before writing it to # file. Required for dumping very large tables quick max_allowed_packet = 16M [mysql] no-auto-rehash # Only allow UPDATEs and DELETEs that use keys. #safe-updates [myisamchk] key_buffer_size = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M
以上配置完成后開始初始化
mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --defaults-file=/etc/my.cnf
出現(xiàn)讓你修改root密碼之類的信息說明初始化成功,如果沒成功也許會提示你安裝相關(guān)的依賴包
啟動
mysqld_safe --defaults-file=/etc/my.cnf &
驗證是否安裝成功可以通過查看MySQL進(jìn)程是否存在,3306端口是否被監(jiān)聽等
ps -ef |grep mysql
netstat -nat |grep 3306
配置主主架構(gòu)
154(master)--156(slave) 搭建如下
在154上
創(chuàng)建復(fù)制用戶
grant replication slave on *.* to 'repl'@'192.168.70.156' dentified by 'mysql';
flush privileges;
查看日志號和偏移量
mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000008 | 1106 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
在156上
CHANGE MASTER TO MASTER_HOST='192.168.70.154', MASTER_USER='repl', MASTER_PASSWORD='mysql', MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=1106;
start slave ;
show slave status\G
兩個同步進(jìn)程都為yes說明主從復(fù)制成功。
Slave_IO_Running: Yes Slave_SQL_Running: Yes
156(master)-154(slave) 搭架同理;
至此主從搭建完成。
三 keepalived安裝配置
直接采用apt-get的方式安裝
apt-get -y install keepalived
修改配置文件154上
vim /etc/keepalived/keepalived.conf
! Configuration File forkeepalived vrrp_instance VI_154 { state BACKUP #兩臺都設(shè)置BACKUP interface eth0 #網(wǎng)卡 virtual_router_id 157 #主備相同,在同一個局域網(wǎng)中不是一對的keepalived router_id不能相同,否則報錯,這里用157 priority 100 #優(yōu)先級,backup設(shè)置90 advert_int 1 nopreempt #不主動搶占資源,只在master這臺優(yōu)先級高的設(shè)置,backup不設(shè)置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.70.157 } } virtual_server 192.168.70.157 3306 { delay_loop 2 #lb_algo rr #LVS算法,用不到,我們就關(guān)閉了 #lb_kind DR #LVS模式,如果不關(guān)閉,備用云服務(wù)器不能通過VIP連接主MySQL persistence_timeout 50 #同一IP的連接60秒內(nèi)被分配到同一臺真實云服務(wù)器 protocol TCP real_server 192.168.70.154 3306 { #檢測本地mysql,backup也要寫檢測本地mysql weight 3 notify_down /etc/keepalived/mysql.sh #當(dāng)mysq服down時,執(zhí)行此腳本,殺死keepalived實現(xiàn)切換 TCP_CHECK { connect_timeout 3 #連接超時 nb_get_retry 3 #重試次數(shù) delay_before_retry 3 #重試間隔時間 } } ~
156上配置如下
! Configuration File forkeepalived vrrp_instance VI_156 { state BACKUP #兩臺都設(shè)置BACKUP interface eth0 virtual_router_id 157 #主備相同 priority 90 #優(yōu)先級,backup設(shè)置90 advert_int 1 nopreempt #不主動搶占資源,只在master這臺優(yōu)先級高的設(shè)置,backup不設(shè)置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.70.157 } } virtual_server 192.168.70.157 3306 { delay_loop 2 #lb_algo rr #LVS算法,用不到,我們就關(guān)閉了 #lb_kind DR #LVS模式,如果不關(guān)閉,備用云服務(wù)器不能通過VIP連接主MySQL persistence_timeout 50 #同一IP的連接60秒內(nèi)被分配到同一臺真實云服務(wù)器 protocol TCP real_server 192.168.70.156 3306 { #檢測本地mysql,backup也要寫檢測本地mysql weight 3 notify_down /etc/keepalived/mysql.sh #當(dāng)mysq服down時,執(zhí)行此腳本,殺死keepalived實現(xiàn)切換 TCP_CHECK { connect_timeout 3 #連接超時 nb_get_retry 3 #重試次數(shù) delay_before_retry 3 #重試間隔時間 } }
編寫腳本,該腳本的作用就是當(dāng)檢測不到mysql的服務(wù)的時候,kill掉keepalived的進(jìn)程,實現(xiàn)VIP漂移
vim /etc/keepalived/mysql.sh
#!/bin/bash
pkill keepalived
授予執(zhí)行權(quán)限
chmod +x /etc/keepalived/mysql.sh
啟動
/etc/init.d/keepalived start
查看日志
ubuntu系統(tǒng)日志在/var/log/syslog
centos系統(tǒng)日志在 /var/log/message
154上的啟動日志
156上的啟動日志
vip出現(xiàn)在154上
四 驗證
模擬154云服務(wù)器數(shù)據(jù)庫宕機(jī)
root@qsbilldatahis-db01:~# mysqladmin -uroot -p shutdown Enter password:
查看日志
154上keepalived檢查不到mysql的服務(wù),狀態(tài)變?yōu)閒ail ,將虛擬IP remove,執(zhí)行腳本,殺掉keepalived進(jìn)程
156上查看日志 變?yōu)閙aster狀態(tài)
ip addr show
vip已經(jīng)在156上,使用navicate工具連接VIP還是能正常提供服務(wù)
至此,所有的都搭建完成。
VIP如何切換回來最安全呢?
現(xiàn)在模擬154恢復(fù),讓VIP從156漂回到154。現(xiàn)在把154上的數(shù)據(jù)庫啟動,
root@qsbilldatahis-db01:~# mysqld_safe --defaults-file=/etc/my.cnf & [1] 592 root@qsbilldatahis-db01:~# 180411 17:24:49 mysqld_safe Logging to '/data/mysql/error.log'. 180411 17:24:49 mysqld_safe Starting mysqld daemon with databases from /data/mysql
154上啟動keepalived
oot@qsbilldatahis-db01:~# /etc/init.d/keepalived start * Starting keepalived keepalived [ OK ]
在156上停掉keepalived,vip就可以漂回154了
/etc/init.d/keepalived stop
至此完成切回。
大家覺得搭建MySQL雙主MM+keepalived高可用架構(gòu)的具體流程這篇文章怎么樣,是否有所收獲。如果想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前名稱:搭建MySQL雙主MM+keepalived高可用架構(gòu)的具體流程-創(chuàng)新互聯(lián)
瀏覽地址:http://chinadenli.net/article40/cdjoeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、全網(wǎng)營銷推廣、面包屑導(dǎo)航、自適應(yīng)網(wǎng)站、微信公眾號、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容