1. 程式人生 > >Linux 實現MySQL+Keepalive 高可用

Linux 實現MySQL+Keepalive 高可用

轉載自linux社群的linux521編寫的詳細教程

說明藍色=命令名稱

淺綠=命令引數

      淺藍=選項

      紫色=目錄

      系統環境:CentOS  5.7 x86_64

一、所需準備
mysql-master :192.168.1.71 
mysql-slave  :192.168.1.70
mysql版本均為:5.5.21
keepalive 版本:1.1.5
vip:192.168.1.60

二、方案介紹

兩臺mysql互為主從,但只有master寫,slave只負責讀。主從通過keepalive做成高可用,當master出問題,由slave接替master工作,即讀寫都在slave操作。當master恢復正常,master自動同步故障時間段資料,接替slave的寫工作。

三、雙主配置

1、配置檔案
master my.cnf 主要引數

log_slave_updates
log-bin = mysql-bin
server-id = 1
binlog-ignore-db=mysql
#auto_increment_increment = 2
#auto_increment_offset = 2

slave my.cnf 主要引數

log_slave_updates
log-bin = mysql-bin
server-id = 2
binlog-ignore-db=mysql
#auto_increment_increment = 2
#auto_increment_offset = 1

注:
log_slave_updates  同步資料時也寫入日誌,二進位制記錄id號,互為主從時時不會引起迴圈。建議開啟方便實施日誌恢復。 可選
slave-skip-errors  跳過錯誤,可以通過=指定特定的錯誤,如:slave-skip-errors=1062  可選
log-bin = mysql-bin 開啟二進位制日誌,必須開啟,主從同步主要是通過二進位制日誌。 必須
sync_binlog=n  設定二進位制日誌在寫入多少此後與硬碟同步,1 為最安全的也是效率最低的,根據實際情況設定 可選
server-id  設定mysql的id號,主從不能相同。 必須
binlog-ignore-db

 設定不寫入日誌的庫,建議設定不需要的庫,節省流量。如需設定多個庫可加多個此引數  可選
binlog-do-db 設定寫入二進位制日誌的庫,如設定則只有設定的庫才能寫入二進位制日誌。如需設定多個庫可加多個此引數。 可選
replicate-ignore-db 設定slave不同步的庫,如需設定多個庫可加多個此引數。 可選
replicate-do-db 設定slave同步的庫,如需設定多個庫可加多個此引數。 可選
auto_increment_increment  自增增長值,如:id 設定為 auto_increment,則每次插入資料自增值為2,以1,3,5...或2,4,6...方式增長。 可選
auto_increment_offset 自增初始化便宜值,如果前一個id 為2 則 下一個為3 然後在這個基礎上按auto_increment_increment 設定的值進行自增。 可選
master-host = 192.168.1.2 設定master 伺服器地址,也可以啟動時通過change master to 設定 。 可選
master-user = repl 設定更新用的帳號,也可以啟動時通過change master to 設定 。 可選
master-password = 123 設定跟新用的密碼,也可以啟動時通過change master to 設定 。 可選
master-port = 3306 設定master埠,也可以啟動時通過change master to 設定 。 可選

binlog-do-db、binlog-ignore-db、replicate_do_db、replicate_ignore_db 在使用時應注意,若加了以上引數,則在操作資料庫是要避免跨庫操作(例:update test.table1 set...)
如設定 binlog-do-db=test
use mysql;
update test.table1 set ......
第二句會執行但不會寫入二進位制日誌,即從庫不能同步,主從資料庫出現差異

如設定 binlog_ignore_db=mysql
use mysql;
update test.table1 set ......
第二句會執行但不會寫入二進位制日誌,即從庫不能同步,主從資料庫出現差異

如設定 replicate_do_db=test
use mysql;
update test.table1 set ......
第二句將不會被執行,即從庫不能同步,主從資料庫出現差異

如設定 replicate_ignore_db=mysql
use mysql;
update test.table1 set ......
第二句會被忽略執行,即從庫不能同步,主從資料庫出現差異

原因是設定binlog-do-db、binlog-ignore-db、replicate_do_db或replicate_ignore_db後,MySQL執行sql前檢查的是當前預設資料庫,所以跨庫更新語句被忽略。

2、安裝準備

寫好配置檔案重啟資料庫
service mysqld restart

同步資料庫
可通過 tcpdump 也可以直接打包拷貝,因本次mysql都是新裝設定一樣,無需同步,不會同步者建議google一下。


