1. 程式人生 > >keepalive配置mysql自動故障轉移

keepalive配置mysql自動故障轉移

本文先配置了一個雙master環境,互為主從,然後通過Keepalive配置了一個虛擬IP,客戶端通過虛擬IP連線master1,當master1宕機,自動切換到master2。一次只能連線其中一個master進行讀寫,所以是active-passive模式。

一 Mysql主主複製搭建

1.1 實驗環境

兩臺機器事先都已經裝好了mysql單例項。



二者的埠號需要保持一致,否則在最後用vip連線的時候,不能使用相同埠號連線。
 

1.2 實驗步驟

1.2.1 修改配置檔案

修改master1:

在[mysqld]下面新增:

server-id =  1

relay-log=/data/server/mysql_3307/binlog/ZabbixServer-relay-bin

relay-log-index=/data/server/mysql_3307/binlog/ZabbixServer-relay-bin.index

auto-increment-offset = 1    

auto-increment-increment = 2 

log-slave-updates=true

修改master2:

在[mysqld]下面新增:

server-id =  3

relay-log =/data/server/mysql/binlog/single-relay-bin

relay-log-index=/data/server/mysql/binlog/single-relay-bin.index

auto-increment-offset = 2   

auto-increment-increment = 2 

log-slave-updates=true

新增auto-increment-offset那兩項,是為了避免在MySQL INSERT時主鍵衝突。

修改完後記得重啟mysql

1.2.2 建複製使用者

分別在兩臺mysql上執行

GRANT REPLICATION SLAVE ON *.* TO 'RepUser'@'%'identified by 'beijing';

1.2.3 指向master

兩臺伺服器均為新建立,且無其它寫入操作,各伺服器只需記錄當前自己二進位制日誌檔案及事件位置,以之作為另外的伺服器複製起始位置即可。否則,需要先備份主庫,在備庫進行恢復,從而保持資料一致,然後再指向master。

Master1:

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |      302|              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

Master2:

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |      120 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

#Master1指向Master2

CHANGE MASTER TO MASTER_USER='RepUser',MASTER_HOST='192.168.1.21',MASTER_PASSWORD='beijing',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=120;

#Master2指向Master1
CHANGE MASTER TO MASTER_USER='RepUser',MASTER_HOST='192.168.1.22',MASTER_PASSWORD='beijing', MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=302;


1.2.4 分別啟動slave

start slave ;

確保show slave status

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

測試兩邊是否同步,略。

二:配置keepalived

1 keepalive安裝

分別在master1master2上安裝keepalive

yum install -y popt-devel
cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
tar zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/
make
make install

#假如在執行./configure --prefix=/時報錯: OpenSSL is not properly installed on your system !!!Can notinclude OpenSSL headers files則yum install openssl-devel -y

2 分別在master1,master2上新建檢查mysql指令碼

vi /root/check_mysql.sh

內容如下

MYSQL=/usr/local/mysql/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=root
[email protected]


$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
#$mysqlclient --host=$host --port=$port --user=$user --password=$password  -e "show databases;" > /dev/null 2>&1
if [ $? == 0 ]
then
    echo " $host mysql login successfully "
    exit 0
else
    #echo " $host mysql login faild"
    /etc/init.d/keepalived stop
    exit 2
fi


chmod +x /root/check_mysql.sh

3 修改配置檔案

vi /etc/keepalived/keepalived.conf

master1和master2配置檔案內容相同。

內容:

#ConfigurationFile for keepalived
global_defs {
notification_email {                        ######定義接受郵件的郵箱
  [email protected]
        }
  notification_email_from [email protected]    ######定義傳送郵件的郵箱
  smtp_server mail.tuge.com
  smtp_connect_timeout 10
}
vrrp_script check_mysql {                   ######定義監控mysql的指令碼
     script "/root/check_mysql.sh"
     interval 2                             ######監控時間間隔
     weight 2                               ######負載引數
     }
vrrp_instance vrrptest {                 ######定義vrrptest例項
        state BACKUP              ######伺服器狀態
  interface eth0                      ######使用的介面
        virtual_router_id 51                ######虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換
        priority 150                        ######服務啟動優先順序,值越大,優先順序越高,BACKUP 不能大於MASTER
        advert_int 1                        ######伺服器之間的存活檢查時間
authentication {
        auth_type PASS                      ######認證型別
        auth_pass ufsoft       ######認證密碼,一組lvs 伺服器的認證密碼必須一致
}
track_script {                              ######執行監控mysql程序的指令碼
     check_mysql
     }
virtual_ipaddress {                         ######虛擬IP地址
         192.168.1.60
}
}

這裡state不配置MASTER,且優先順序一樣,是期望在MASTER1宕機後再恢復時,不主動將MASTER狀態搶過來,避免MySQL服務的波動。

