mysql簡單高可用,讀寫分離方案。mysql+keepalied實現

 

主讀之間是讀寫分離的系統。

主備數據之間通過binlog同步數據庫數據。

主讀字節,通過binlog同步數據。

讀備數據庫, 通過binlog同步數據。

keepalived用來保證主備數據庫之間實現高可用 。

 

我們通過這種方法實現,讀寫分離和高可用方案。

數據庫之間binlog的同步配置,mysql配置文件

[client]
port=3306
default-character-set=utf8mb4
#MySQLscokt文件配置
socket=/mysqldata/mysql3306/mysql.sock

[mysql]
port=3306
default-character-set=utf8mb4

[mysqld]
user=mysql
prot=3306
basedir=/mysqldata
lc_message_dir=/usr/shara/mysql
datadir=/mysqldata/mysql3306/data
tmpdir=/mysqldata/msyql3306/tmp
socket=/mysqldata/mysql3306/mysql.sock
pid_file=/msyqldata/mysql3306/mysql.pid
symbolic_links=0
explicit_default_for_timestamp=0
skip_external_locking=1
skip_ssl=1
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO


#字符集
character_set_server=uft8mb4
collation_server=utf8mb4_bin
init_connect='SET NAMES utf8mb4'
#表名字段忽略大小寫
lower_case_table_names=1
#開啓event 功能,備庫建議關閉
event_scheduler=1

##連接相關參數###
#默認最大連接16384
max_connections=2000
#阻止過多嘗試失敗的客戶端連接
max_connections_errors=50
#服務器等待連接的時間 mysql-error 中經常出現 "Lost connection to mysql server at 'XXX', system error:errno"可以適當增加該值
connect_timeout=10
#等待客戶端響應超時 默認28800
wait_timeout=1800
#打開文件數
open_files_limit=65535

##內存緩存相關參數##
#限制server接受的數據包大小
max_allowed_packet=64M
#msyql讀入緩存大小
read_buffer_size=1M
#開啓隨機讀緩衝區#
read_rnd_buffer_size=5M
##線程緩衝池##
thread_cache_size=64
###每個線程分配的內存大小#
thread_stack=262144
#指定分配緩衝區空間的最小單位
query_cache_min_res_unit=1K
##開啓查詢緩存  0(OFF),1(ON)和2(DEMAND)  ##
query_cache_type=1;
#查詢緩存大小##
query_cache_size=64M
##指定單個查詢能夠使用的緩衝區大小##
query_cache_limit=1M
##限制緩存表的最大數目##
table_open_cache=512
##需要排序的緩存大小#
sort_buffer_size=256K
##內存臨時表大小##
tmp_table_size=64M
##可以創建的內存表大小 不小於tmp_table_size#
max_heap_table_size=64M


###日誌相關參數####
###錯誤日誌##
log_error=/mysqllog/mysql3306/log/mysqld.log
###二進制日誌###
log_bin=/mysqllog/mysql3306/binlog/mysql-bin
server-id=1
###二進制日誌自動刪除/過期天數##
expire_logs_days=7
sync_binlog=1
###單個二進制日誌自動刪除/過期天數###
max_binlog_size=100M
##binlog能夠使用的最大cache大小##
max_binlog_cache_size=200M
##慢日誌###
log_queries_not_using_indexes=0
slow_query_log=1
slow_query_log_file=/msyqllog/mysql3306/log/mysql-show.log
##記錄超過多少秒的SQL語句#
long_query_time=1
###日誌時間跟隨系統時間##
log_timestamps=SYSTEM
##binlog_format##
binlog_format=row
##遭遇故障,暫停日誌寫入,並關閉數據庫
binlog_error_action=ABORT_SERER


######INNODB 相關參數#########
default_storage_engine=InnoDB
disabled_storage_engines=ARCHIVE,BLACKHOLE,EXAMPLE,FEDERATED,MEMORY,MERGE,NDB

##開啓innodb爲獨立空間模式
innodb_file_per_table=1
##redo log 數量#
innodb_log_files_in_group=2

##innodb 中讀寫操作的IO線程數,默認爲4 
innodb_write_io_threads=8
innodb_read_io_threads=8


##打開死鎖監控
innodb_print_all_deadlocks=1
#嚴格模式
innodb_strict_mode=1

innodb_sort_buffer_size=8M
innodb_stats_persistent_sample_pages=64
innodb_autoinc_lock_mode=2
innodb_online_alter_log_max_size=1G
innodb_open_file=4096
innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:20G

##Undo log config

innodb_rollback_segments=128
innodb_undo_log_truncate=1
innodb_max_undo_log_size=4G

#指定INNODB 一次可以保持打開的.idb文件最大數量
innodb_open_files=60000
##設置提交事務時日誌緩衝寫入日誌文件,對日誌入磁盤

