使用Keepalived搭建MySQL雙主模式的高可用集羣系統

1、環境準備

兩臺分別安裝mysql

yum -y install mysql mysql-server

兩臺分別關閉防火牆和selinux

iptables -F #關閉防火請
setenforce 0 #關閉selinux

在這裏插入圖片描述
兩臺分別修改主配置文件my.cnf
第一臺:

vim /etc/my.cnf

log-bin=mysql-bin
server-id=1
expire-logs-days=99
replicate-do-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
auto-increment-increment=2
auto-increment-offset=1

在這裏插入圖片描述
第二臺:

vim /etc/my.cnf

log-bin=mysql-bin
server-id=2
expire-logs-days=99
replicate-do-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
auto-increment-increment=2
auto-increment-offset=1

在這裏插入圖片描述
兩臺分別開啓mysql服務

service mysqld start

兩臺分別設置mysql密碼並登錄mysql

mysqladmin -u root password '123456'
mysql -u root -p

在這裏插入圖片描述
其中一臺備份test數據庫
其中一臺鎖定數據庫,使數據不再更新

flush tables with read lock;

然後備份test數據庫

mysqldump -uroot -p test > /tmp/test.sql

在這裏插入圖片描述
最後再解鎖數據庫

unlock tables;

在這裏插入圖片描述
傳遞sql文件到另一臺服務器

scp /tmp/test.sql [email protected]:/tmp

在這裏插入圖片描述
傳遞成功。
在兩臺服務器上分別授權一個用戶

grant replication slave on *.* to 'wmm'@'%' identified by '123456';
flush privileges;

在這裏插入圖片描述
兩臺服務器上分別查看當前使用的二進制文件

show master status;

在這裏插入圖片描述
在這裏插入圖片描述
當前使用的二進制文件名相同
兩臺服務器分別登錄並配置master.info文件
第一臺:

change master to master_host='192.168.201.140',master_user='wmm',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=475;

在這裏插入圖片描述
第二臺:

change master to master_host='192.168.201.137',master_user='wmm',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=475;

在這裏插入圖片描述
兩臺服務器都開啓同步功能並查看信息

start slave;
show slave status\G;

在這裏插入圖片描述
在這裏插入圖片描述
兩臺都是Slave_IO_Running: Yes和Slave_SQL_Running: Yes。表明兩臺服務器都顯示同步成功。
爲了確定是否真的同步成功,於是再測試一下:
第一臺同步到第二臺

#第二臺服務器
use test;
show tables;

在這裏插入圖片描述

#第一臺服務器
use test;
show tables;
create table aa (name char(40)); #創建個aa數據表
show tables;

在這裏插入圖片描述

#第二臺服務器
show tables;

在這裏插入圖片描述
經測試,發現第一臺服務器的aa數據表成功同步到第二臺服務器
第二臺同步到第一臺

#第二臺服務器
use test;
show tables;
create table bb (id int(10)); #創建個bb數據表
show tables;

在這裏插入圖片描述

#第一臺服務器
show tables;

在這裏插入圖片描述
經測試,發現第二臺服務器的bb數據表也能成功同步到第一臺服務器。

2、Keepalived搭建MySQL雙主模式的高可用集羣系統

1.兩臺服務器分別安裝gcc

yum -y install gcc*

2.兩臺服務器分別安裝依賴包

yum -y install openssl-devel popt-devel

在這裏插入圖片描述
3.兩臺服務器分別換光盤
eject彈出光盤,然後選擇下面這個鏡像連接
在這裏插入圖片描述
4.兩臺服務器分別安裝keepalived
兩臺服務器都做以下操作:

cd /media/20150611_063116/
tar -zxf keepalived-1.2.7.tar.gz -C /usr/src

在這裏插入圖片描述

cd /usr/src/keepalived-1.2.7/
./configure --prefix=/usr/local/keepalived
make && make install

在這裏插入圖片描述
在這裏插入圖片描述
5.兩臺服務器分別移動、查看和配置keepalived.conf配置文件

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cd /etc/keepalived/
chmod a+x keepalived.conf #加上可執行權限
vim keepalived.conf