分別在master、slave上新增同步帳號
mysql>grant replication slave on *.* to [email protected]'%' identified by 'zzzzzzz';

3、設定主從

檢視master二進位制日誌狀態:show master status;

在slave 執行:

mysql>change master to master_host='192.168.1.71',master_user='zsz', master_password='zzzzzzz',master_log_file='mysql-bin.000007',master_log_pos=107;

:master_log_file='mysql-bin.000007',master_log_pos=107 為master status中對應的內容。

mysql> slave start
mysql> show slave status\G;

其中 Slave_IO_Running: Yes,Slave_SQL_Running: Yes 表示設定成功。

測試:
在slave執行:
mysql> show databases;

在master建立測試庫,並插入資料:
mysql>create database zsz;
mysql>use zsz;
mysql>create table zsz
(id int(5) not null auto_increment primary key,
name char(10) not null,
qqgroup int(10)
)type=innodb;

mysql>show databases;
mysql> show databases;

在從庫執行:

mysql > show databases;


第一個為master建立資料庫前,第二個為建立後。從圖可以看出一切ok。

4、設定雙主

在slave執行:mysql> show master status;

在master執行:
mysql>change master to master_host='192.168.1.70',master_user='zsz', master_password='zzzzzzz',master_log_file='mysql-bin.000005',master_log_pos=107;

注:master_log_file='mysql-bin.000005',master_log_pos=107 為master status中對應的內容。

mysql> slave start
mysql> show slave status\G;

其中 Slave_IO_Running: Yes,Slave_SQL_Running: Yes 表示設定成功。

測試:
在master執行;
mysql> use zsz;
Database changed
mysql> select * from zsz;
Empty set (0.00 sec)

關閉master
service mysqld stop

在slave執行:

mysql> use zsz;
mysql> insert into zsz(name,qqgroup) values('秦漢唐宋元','31013074');
mysql> select * from zsz;

 

在master執行:

service mysqld start

mysql -uroot -p

mysql> use zsz;
mysql> select * from zsz;

ok,一切成功。

三、keepalive高可用配置

1、keepalive安裝

分別在master,slave上安裝keepalive

cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-1.1.5.tar.gztar zxvf keepalived-1.1.5.tar.gz
cd keepalived-1.1.5
./configure --prefix=/usr/local/keepalived

make
make install