innodb_flush_log_at_trx_commit=1
#存儲數據庫結構和其他內部數據結構的內存池
innodb_additional_mem_pool_size=16M

#鎖超時時間設置秒
innodb_lock_wait_timeout=50

#日誌緩存 默認1MB 通常設置8~16
innodb_log_buffer_size=16M



#每個日誌文件大小
innodb_log_file_size=128M
innodb_log_group_home_dir=/mysqldata/mysql3306/data
inodb_data_file_path=ibdata1:128M:autoextend
innodb_autoextend_increment=16

##從庫記錄binlog ,主從設置
log_slave_updates=1
relay_log_recovery=1
relay_log=/mysqllog/mysql3306/relaylog/mysql-relay
##replicate-wild-ignore-table=performance_schema.%
master-info-repository=TABLE
relay-log-info-repository=TABLE

##並行複製
slave-parallel-type=LOGICAL_CLOCK
##複製工作線程數量,如果主庫業務併發大 可以調整
slave_parallel_workers=16
##從庫並行回放時,保證提交順序與relay log中事務順序相同
slave_preserve_commit_order=ON
slave_rows_search_algorithms='INDEX_SCAN,HASH_SCAN'
gtid_mode =ON
enforece_gtid_consistency=1
binlog_gtid_simple_recovery=1

主要關注

關鍵性配置:

server-id = 1          #MySQL服務器標誌,必須唯一  
 
log-bin=mysql-bin      #二進制日誌文件的位置和命名  
 
log-slave-updates=1    #事件自動更新到日誌中  
 
sync_binlog=1          #日誌文件同步到磁盤上  
 
replicate_do_db=test   #要同步的數據庫名稱


有關MySQL通過binlog同步的幾種組合方式可以參考:https://blog.csdn.net/u010253004/article/details/82316619

重啓服務:

systemctl restart mysqld

查找密碼

grep password /mysqldata/mysql3306/log/mysqld.log

mysql -uroot -p

set password for root@localhost=password('password');

flush privileges;

#創建同步用戶

GRANT replication slave on *.* to 'sql_back' ;

設置權限 

GRANT replication slave on *.* to 'sql_backup'@'%' identified by 'passwd' ;

配置同步

change master to 

master_port=3306,

master_host='IP',

master_user='sql_backup',

master_password='passwd',

master_log_file='mysql-bin.000002',

master_log_pos='2301';

start slave;

change master to 

master_port=3306,

master_host='IP',

master_user='sql_backup',

master_password='passwd',

master_log_file='mysql-bin.000002',

master_log_pos='3106',

start slave;

change master to 

master_port=3306,

master_host='IP',

master_user='sql_backup',

master_password='passwd',

master_log_file='mysql-bin.000002',

master_log_pos='3106',

 

change master to 

master_port=3306,

master_host='IP',

master_user='sql_backup',

master_password='passwd',

master_log_file='mysql-bin.000002',

master_log_pos='2301',

start slave;

 

查看同步是否正確執行

show slave status \G;

keepaliev 

 

keepalived是一個類似於layer3, 4 &7交換機制的軟件,也就是我們平時說的第3層、第4層和第7層交換。Keepalived是自動完成,不需人工干涉。

Keepalived軟件主要是通過VRRP協議實現高可用功能的。VRRP是Virtual Router
RedundancyProtocol(虛擬路由器冗餘協議)的縮寫,VRRP出現的目的就是爲了解決靜態路由單點故障問題的,它能夠保證當個別節點宕機時,整個網絡可以不間斷地運行。

Keepalived使用虛擬IP實現雙機熱備解決方案。
 

建議使用yum安裝 源碼安裝有太多依賴包的問題 

!Configuration File for keepalied

global_defs {

    router_id promaster01 #唯一ID
}

vrrp_script check_mysql {
     script"執行的腳本 如 /bin/stat.sh "
    interval 5 #腳本執行間隔
    weight -20 #檢測後優先級增量
}

vrrp_instance V1_HA {
    state MASTER
    interface eth0 #網卡
    virtual_router_id 70 #組ID 同組相同
    priority 100 #優先級 主大於備
    adver_int 2 #vrrp通告間隔時間
    nopreempt #不搶佔模式
    
    authentication {
        auth_type PASS #通訊協議
        auth_pass 1111
    }

    unicat_src_ip  #ip 爲本節點
    unicat_peer{
     ip#通知的節點IP
    }


    #檢測腳本
    track_script {
        check_msyql
    }

    virtual_ipaddress{
        虛IP
    }

}

其他配置可以模仿它寫

keepalive詳解 推薦參考文章:https://blog.csdn.net/WanJiaBaoBao/article/details/83622621

 

 

 

發佈了16 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章