由於不存在使用lvs進行負載均衡,不需要配置虛擬伺服器virtual server,下同。

vi /etc/sysconfig/iptables

#注意,在兩臺機器上都要修改。

新增:

-A INPUT -d 192.168.1.60/32 -j ACCEPT

-A INPUT -d 224.0.0.18 -j ACCEPT #新增VRRP通訊支援

注意:第一行中的192.168.1.60需要改成你自己的vip。

service iptables restart

5 啟動keepalived

master1master2上分別啟動:
service keepalived start

分別執行ip addr命令,可以在其中一臺機器上看到虛擬IP.如:

[[email protected] keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_faststate UP qlen 1000
    link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.22/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.60/32 scope global eth0
    inet6 fe80::a00:27ff:fe04:516/64 scope link tentativedadfailed 
       valid_lft forever preferred_lft forever

說明虛擬vip連在了master1這臺機器上。

如果自動只連線到了master2,關閉master2keepalived,再啟動,自動就連線到master1了。

現在都可以ping通虛擬ip了。

6 測試

停止master1伺服器keepalived,檢查VIP是否切換到master2伺服器(用ip addr命令驗證即可);

三 測試高可用環境是否配置成功

3.1 建允許遠端訪問的使用者

在master1,master2建立允許遠端訪問的使用者:

grant select,update,delete,insert on *.* to 'dandan' identified by 'dandan';

3.2 訪問虛擬IP

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

mysql -u dandan-pdandan -h 192.168.1.60 --port 3307

停止master1伺服器的mysqlVIP切換到了master2伺服器。

master2上檢視:

mysql> showprocesslist;
+----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| Id | User        | Host               | db   | Command | Time | State                                                                      | Info             |
+----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+
|  3 | root        | localhost          | dba | Query   |    0 | init                                                                       | show processlist |
| 14 | systemuser |                    | NULL |Connect |  247 | Reconnecting after afailed master event read                               | NULL             |
| 15 | systemuser |                    | NULL |Connect |  207 | Slave has read all relaylog; waiting for the slave I/O thread to update it | NULL             |
| 90 |dandan      | 192.168.1.60:39995 |dba  | Sleep   |    8|                                                                            | NULL             |
+----+-------------+--------------------+------+---------+------+-----------------------------------------------------------------------------+------------------+

看到了dandan的連線資訊。

相關推薦

keepalive配置mysql自動故障轉移

本文先配置了一個雙master環境,互為主從,然後通過Keepalive配置了一個虛擬IP,客戶端通過虛擬IP連線master1,當master1宕機,自動切換到master2。一次只能連線其中一個master進行讀寫,所以是active-passive模式。 一 My

HDFS高可用性 手動故障轉移自動故障轉移配置教程

本文適用範圍,對於任何官方開源包安裝的叢集環境 要配置HA NameNode,你必須將多個配置選項新增到你的hdfs-site.xml配置檔案。這裡我先給出全部的配置項,然後接下來會逐步提及各配置項。 <configuration> &l

基於MGR+Atlas的讀寫分離嘗試,以及MGR+Keepalived+Atlas自動故障轉移+讀寫分離設想

字符 SQ keepalive 分享圖片 測試環境 物理 沒有 efi 列表 復制環境準備 讀寫分離理論上講,跟復制模式沒有關系,atlas負責的是重定向讀寫,至於復制模式自己選擇,這裏是測試環境,之前測試MGR的單機多實例,MGR單主模式的復制模式,就順便借助MG

hadoop hdfs 高可用性安裝 測試 zookeeper 自動故障轉移

安裝基於CentOS 7 安裝,系統非最小化安裝,選擇部分Server 服務,開發工具組。全程使用root使用者,因為作業系統的許可權、安全,在啟動時會和使用其它使用者有差別。Step 1:下載hadoop.apache.org 選擇推薦的下載映象結點; https://hadoop.apache.org/r

MySql-JDBC故障轉移

MySQL Connector/J 支援故障轉移,故障轉移在潛在的風險要發生的時候使用,通常情況下,資料庫連線發生錯誤,需要客戶端的異常處理(重新建立Statement、ResultSet、重啟程序),而使用Mysql Replication-Driver能夠實

使用Redis運維監控工具sentinel進行自動故障轉移

在一個叢集中,我們經常要考慮它的安全,防止主節點發生宕機,當然,這是無法保障的,不可避免,但是,我們可以做好預防措施,比如在一個叢集中,主節點掛掉了,我們要進行迅速轉移,將另一臺從節點切換為主節點從而預防單點故障,那麼,本篇文章將教如何手動進行故障轉移,最後使用

新手入門 配置Always On 故障轉移群集例項

1.      搭建WSFC 1.1.1.        部署環境準備  準備3臺虛擬機器,總體概況如下,後續詳細介紹配置過程 1.1.1.        WindowsServer AD搭建和配置 修改機器名稱 1.1.2.  

Hadoop之旅(7)— HDFS HA Zookeeper自動故障轉移

<!-- 兩個NameNode --> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <property&g

ORACLE RAC TAF 配置(透明故障轉移

原文地址:http://blog.itpub.net/17086096/viewspace-1872783/TAF(Transparent Application Failover)即透明應用程式故障轉移技術。當初始化連接出現問題無法連線時,該功能可以保證應用程式重新連線到可

Redis集群以及自動故障轉移測試

設置 中一 而是 其中 安裝 mage 故障 更多 才會 在Redis中,與Sentinel(哨兵)實現的高可用相比,集群(cluster)更多的是強調數據的分片或者是節點的伸縮性,如果在集群的主節點上加入對應的從節點,集群還可以自動故障轉移,因此相比Sentinel

(2)MongoDB副本集自動故障轉移原理

前文我們搭建MongoDB三成員副本集,瞭解叢集基本特性,今天我們圍繞下圖聊一聊背後的細節。 預設搭建的replica set均在主節點讀寫,輔助節點冗餘部署,形成高可用和備份, 具備自動故障轉移的能力。 叢集心跳保活 叢集每個節點以週期性向其他成員發出心跳命令 replSetHeartb

(2)MongoDB副本集自動故障轉移全流程原理

前文我們搭建MongoDB三成員副本集,瞭解叢集基本特性,今天我們圍繞下圖聊一聊背後的細節。 預設搭建的replica set均在主節點讀寫,輔助節點冗餘部署,形成高可用和備份, 具備自動故障轉移的能力。 叢集心跳保活 叢集每個節點以週期性向其他成員發出心跳命令 replSetHeartb

VCSA 6.5 HA 配置之五:故障轉移測試

center style justify 接著上篇文章配置完成VCSA的高可用後,其是否真的能實現高可用的效果,本篇文章將會一探究竟手動故障切換在vCenter HA配置頁面可以看到當前的主動節點、被動節點和見證節點;在例行維護或者其他時候可以手動執行故障切換通過右上方的"啟動故障切換" ,在一般

MySQL 高可用:mysql+Lvs+Keepalived 負載均衡及故障轉移

ica 目錄 details software fwm 多個 優先級 sql 服務器 規則 轉自 MySQL 高可用:mysql+Lvs+Keepalived 負載均衡及故障轉移 - KK ——專註數據 - 博客頻道 - CSDN.NETh

SQL Server Alwayson搭建四:故障轉移集群配置

數據庫 SQL Server 確定仲裁模式配置故障轉移集群的時候,如果集群節點是奇數,那麽使用多數節點;如果集群節點是偶數,那麽使用多數節點和文件共享 (配置一個共享文件夾,各個節點都能訪問這個共享文件夾)因為是偶數節點(sql01和sql02),因此選擇多數節點和文件共享模式2.安裝故障轉移集群,s

LINUX——關於mysql中較詳細的,數據庫的主從配置自動備份以及讀寫分離的使用

rep lock ast name ocs lib .cn ket ger 1.主從簡介數據在企業中是非常重要的一部分,存儲數據的數據庫多種多用樣,但卻都存在著一種隱患·數據庫數據丟失·數據庫訪問人數較多時,一臺數據庫無法保證服務質量2.主從的作用·實時災備,用於故障切換·

Kubernetes 之 MySQL 持久儲存和故障轉移(十一)

一、規劃 我們接著之前的文件的架構規劃進行下面的操作。 IP 角色 192.168.1.200 k8s-master 192.168.1.201 k8s-node01 192

flume高階配置——資料流的複製、分流、負載均衡、故障轉移

一、在前面幾篇文章中介紹過幾種常見的flume pipeline 場景。我們在回顧一下,主要有一下幾種: 1、多個 agent 順序連線: 可以將多個Agent順序連線起來,將最初的資料來源經過收集,儲存到最終的儲存系統中。這是最簡單的情況,一般情況下,應該控制這種順

Windows 2012配置故障轉移 For SQLServer 2014 AlwaysOn

                       SQLserver AlwaysOn技術依賴於Windows WSFC功能,即故障轉移群集功能。無論是Liunx下的Corosync+Pacemaker還是Oracle Grid Infrastructure,都需要完成叢集資源的管控以及資源隔離。WSFC會把和S

Win7下配置MySql定時自動備份

最近遇到了需要定時備份MySQL資料庫的需求,解決方法是採用批處理指令碼配合windows計劃任務實現每天自動備份,此處記錄一下配置過程。 先貼一下使用到的bat指令碼: @echo off   set "Ymd=%date:~,4%%date:~5,2%%da