搭建MySQL雙主MM+keepalived高可用架構的具體流程-創(chuàng)新互聯(lián)

下文我給大家簡單講講關于搭建MySQL雙主MM+keepalived高可用架構的具體流程,大家之前了解過相關類似主題內容嗎?感興趣的話就一起來看看這篇文章吧,相信看完搭建MySQL雙主MM+keepalived高可用架構的具體流程對大家多少有點幫助吧。

創(chuàng)新互聯(lián)從2013年成立,先為凌河等服務建站,凌河等地企業(yè),進行企業(yè)商務咨詢服務。為凌河企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

比較常見的高可用架構有MHA,MM,PXC等

MM架構優(yōu)點是:

搭建快速方便,適合中小型公司,MySQL互為主從,保證兩臺數據庫的一致性,keepalived實現虛擬IP和自動的服務監(jiān)控功能,利用VIP自動切換保證高可用,基本可以滿足業(yè)務需要。

但是這種架構存在以下問題:

1 切換后出現雙vip的問題,腦裂問題等,可以通過增加仲裁節(jié)點。

2 切換時丟數據,可以配合腳本監(jiān)控binlog日志或者采用5.7版本的增強半同步。

3 主從延遲不能避免,如果要求沒有主從延遲,可以采用PXC架構。

4 當發(fā)生故障的云服務器恢復后,不能自動切回,切換回來比較麻煩,還需要手動修改配置文件中的權重。

5 對腳本編寫的能力也有不小考驗。

想要了解keepalived工作原理和配置文件說明的童鞋可以自行百度,或者看看這篇很詳細, 傳送門keepalived工作原理與配置文件說明

公司大部分的架構為MM+keepalived或者MM+heartbeat,然后主庫下面掛上從庫作為讀庫,再配合mycat集群實現讀寫分離和分庫分表就是一套比較完善的MySQL高可用架構了(如下圖)。

搭建MySQL雙主MM+keepalived高可用架構的具體流程

現在有新的業(yè)務需要一套新的環(huán)境,在此記錄下部署過程,希望對剛接觸MySQL的同學有所幫助,前面MySQL安裝和主從搭建可以不看,廢話不多少,架構圖如下

搭建MySQL雙主MM+keepalived高可用架構的具體流程

一 環(huán)境準備

操作系統(tǒng)版本為 Ubuntu 14.04.5

云服務器為16G內存 4核CPU 1T數據目錄存儲

數據庫版本為 5.6.39-log

IP規(guī)劃

master1: 192.168.70.154

master2: 192.168.70.156

vip       192.168.70.157

二 MySQL雙主搭架

在兩臺數據庫云服務器上

上傳安裝包

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

修改相關目錄的權限

chown -R mysql:mysql /usr/local/mysql/

chown -R mysql:mysql /data/mysql

chown -R mysql:mysql /etc/my.cnf

編輯配置文件

配置文件需要特別注意的地方為:

1 server-id必須不同,否則主從搭建報錯。

2 主鍵自增參數,可以避免主鍵沖突的錯誤

master1 設置如下

auto-increment-increment = 2

auto-increment-offset = 1

master 2 設置如下

auto-increment-increment = 2

auto-increment-offset = 2

下面給出一個比較全的可以作為參考,其他的要根據自己的實際情況修改:

vim /etc/my.cnf

[client]
#password       = [your_password]
port            = 3306
socket          = /tmp/mysql.sock
#設置客戶端字符集
default-character-set = utf8

[mysqld]

# generic configuration options
port            = 3306
socket          = /tmp/mysql.sock
basedir         = /usr/local/mysql
datadir         = /data/mysql
user            = mysql

#設置云服務器時區(qū),建議每次都顯示指定
default-time-zone='+8:00'
#設置云服務器端字符集,注意和客戶端字符集一樣,建議都設置utf8,防止中文亂碼
character-set-server=utf8