[[email protected] ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ 
[[email protected] ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 
[[email protected] ~]# mkdir /etc/keepalived/ 
[[email protected] ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 
[[email protected] ~]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

分別在master,slave上新建檢查指令碼

vim /root/check_mysql.sh

內容如下

  1. #!/bin/bash  
  2. MYSQL=/usr/local/mysql-5.5.21/bin/mysql  
  3. MYSQL_HOST=localhost 
  4. MYSQL_USER=root 
  5. MYSQL_PASSWORD=  
  6. CHECK_TIME=3  
  7. #mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0  
  8. MYSQL_OK=1 
  9. function check_mysql_health (){  
  10. $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -e "show status;" >/dev/null 2>&1  
  11. if [ $? = 0 ] ;then  
  12.      MYSQL_OK=1 
  13. else  
  14.      MYSQL_OK=0 
  15. fi  
  16.      return $MYSQL_OK  
  17. }  
  18. while [ $CHECK_TIME -ne 0 ]  
  19. do  
  20.      let "CHECK_TIME-=1"  (王俊小提示這裡我們採用的是let進行整數的運算當然您可以用expr,感覺let省去了$比較方便)
  21.      check_mysql_health  
  22.      if [ $MYSQL_OK = 1 ] ; then  
  23.           CHECK_TIME=0 
  24.           exit 0  
  25.      fi  
  26.      if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]  
  27.      then  
  28.           /etc/init.d/keepalived stop  
  29.      exit 1   
  30.      fi  
  31.      sleep 1  
  32. done  

chmod +x /root/check_mysql.sh

2、編寫配置檔案

vim /usr/local/keepalived/etc/keepalived/keepalived.conf

master配置內容:
###########################master##########################
! Configuration File for keepalived
global_defs {
    router_id zsz
}
vrrp_script check_run {
    script "/root/check_mysql.sh"
    interval 5
}
vrrp_sync_group VG1 {
     group {
        VI_1
     }
}
vrrp_instance VI_1 {
     state MASTER
     interface eth0
     virtual_router_id 11
     priority 100
     advert_int 1
     nopreempt
     authentication {
         auth_type PASS
         auth_pass zzzzzzz
     }
     track_script {
         check_run
     }
     virtual_ipaddress {
         192.168.1.60 dev eth0 label eth0:0
     }
}
##########################end##########################

slave配置內容:
#########################backup##########################
! Configuration File for keepalived
global_defs {
    router_id zsz
}
vrrp_script check_run {
    script "/root/check_mysql.sh"
    interval 5
}
vrrp_sync_group VG1 {
     group {
       VI_1
     }
}
vrrp_instance VI_1 {
     state BACKUP
     interface eth0
     virtual_router_id 11
     priority 80
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass zzzzzzz
     }
     track_script {
         check_run
     }
     virtual_ipaddress {
         192.168.1.60 dev eth0 label eth0:0
     }
}
################end####################################

3、測試

在master上建立測試帳號:
mysql> grant all privileges on *.* to 'master'@'%' identified by 'zzzzzzz';
mysql> flush privileges;

在slave上建立測試帳號:
mysql> grant all privileges on *.* to 'slave'@'%' identified by 'zzzzzzz';
mysql> flush privileges;


分別啟動master、slave的keepalived程序
service keepalived start

在master上執行:ifconfig
 

在slave上執行:ifconfig
 

用一臺同網段的機器訪問通過vip資料庫:

 關閉master資料庫:service mysqld stop

在master上執行:ifconfig

在slave上執行:ifconfig

用一臺同網段的機器訪問通過vip資料庫:

通過此圖可以看出此時反問的是slave(上文中master、slave帳號設定不同)

測試 成功。



接下來是引用南極貓部落格的一個例項進行說明他在生產中的實際應用

Keepalived雙機熱備
這裡我們僅僅只利用Keepalive做雙機熱備,也就是保證伺服器的高可用性,其他的不用管。可能您會說這樣在實際應用中很少會這樣用,這您可就錯了,Keepalived僅僅做雙機熱備的情況還是有的,我就碰到過幾次這樣的案例,下面就我碰到的幾個案例做個小結

一,Keepalived雙機熱備的應用場景

1,網站流量不高,壓力不大,但是對伺服器的可靠性要求極其高,例如實時線上OA系統,政府部門網站系統,醫院實時報醫系統,公安局線上報案系統,股市後臺網站系統等等,他們的壓力不是很大,但是對可靠性要求是非常高的

2,有錢沒地方花的,典型的政府企業,公辦學校等等

二,Keepalived雙機熱備的特性以及優缺點

特性:
1,至少需要兩臺伺服器,其中一臺為master始終提供服務,另外一臺作為backup始終處於空閒狀態,只有在主伺服器掛掉的時候他就來幫忙了,這是典型的雙擊熱備

2,能根據需求判斷服務是否可用,在不可用的時候要即使切換
優缺點:

優點:資料同步非常簡單,不像負載均衡對資料一致性要求非常高,實現起來相對複雜維護也頗為不便,雙機熱備用rsync就可以實現了操作和維護非常簡單

缺點:伺服器有點浪費,始終有一臺處於空閒狀態


三,Keepalived雙機熱備的配置
首先畫個雙機熱備拓撲圖吧:



這裡我只寫最終實現的配置,至於Keepalived的理論知識請參考《Keepalived原理與實戰精講

1,本例通過Keepalived來實現兩臺LNMP(也就是linux+nginx+mysql+php)架構伺服器的雙機熱備

LNMP的配置請參考:《Lnmp配置精講第一版

2,Keepalived配置雙機安裝配置

1》Keepalived安裝

keepalived官方地址:http://www.keepalived.org/download.html,大家可以到這裡下載最新版本的keepalived

作業系統:centos 5.5 32bit
系統安裝:最小化安裝,也就是去掉所有元件
環境配置:安裝make 和 gcc openssl openssl-devel等等
  1. yum -y install gcc make openssl openssl-devel wget kernel-devel
  2. mkdir -p /usr/local/src/hasoft
  3. cd /usr/local/src/hasoft
  4. wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
  5. tar -zxvf keepalived-1.2.2.tar.gz
  6. cd keepalived-1.2.2
  7. ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/
複製程式碼 預編譯後出現:
  1. Keepalived configuration
  2. ------------------------
  3. Keepalived version       : 1.2.2
  4. Compiler                 : gcc
  5. Compiler flags           : -g -O2 -DETHERTYPE_IPV6=0x86dd
  6. Extra Lib                : -lpopt -lssl -lcrypto
  7. Use IPVS Framework       : Yes
  8. IPVS sync daemon support : Yes
  9. IPVS use libnl           : No
  10. Use VRRP Framework       : Yes
  11. Use Debug flags          : No
複製程式碼
  1. make && make install
複製程式碼 這裡注意哦,我上面是指通用的安裝方法,如果你沒有用到LVS可以把lvs去掉即
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/ --disable-lvs-syncd --disable-lvs

但這個沒有影響,就按照我的來配置吧,不過如果你要是集成了LVS,那麼就不可加這兩個引數了哦

整理管理檔案:
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

建立配置檔案目錄(注意:keepalived的配置檔案預設在/etc/keepalived/目錄)
mkdir -p /etc/etc/keepalived/

兩臺伺服器(兩個節點)都這樣安裝即可

2》配置

節點A配置如下:
vi /etc/keepalived/keepalived.conf
  1. global_defs
  2. {
  3. notification_email
  4. {
  5. [email protected]
  6. [email protected]
  7. }
  8. notification_email_from [email protected]
  9. smtp_server 127.0.0.1
  10. stmp_connect_timeout 30
  11. router_id lnmp_node1
  12. }
  13. vrrp_instance lnmp {
  14. state MASTER
  15. interface eth0
  16. virtual_router_id 100
  17. priority 200
  18. advert_int 5
  19. track_interface {
  20. eth0
  21. eth1
  22. }
  23. authentication {
  24. auth_type PASS
  25. auth_pass 123456
  26. }
  27. virtual_ipaddress {
  28. 192.168.17.200
  29. }
  30. }
複製程式碼
節點B配置如下:
vi /etc/keepalived/keepalived.conf

  1. global_defs
  2. {
  3. notification_email
  4. {
  5. [email protected]
  6. [email protected]
  7. }
  8. notification_email_from [email protected]
  9. smtp_server 127.0.0.1
  10. stmp_connect_timeout 30
  11. router_id lnmp_node1
  12. }
  13. vrrp_instance lnmp {
  14. 相關推薦

    Linux 實現MySQL+Keepalive 可用

    轉載自linux社群的linux521編寫的詳細教程 說明:藍色=命令名稱 淺綠=命令引數       淺藍=選項       紫色=目錄       系統環境:CentOS  5.7 x86_64 一、所需準備mysql-master :192.168.1.

    corosync+pacemaker+drbd 實現mysql可用

    corosync+pacemaker+drbd 實現mysql的高可用性一、環境準備1.操作系統centos 6.4 (32位)系統要是雙網卡2.配置各節點互相解析 node1:[[email protected] ~]# uname -n node1.test.com [[email 

    keepalived+MHA實現mysql主從可用集群

    keepalived mha mysql主從集群 高可用 本節索引原理分析實驗環境準備主從復制集群安裝MHA包初始化MHA配置Keepalived故障出現故障恢復總結 一 原理分析1 MHA簡介:MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟

    MHA實現mysql可用叢集

    前言:         在生產環境中,資料庫對於一個企業是至關重要的,因此我們應該做到生產中的mysql高可用,從而實現假如有一臺資料庫宕機,別的機器會自動代替宕機的伺服器的工作,從而實現資料庫的快速切換,避免單點故障,從而保證業務的正常執行。MHA就可以

    MySQL可用實現MySQL系列之十四

    一致性 ilo ply purge shutdown monitor 半同步 eve 延遲 MySQL的高可以有三種實現方式:多主模式(Multi Master MySQL),MHA(Master High Availability)和 Galera Cluster:wr

    memcached實現主主復制和keepalive可用方式

    ali 上進 endif alived 函數 相同 pri face 軟件 實驗拓撲 實驗環境 服務器 IP地址 操作系統 主要軟件 memcached1 192.168.144.122 centos7.3 libevent2.1.8、memcached1.

    MySQL進階】Keepalived1.4.0結合MySQL 5.7.19實現主備可用

    port 腳本 amp ado roo ins log openss net 1、基本環境 數據庫安裝及主備同步接上一篇文章:http://blog.51cto.com/13946719/2309514JDK 1.8_171MySQL 5.7.19CentOS 7.4Kee

    day77_淘淘商城專案_10_ Linux下的Nginx代理詳解(配置虛擬主機+實現反向代理+實現負載均衡+可用) + 單點登入系統工程搭建 + SSO系統介面文件講解_匠心筆記

    淘淘商城專案_10 1、目前訪問系統使用的方式存在的問題 2、什麼是nginx 3、nginx的應用場景 4、nginx的安裝 4.1、要求的安裝環境 4.2、安裝步驟 4.3、啟動nginx

    keepalive可用nginx(nginx動靜分離)的實現

    clust 修改配置 lin F12 ice ifconfig img 修改配置文件 51cto HA Cluster的配置前提: 1、各節點時間要同步; 2、確保iptables及selinux不會成為障礙; 3、(可選)各

    MySQL可用架構—MHA

    mysql mha MySQL高可用目前有heartbeat+drbd、MHA、MySQL復制等幾種較成熟的方案,heartbeat+drbd的方案可擴展性較差,而且讀寫都由主服務器負責,從庫並不提供讀功能,適合於數據增長量不大、一致性要求很高的環境,如銀行、金融業等。今天重點講下MHA的高可用架構。

    CentOS 搭建 Mysql MMM 可用架構

    install 高可用 padding log isa har mmm_mond replica tro 環境 CentOS Mysql 5.1 前提 安裝了EPEL,詳細安裝步驟請參照 http://blog.csdn.net/robinsonmhj/articl

    mysql mha可用架構的安裝

    pin 變量 log-bin dump 控制 masters 否則 ava 1.5 MMM無法全然地保證數據的一致性,所以MMM適用於對數據的一致性要求不是非常高。可是又想最大程度的保證業務可用性的場景對於那些對數據一致性要求非常高的業務,非常不建議採用MMM的這樣

    mysql+mha可用搭建

    mysql mha 主庫:172.25.254.125備庫:172.25.254.225管理節點:172.25.254.126在開始之前,請先配置好服務器間的時間同步和名稱解析一:在數據庫節點安裝mha node[[email protected]/* */ ~]# rpm -ivh ep

    nginx實現請求的負載均衡 + keepalived實現nginx的可用

    java 谷歌 you proc max 業務需求 html state opus 前言   使用集群是網站解決高並發、海量數據問題的常用手段。當一臺服務器的處理能力、存儲空間不足時,不要企圖去換更強大的服務器,對大型網站而言,不管多麽強大的服務器,都滿足不了網站持續增長的

    linux RHCS集群 可用web服務器

    讀寫操作 http pac 安裝 邏輯卷管理 同一文件 根據 hat reat RHCS集群,高可用服務器 高可用 紅帽集群套件,提供高可用性,高可靠性,負載均衡,快速的從一個節點切換到另一個節點(最多16個節點)負載均衡 通過lvs提供負載均衡,lvs將負載通過負載分

    Nginx+Keepalive可用之主從配置

    高可用 nginx keepalived 實驗環境 操作系統:CentOS 7.4 1708 軟件安裝:yum -y install epel-release && yum -y install nginx keepalived Nginx+Keepalived NodeA:

    Linux的企業-Mfs可用corosync+pacemaker+fence+iscci

    mfs高可用corosync+pacemaker+fence+iscci一.配置環境Redhat6.5Server1:172.25.50.1 master corosync+pacemakerServer2:172.25.50.2 master corosync+pacemakerServer3:172.25

    實現keepalived企業級可用基於LVS-DR模式

    負載均衡 lvs dr模式 keepalived 地址漂移 一、為什麽要使用keepalived 當後端實現了負載均衡後壞掉一臺機器後可以用另一臺後臺web服務器補上,但是當前端的LVS壞掉後,整套服務就徹底廢掉,因此前端的LVS也需要實現負載均衡。 Keepa

    Keepalived + Haproxy實現負載均衡可用

    liunx haproxy 高可用基於LVS實現Keepalived的高可用見:http://amelie.blog.51cto.com/12850951/1979636負載均衡為將用戶並發請求轉發到後臺若幹服務器,以分流方式均衡負載。均衡負載借用的軟件,我們這裏是Haproxy。而負責轉發的服務器,我們稱之

    Mysql MHA可用集群架構

    mysql- root 免密鑰登錄 sep ges 至少 isp 原來 mysql數據庫 記得之前發過一篇文章,名字叫《淺析MySQL高可用架構》,之後一直有很多小夥伴在公眾號後臺或其它渠道問我,何時有相關的深入配置管理文章出來,因此,民工哥,也將對前面的各類架構