keepalived用到虛擬路由冗餘協議vrrp
在這裏插入圖片描述
第一臺配置:

global_defs { #全局配置
   router_id aa #配置路由器名稱
}

vrrp_instance VI_1 { #實例區域
    state BACKUP #MASTER主設備、backup備用設備
    interface eth0 #網卡名稱
    virtual_router_id 66 #id號標識同屬一個組
    priority 100 #優先級
    advert_int 1 #心跳時間,每隔一秒發一次信號,做一次同步
    nopreempt #設置優先級
    authentication { #認證信息
        auth_type PASS #PASS密碼認證
        auth_pass 1111
    }
    virtual_ipaddress { #虛擬地址
        192.168.201.200
    }
}

virtual_server 192.168.201.200 3306 { #虛擬出來的集羣ip地址
    delay_loop 2 #每隔多久檢查服務器狀態
    lb_algo wrr
    lb_kind DR #類型
    persistence_timeout 50 #超時時間
    protocol TCP

    real_server 192.168.201.137 3306 { #真實ip地址
        weight 3 #權重,哪一臺優先工作
        notify_down /root/keepalived.sh #關閉服務的腳本
        TCP_CHECK {
            connect_timeout 5 #連接超時時間
            nb_get_retry 3 #如果超時,重連多少次
            delay_before_retry 3 #間隔3秒
            connect_port 3306 #默認連接端口
        }
    }
}

在這裏插入圖片描述
第二臺配置:

global_defs { #全局配置
   router_id bb #配置路由器名稱
}

vrrp_instance VI_1 { #實例區域
    state BACKUP #MASTER主設備、backup備用設備
    interface eth0 #網卡名稱
    virtual_router_id 66 #id號標識同屬一個組
    priority 80 #優先級
    advert_int 1 #心跳時間,每隔一秒發一次信號,做一次同步
    authentication { #認證信息
        auth_type PASS #PASS密碼認證
        auth_pass 1111
    }
    virtual_ipaddress { #虛擬地址
        192.168.201.200
    }
}

virtual_server 192.168.201.200 3306 { #虛擬出來的集羣ip地址
    delay_loop 2 #每隔多久檢查服務器狀態
    lb_algo wrr #帶權重的輪詢
    lb_kind DR #類型
    persistence_timeout 50 #超時時間
    protocol TCP

    real_server 192.168.201.140 3306 { #真實ip地址
        weight 3 #權重,哪一臺優先工作
        notify_down /root/keepalived.sh #關閉服務的腳本
        TCP_CHECK {
            connect_timeout 5 #連接超時時間
            nb_get_retry 3 #如果超時,重連多少次
            delay_before_retry 3 #間隔3秒
            connect_port 3306 #默認連接端口
        }
    }
}

6.兩臺服務器分別寫關閉keepalived服務的腳本keepalived.sh

cd /root/
vim keepalived.sh

keepalived.sh內容爲:

#!/bin/bash
pkill keepalived

在這裏插入圖片描述
授予keepalived.sh執行權限

chmod a+x keepalived.sh

在這裏插入圖片描述
7.兩臺服務器分別開啓keepalived服務並查看進程

/usr/local/keepalived/sbin/keepalived -D
ps -elf | grep keepalived

在這裏插入圖片描述
在這裏插入圖片描述
服務已經開啓成功
8.兩臺服務器分別ping一下虛擬集羣ip進行測試

ping 192.168.201.200

在這裏插入圖片描述
在這裏插入圖片描述
發現兩臺服務器都可以ping通虛擬集羣ip。
在客戶端進行測試
客戶端ping一下虛擬集羣ip進行測試

ping 192.168.201.200

在這裏插入圖片描述
客戶端安裝mysql並登錄一下虛擬集羣的mysql進行測試

yum -y install mysql
mysql -h 192.168.201.200 -u wmm -p

在這裏插入圖片描述
登錄成功。
在客戶端分別執行以下命令進行查看當前所用的是哪一臺mysql服務器:

mysql>show variables like 'server_id'; #使用server_id查看
tcpdump vrrp #抓包查看

兩臺服務器不同時的執行以下命令,以實現一臺服務器mysql故障,從而切換到另一臺

killall keepalived
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章