MySQL高可用架構:mysql+keepalived實現
系統環境及架構
#主機名 系統版本 mysql版本 ip地址 mysqlMaster centos7.4 mysql5.7 192.168.1.42 mysqlSlave centos7.4 mysql5.7 192.168.1.43 #vip:192.168.1.41
在master和slave上分別進行資料庫的安裝
yum install epel* -y && yum clean all && yum makecache rpm -Uvh http://repo.mysql.com/mysql57-community-release-el7.rpm yum clean all && yum makecache yum install gcc gcc-c++ openssl-devel mysql mysql-server mysql-devel -y
建立資料庫檔案存放路徑
mkdir /data/mysql -p chown -R mysql:mysql /data/mysql
配置mysql配置檔案
#在mysqlMaster上配置mysql配置檔案
vi /etc/my.cnf [mysqld] server-id = 1 #全域性唯一,每臺都不能一樣 log-bin = mysql-bin #log-bin表示開啟二進位制日誌記錄,mysql-bin表示日誌檔案的命名格式,會生成mysql-bin.0001 等等 relay-log = mysql-relay-bin #指定中繼日誌格式(拉取主mysql日誌後,在從庫上生成的日誌) replicate-wild-ignore-table=mysql.% #指定那些庫或則表不進行同步,mysql是庫名,.%表示下面所有的表,mysql.user 表示不同不mysql庫下的user表 replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.% #replicate-wild-do-table=boke.% #表示同步那個庫 #注意:不要在主庫上使用binlog-do-db 或 binlog-ignore-db選項 #也不要在從庫上使用 replicate-do-db 或 replicate-ignore-db 選項,因為這有可能產生跨庫更新失敗的問題.推薦從庫上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 這兩個選項來解決複製過濾問題 datadir=/data/mysql socket=/data/mysql/mysql.sock user=mysql symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid character-set-server=utf8 [mysql] socket=/data/mysql/mysql.sock default-character-set=utf8 [client] socket=/data/mysql/mysql.sock default-character-set=utf8 user=root password=NCYD-tianyu@0791 #若是不寫上這個欄位,在本機用命令進入mysql會報錯,提示預設路徑/var/lib/mysql/mysql.sock找不到
在mysqlSlave上配置mysql配置檔案
vi /etc/my.cnf [mysqld] server-id = 2 log-bin = mysql-bin relay-log = mysql-relay-bin replicate-wild-ignore-table=mysql.% replicate-wild-ignore-table=test.% replicate-wild-ignore-table=information_schema.% datadir=/data/mysql socket=/data/mysql/mysql.sock user=mysql symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid character-set-server=utf8 [mysql] socket=/data/mysql/mysql.sock default-character-set=utf8 [client] socket=/data/mysql/mysql.sock default-character-set=utf8 user=root password=NCYD-tianyu@0791
#若是不寫上這個欄位,在本機用 命令 進入mysql會報錯,提示預設路徑/var/lib/mysql/mysql.sock找不到,先初始化資料庫(需要進行初始化在/data/mysql目錄裡生成必要的資訊)
#mysql5.7.7以後的初始化方法 mysqld --initialize --user=mysql --datadir=/data/mysql #mysql5.7.7以前的初始化方法 mysql_install_db --user=mysql --datadir=/data/mysql 分別啟動主從資料庫 #在centos7裡面,必須先關閉selinux,否在無法啟動mysqld systemctl start mysqld 分別為主從mysql做安全加固 #查到上一步,首次啟動mysql,系統自動生成的密碼( cat /var/log/mysqld.log |grep pass ) mysql_secure_installation #使用該命令更改隨機root密碼(修改為 NCYD-tianyu@0791 ) 手動同步資料(假如現在的環境,主上已經有資料了,從是新的)
1:在主上資料庫中建立用於複製的使用者,並授權 mysql> GRANT REPLICATION SLAVE ON *.* to 'tongbu'@'192.168.1.43' identified by '123456789'; 2:在主mysql上先鎖表(使其所有表變成只讀狀態) mysql> flush tables with read lock; #不要退出終端,否在這個鎖就失效了 3:再開啟另一個命令列終端,使用myqldump等工具將資料匯出(或則直接打包儲存mysql資料的目錄,併傳送到從機上) 4:將匯出資料複製到從機上,並建立新庫並匯入資料 互相置從,互相置主(以達到雙主模式)
在mysqlMaster上將mysqlSlave設定為自己的主角色伺服器
mysql> show master status; #檢視mysqlSlave的狀態(記錄File名字,和Position) change master to master_host = '192.168.1.43', master_user = 'tongbu', master_password = '123456789', master_log_file = 'mysql-bin.000002', master_log_pos = 1006; mysql> start slave; #啟動slave端的複製程式(某些版本是:slave start; ) mysql> show slave status\G #檢視slaves端的I/O程式,與SQL程式
在從上將mysqlMaster設定為自己的主角色伺服器
mysql> show master status; #檢視mysqlMaster的狀態(記錄File名字,和Position) change master to master_host = '192.168.1.42', master_user = 'tongbu', master_password = '123456789', master_log_file = 'mysql-bin.000002', master_log_pos = 1006; mysql> start slave; #啟動slave端的複製程式 mysql> show slave status\G #檢視slaves端的I/O程式,與SQL程式
驗證是否同步
1:第一驗證在myssqlMaster上建立庫,mysqlSlave上是否存在
2:第二驗證在mysqlSlave上建立庫,mysqlMaster上是否存在
安裝keepalived實現VIP切換,達到高可用
yum install keepalived -y #在mysqlMaster和mysqlSlave上都建立檢查mysql的檢查指令碼,並賦予執行許可權 touch /etc/keepalived/mysql_check.sh chmod +x /etc/keepalived/mysql_check.sh
vi /etc/keepalived/mysql_check.sh #!/bin/bash #slave_is=( $(mysql -uroot -pNCYD-tianyu@0791 -e "show slave status\G" | grep "Slave_.*_Running" | awk '{print $2}') ) 在新版本的myql中,直接將密碼寫在命令列,會進行安全提示,解決辦法是將其寫在mysql的配置檔案裡的 [client] 欄位裡,寫法見上面mysql的配置檔案 slave_is=( $(mysql -e "show slave status\G" | grep "Slave_.*_Running" | awk '{print $2}') ) if [ "${slave_is[0]}" = "Yes" -a "$slave_is[1]" = "Yes"] then exit 0 else exit 1 fi
#注意,keepalived檢查 指令碼 vrrp_script,只認兩個返回值,0表示正常,非0表示不正常(這在寫指令碼是要注意),不正常就要做相關的切換
配置keepalived,以實現高可用
vi /etc/keepalived/keepalived.conf global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict #注意:當你發現無法ping通虛擬VIP時,建議將此行註釋掉 vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script mysql_check { script "/etc/keepalived/mysql_check.sh" #這個指令碼,若是發現不執行,可以檢查他的許可權,777是不可以的,日誌提示不安全,可以直接chmod +x /etc/keepalived/mysql_check.sh 就行 #script "shutdown -r now" #或者,直接用命令進行除錯 interval 2 weight 2 } vrrp_instance VI_1 { state MASTER #mysqlMaster上是MASTER;mysqlSlave上是BACKUP interface ens192 virtual_router_id 52 priority 100 #mysqlMaster上是100;mysqlSlave上是90 advert_int 1 nopreempt #配置VIP(注意:故障切換搶佔模式,儘量關閉,預設是開啟的,這個引數只需要在高優先順序上設定即可) authentication { auth_type PASS auth_pass 1111 } track_script { #呼叫上面定義檢查mfsmaster的指令碼 mysql_check } virtual_ipaddress { 192.168.1.41/24 dev ens192 } }
啟動keepalived
systemctl start keepalived
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2653880/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 實現高可用架構之 MHAMySql架構
- 構建MHA實現MySQL高可用叢集架構MySql架構
- Mysql高可用架構方案MySql架構
- MySQL 高可用架構之 MMM 架構MySql架構
- MySQL高可用架構對比MySql架構
- mysql高可用架構MHA搭建MySql架構
- MySQL資料庫實現高可用架構之MHA的實戰MySql資料庫架構
- MHA高可用架構的實現方式架構
- MySQL叢集架構:MHA+MySQL-PROXY+LVS實現MySQL叢集架構高可用/高效能MySql架構
- MySQL高可用架構之MHA 原理與實踐MySql架構
- MySQL高可用架構案例篇:UCloud最佳實踐MySql架構Cloud
- MySQL高可用架構設計分析MySql架構
- MySQL高可用架構-MMM、MHA、MGR、PXCMySql架構
- MySQL高可用架構之Keepalived+主從架構部署MySql架構
- 高可用架構架構
- MySQL主從原理, 高可用架構與高效能架構MySql架構
- MySQL資料庫架構——高可用演進MySql資料庫架構
- mysql高可用架構MHA搭建(centos7+mysql5.7.28)MySql架構CentOS
- keepalived+MySQL實現高可用MySql
- ELK架構下利用Kafka Group實現Logstash的高可用架構Kafka
- MySQL 高可用架構 - MHA環境部署記錄MySql架構
- MySQL資料庫各場景主從高可用架構實戰MySql資料庫架構
- Canal高可用架構部署架構
- MySQL 中常見的幾種高可用架構部署方案MySql架構
- 如何設計和實現高可用MySQLMySql
- MHA+MySQL主從配置實現MySQL高可用MySql
- 【DB寶42】MySQL高可用架構MHA+ProxySQL實現讀寫分離和負載均衡MySql架構負載
- AWS 高可用AWS架構方案架構
- 【DB寶45】MySQL高可用之MGR+Consul架構部署MySql架構
- 《MySQL效能優化和高可用架構實踐》簡介與推薦序MySql優化架構
- 如何設計和實現高可用的MySQLMySql
- MySQL 高可用架構:主從備份及讀寫分離MySql架構
- 基於MySQL Cluster + LVS + KeepAlived部署負載均衡高可用架構MySql負載架構
- 基於Centos7.x 搭建MySQL Galera Cluster高可用架構CentOSMySql架構
- k8s高可用架構K8S架構
- 深度解析KubeEdge EdgeMesh 高可用架構架構
- MQ系列9:高可用架構分析MQ架構
- 同程旅行基於 RocketMQ 高可用架構實踐MQ架構