中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-01 16:37:50 來源:網絡 閱讀:475 作者:三月 欄目:MySQL數據庫

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

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

MM架構優點是:

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

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

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

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

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

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

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

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


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

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


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

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


一 環境準備

操作系統版本為  Ubuntu 14.04.5 

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

數據庫版本為 5.6.39-log

IP規劃

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

創建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

#設置云服務器時區,建議每次都顯示指定
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系統的,如果設置這個變量的話,mysqld就會調用thr_setconcurrency()。#這個函數使應用程序給同一時間運行的線程系統提供期望的線程數目。
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創建索引或ALTER TABLE過程中排序 MyISAM索引分#配的緩沖區。
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內部線程并發數
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
##新連接時候用到,在高并發的系統里建議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端口是否被監聽等

ps -ef |grep mysql

netstat -nat |grep 3306


配置主主架構

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

在154上

創建復制用戶

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          #優先級,backup設置90
 advert_int 1
 nopreempt            #不主動搶占資源,只在master這臺優先級高的設置,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時,執行此腳本,殺死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          #優先級,backup設置90
 advert_int 1
 nopreempt            #不主動搶占資源,只在master這臺優先級高的設置,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時,執行此腳本,殺死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


授予執行權限

chmod +x  /etc/keepalived/mysql.sh 


啟動 

/etc/init.d/keepalived start 


查看日志

ubuntu系統日志在/var/log/syslog

centos系統日志在 /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的服務,狀態變為fail ,將虛擬IP remove,執行腳本,殺掉keepalived進程

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

156上查看日志 變為master狀態

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

ip addr show

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

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

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




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

現在模擬154恢復,讓VIP從156漂回到154。現在把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高可用架構的具體流程這篇文章怎么樣,是否有所收獲。如果想要了解更多相關,可以繼續關注我們的行業資訊板塊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙岩市| 太康县| 天津市| 泰来县| 额尔古纳市| 确山县| 霍林郭勒市| 五常市| 云南省| 兴文县| 漳平市| 得荣县| 广灵县| 盐源县| 蛟河市| 黄平县| 乐安县| 松潘县| 报价| 柳州市| 比如县| 鄂温| 乌拉特中旗| 祁东县| 康平县| 山阴县| 永吉县| 尉犁县| 江城| 泾阳县| 怀来县| 神农架林区| 确山县| 交城县| 石屏县| 古交市| 鲁山县| 顺义区| 常德市| 故城县| 洛阳市|