skip-name-resolve
#是否支持federated 分布式引擎默認不支持
#federated
#設置sql校驗模式,該設置影響到數據庫對字段數據的校驗嚴格程度
#sql_mode = STRICT_TRANS_TABLES
expire_logs_days = 15
#在同步配置中這個要額外注意否則容易導致主鍵沖突
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)的,如果設置這個變量的話,mysqld就會調用thr_setconcurrency()。#這個函數使應用程序給同一時間運行的線程系統(tǒng)提供期望的線程數目。
thread_concurrency = 4
#無論是否有misam表建議都16-128M,如果misam表多那么建議設置為128M大不要超#過256M
#query_cache_size = 64M
#query_cache_limit = 2M
ft_min_word_len = 4
#memlock
#5.5以下版本建議顯示設置。5.5默認是innodb
default-storage-engine = innodb
thread_stack = 192K
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
#防止夸庫更新混亂,同步里推薦的設置
#replicate_wild_do_table=tang_monitor_report.%
replicate_wild_do_table=%.%
#建議顯示指定binlog和relaylog的名字,防止因修改hostname而導致出錯
log-bin=mysql-bin
relay-log=mysql-relay-bin
#binlog記錄格式,建議設置row,防止statement格式導致的數據不一直無法檢測的問題
binlog_format=mixed
#設置是否將主庫的更新寫入binlog ,一般情況關閉,建議關閉
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
#半同步配置參數,很簡單吧,簡單的讓人震驚
#rpl_semi_sync_slave_enabled=1
#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=1000
                                                                                                                                                 
#slave庫的時候有用,設置是否slave庫為只讀,建議開啟
#read_only
#misam index 緩存如果misam表多建議適當的增大
key_buffer_size = 128M
bulk_insert_buffer_size = 64M
#當在REPAIR TABLE或用CREATE INDEX創(chuàng)建索引或ALTER TABLE過程中排序 MyISAM索引分#配的緩沖區(qū)。
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
#設置misam表修復的線程數
myisam_repair_threads = 1
#myisam表自動崩潰恢復級別
myisam_recover=  BACKUP,FORCE 
#設置innodb數據字典的緩存,一般16-20M基本可以,如果innodb表特別多可適當增大到#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,默認是4即使修改也無用 ,5.5之后可以修改大#不超過64
innodb_write_io_threads = 8
innodb_read_io_threads = 8
#innodb_force_recovery=1
#設置innodb內部線程并發(fā)數
innodb_thread_concurrency = 16
#設置日志刷新的方式
innodb_flush_log_at_trx_commit = 1
#設置binlog刷新方式,1表示提交前寫入了二進制,但事務commit失敗。二進制日志無法回#滾解決:設置innodb_support_xa=1(默認開啟),能夠確保二進制日志和數據文件的同步
#sync_binlog = 1
#innodb_fast_shutdown
innodb_log_buffer_size = 4M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
#配置數據臟葉的比例
innodb_max_dirty_pages_pct = 75

#設置mysql 數據刷新的方式默認是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的權限
#skip-show-database
#控制是否支持UDF
log_bin_trust_function_creators = 1
# 控制是否slave線程隨mysql server的重啟而重啟,建議開啟
#skip_slave_start 
##之前是回滾當前query,現在是回滾整個事物,這樣可以更快的釋放資源
innodb_rollback_on_timeout = ON 
#設置連接的超時時間,如果不希望長連接可以設置相對較小的值,有個高手老王建議設置為10-15
interactive_timeout = 300
#wait_timeout只作用于TCP/IP和Socket鏈接的線程,一般設置值和interactive_timeout一樣
wait_timeout = 300
##新連接時候用到,在高并發(fā)的系統(tǒng)里建議10-15默認10
connect_timeout=15
####主從復制里面slave檢查主庫是否正常并試圖從新連接之前的等待時間的時間,默認1小時建議30秒
slave_net_timeout = 30

# 不復制的數據庫                                                                                                                                                   
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

出現讓你修改root密碼之類的信息說明初始化成功,如果沒成功也許會提示你安裝相關的依賴包

啟動

mysqld_safe --defaults-file=/etc/my.cnf &

驗證是否安裝成功可以通過查看MySQL進程是否存在,3306端口是否被監(jiān)聽等

ps -ef |grep mysql

netstat -nat |grep 3306

配置主主架構

154(master)--156(slave) 搭建如下

在154上

創(chuàng)建復制用戶

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

兩個同步進程都為yes說明主從復制成功。

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          #兩臺都設置BACKUP
 interface eth0                  #網卡
 virtual_router_id 157      #主備相同,在同一個局域網中不是一對的keepalived router_id不能相同,否則報錯,這里用157
 priority 100          #優(yōu)先級,backup設置90
 advert_int 1
 nopreempt            #不主動搶占資源,只在master這臺優(yōu)先級高的設置,backup不設置
 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算法,用不到,我們就關閉了
 #lb_kind DR              #LVS模式,如果不關閉,備用云服務器不能通過VIP連接主MySQL
 persistence_timeout 50  #同一IP的連接60秒內被分配到同一臺真實云服務器
 protocol TCP
 real_server 192.168.70.154 3306 {  #檢測本地mysql,backup也要寫檢測本地mysql
 weight 3
 notify_down /etc/keepalived/mysql.sh    #當mysq服down時,執(zhí)行此腳本,殺死keepalived實現切換
 TCP_CHECK {
 connect_timeout 3    #連接超時
 nb_get_retry 3      #重試次數
 delay_before_retry 3 #重試間隔時間
  }
}
~

156上配置如下

! Configuration File forkeepalived
vrrp_instance VI_156 {
 state BACKUP          #兩臺都設置BACKUP
 interface eth0
 virtual_router_id 157      #主備相同
 priority 90          #優(yōu)先級,backup設置90
 advert_int 1
 nopreempt            #不主動搶占資源,只在master這臺優(yōu)先級高的設置,backup不設置
 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算法,用不到,我們就關閉了
 #lb_kind DR              #LVS模式,如果不關閉,備用云服務器不能通過VIP連接主MySQL
 persistence_timeout 50  #同一IP的連接60秒內被分配到同一臺真實云服務器
 protocol TCP
 real_server 192.168.70.156 3306 {  #檢測本地mysql,backup也要寫檢測本地mysql
 weight 3
 notify_down /etc/keepalived/mysql.sh    #當mysq服down時,執(zhí)行此腳本,殺死keepalived實現切換
 TCP_CHECK {
 connect_timeout 3    #連接超時
 nb_get_retry 3      #重試次數
 delay_before_retry 3 #重試間隔時間
  }
}

編寫腳本,該腳本的作用就是當檢測不到mysql的服務的時候,kill掉keepalived的進程,實現VIP漂移

vim /etc/keepalived/mysql.sh

#!/bin/bash

pkill keepalived

授予執(zhí)行權限

chmod +x  /etc/keepalived/mysql.sh

啟動

/etc/init.d/keepalived start

查看日志

ubuntu系統(tǒng)日志在/var/log/syslog

centos系統(tǒng)日志在 /var/log/message

154上的啟動日志

搭建MySQL雙主MM+keepalived高可用架構的具體流程

156上的啟動日志

搭建MySQL雙主MM+keepalived高可用架構的具體流程

vip出現在154上

搭建MySQL雙主MM+keepalived高可用架構的具體流程

四 驗證

模擬154云服務器數據庫宕機

root@qsbilldatahis-db01:~# mysqladmin -uroot -p shutdown
Enter password:

查看日志

154上keepalived檢查不到mysql的服務,狀態(tài)變?yōu)閒ail ,將虛擬IP remove,執(zhí)行腳本,殺掉keepalived進程

搭建MySQL雙主MM+keepalived高可用架構的具體流程

156上查看日志 變?yōu)閙aster狀態(tài)

搭建MySQL雙主MM+keepalived高可用架構的具體流程

ip addr show

vip已經在156上,使用navicate工具連接VIP還是能正常提供服務

搭建MySQL雙主MM+keepalived高可用架構的具體流程

至此,所有的都搭建完成。


VIP如何切換回來最安全呢?

現在模擬154恢復,讓VIP從156漂回到154?,F在把154上的數據庫啟動,

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高可用架構的具體流程這篇文章怎么樣,是否有所收獲。如果想要了解更多相關,可以繼續(xù)關注我們的行業(yè)資訊板塊。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前名稱:搭建MySQL雙主MM+keepalived高可用架構的具體流程-創(chuàng)新互聯(lián)
瀏覽地址:http://muchs.cn/article40/cdjoeo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制網站、全網營銷推廣面包屑導航、自適應網站、微信公眾號、做網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站建設網站維護公司