Mysql+keepalived雙主

搭建環境說明:

master1:192.168.175.210   主

master2:192.168.175.211

keepalived的vip: 192.168.175.11(注意這是虛擬IP,無需存在這臺主機,只要保證這個ip是沒有人用的便可)

1、MySQL數據庫安裝(兩臺主機都要操做)

本次筆者是在Centos7上安裝的是mysql的,若是有其餘需求能夠自行下載。mysql

一、下載安裝包,若是下載不了請本身到官網下載相匹配的rpm,我下載的不須要安裝其餘依賴,若是去官網下載可能要安裝一些依賴包,依次安裝便可。這種形式安裝後是經過生成yum源的形式,而後經過yum形式安裝。linux

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

二、安裝mysql源算法

yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

三、mysql安裝sql

yum -y install mysql-community-server

在安裝mysql時有較多的東西須要安裝,稍等片刻便可。數據庫

四、啓動mysqlvim

啓動前請關閉selinux,有兩種方式關閉bash

方式一,臨時關閉,下次開機啓動後會重啓負載均衡

setenforce 0

方式2、永久關閉,經過設置配置文件的方式,將 SELINUX改成disabled的形式,以下:ide

vim /etc/selinux/config

 

開始啓動mysql服務:oop

systemctl start mysqld

能夠將其設置爲開機啓動:

[root@localhost ~]# systemctl enable mysqld
[root@localhost ~]# systemctl daemon-reload

登入mysql,注意第一次登入須要先找到mysql的root用戶的密碼,通常狀況下root用戶密碼存放在/var/log/mysqld.log下,若是不在該目錄下能夠經過 find / -name mysqld.log查找該文件

個人是在該目錄下,因此直接查看:

[root@localhost ~]# vi /var/log/mysqld.log
mysql -uroot -p

輸入密碼便可登入。

2、關於備份數據庫問題。

mysql的雙機高熱,須要對那些須要備份的數據庫的數據進行同步,因此須要咱們先將主庫的數據進行數據同步,若是是兩個新建的數據庫進行數據備份,無需作這一步 。不過筆者聽別人說

能夠不進行同步,能夠指定到具體位置就能夠實現自動同步,可是這種狀況筆者認爲,對應數據庫的高可用這方面是行不通的。假設其中一臺機器宕機,另外一臺機器進行服務的時候就會由於

數據的不一樣步而出現問題,因此筆者認爲仍是有必要進行數據同步的。

通常狀況下數據庫備份分爲多種,有壓縮文件的形式,有直接寫sql文件的形式,若想了解這方面的狀況,能夠自行在網上搜索,筆者在這裏就不進行整理。

第一步:鎖定數據庫,防止有新的數據進行寫入,形成數據不徹底同步。因此通常狀況下,若是是在公司搭建,會在下班時間進行搭建。(192.168.175.210操做)

mysql>flush tables with read lock; 

 

第二步:將須要同步的數據庫進行sql文件輸出。

mysqldump -uroot -p --databases test1 test2 test3>master.sql

這時會在當前目錄下建立一個master.sql文件,固然也能夠指定路徑,不過若是僅僅是用一次,同步完畢刪除便可。

 

第三步:生成的sql文件遠程複製到備份機上,隨意指定

scp master.sql master2_mysql:/tmp/

 

第四步:在備份機上進行數據同步(192.168.175.211)操做

mysql -uroot -p <back.sql

第五步:檢查一下,看看在備份機上有沒有數據,若是有數據同步完成。

3、數據庫熱備

數據庫熱備的定義在這裏就不進行贅述,網上有不少這方面的原理解讀。這裏採用的是經過記錄數據庫操做,備份數據庫讀取這些操做,從而達到熱備的效果。

第一步:分別在兩個數據庫中建立用於備份是時的用戶並受權

在192.168.175.210上進行操做:

mysql>create user 'replicate'@'192.168.175.211' identified by 'qwe123';   # 192.168.175.211是備份機的ip
Query OK, 0 rows affected (0.09 sec)
mysql
>grant replication slave on *.* to 'replicate'@'192.168.175.211';
Query OK, 0 rows affected (0.09 sec)
mysql
>flush privileges;
Query OK, 0 rows affected (0.09 sec)

在192.168.175.211上進行操做:

mysql>create user 'replicate'@'192.168.175.210' identified by 'qwe123';   # 192.168.175.211是備份機的ip
Query OK, 0 rows affected (0.09 sec)

mysql>grant replication slave on *.* to 'replicate'@'192.168.175.210';
Query OK, 0 rows affected (0.09 sec)

mysql>flush privileges; 
Query OK, 0 rows affected (0.09 sec)

分別在兩臺主機上用備份用戶進行訪問

# 在192.168.175.210 (操做)
mysql -h192.168.175.211 -ureplicate -pqwe123

# 在192.168.175.211 (操做)
mysql -h192.168.175.210 -ureplicate -pqwe123

若是都可以進入mysql 說明操做成功

第二步:配置數據庫的配置文件

通常狀況下,mysql的配置文件路徑是在 /etc/my.cnf  若是你的沒有能夠用  find / -name my.cnf  的方式查找, 若是查不到,能夠查看/usr/share/mysql目錄下的.cnf文件,應該是mysql開頭,對其負責一份到/etc/下,並更名爲my.cnf便可。

注意:在修改my.cnf以前,先對其進行備份,不要直接修改

cp my.cnf my.cnf.bak

第三步:修改數據庫配置(注意這了的配置是關於熱備的主要配置,其餘數據庫配置須要本身添加)

在192.168.175.210上配置

vim /etc/my.cnf
[mysqld]
server-id=1 # 惟一id
innodb_flush_log_at_trx_commit=2  # 默認爲1,防止數據丟失
log-bin=mysql-bin-1    #binlog日誌文件名(能夠任意命名)
binlog-do-db=test # 記錄日誌的數據庫(若是沒有此項,表示同步全部的庫)
binlog-ignore-db=mysql     # 不須要同步的數據庫
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys log
-slave-updates=ON relay_log=mysql-relay-bin slave_skip_errors=1062 # 跳過1062錯誤 auto_increment_increment=2 auto_increment_offset=1
# 注意
# bind_address = 127.0.0.1 若在配置文件中有這一項,須要將其註釋,否則在同步數據時,的鏈接數據庫狀況會出錯

在192.168.175.211上配置:

vim /etc/my.cnf
[mysqld]
server-id=2 # 惟一id
innodb_flush_log_at_trx_commit=2  # 默認爲1,防止數據丟失
log-bin=mysql-bin-2   #binlog日誌文件名(能夠任意命名)
binlog-do-db=test # 記錄日誌的數據庫(若是沒有此項,表示同步全部的庫)
binlog-ignore-db=mysql     # 不須要同步的數據庫
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
log-slave-updates=ON
relay_log
=mysql-relay-bin
slave_skip_errors
=1062 # 跳過1062錯誤 auto_increment_increment=1 auto_increment_offset=1
# 注意
# bind_address = 127.0.0.1 若在配置文件中有這一項,須要將其註釋,否則在同步數據時,的鏈接數據庫狀況會出錯

第四步:重啓數據庫,主備都須要重啓

systemctl restart mysqld 或 service mysqld restart

第五步:登入數據庫查看狀態

在192.168.175.210上登入數據庫,執行操做

mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin-1.00001   # 記住這個值,後面有用
        Position: 154                 # 記住這個值,後面有用
    Binlog_Do_DB: test
Binlog_Ignore_DB:mysql,information_schema,performance_schema,sys
Executed_Gtid_Set: 
1 row in set (0.00 sec)
ERROR: 
No query specified

在192.168.175.211上登入數據庫,執行操做

mysql> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin-2.00001   # 記住這個值,後面有用
        Position: 154                 # 記住這個值,後面有用
    Binlog_Do_DB: test
Binlog_Ignore_DB:mysql,information_schema,performance_schema,sys
Executed_Gtid_Set: 
1 row in set (0.00 sec)
ERROR: 
No query specified

在192.168.175.210上登入數據庫,執行操做

mysql>unlock tables;  # 必須執行,不然就會報錯
Query OK, 0 rows affected (0.09 sec)
mysql>stop slave; # 中止slave服務線程
mysql>change master to
mysql>master_host='192.168.175.211', # 備用ip
mysql>master_user='replicate', # 前面建立的user
mysql>master_password='qwe123', # 密碼
mysql>master_log_file='mysql-bin-2.000001', # show master 上得出
mysql>master_log_pos=154;
mysql>start slave;    # 重啓線程

在192.168.175.211上登入數據庫,執行操做

mysql>unlock tables;  # 必須執行,不然就會報錯
Query OK, 0 rows affected (0.09 sec)
mysql>stop slave;     # 中止slave服務線程
mysql>change master to
mysql>master_host='192.168.175.210',  # 備用ip
mysql>master_user='replicate',                # 前面建立的user
mysql>master_password='qwe123',        # 密碼
mysql>master_log_file='mysql-bin-1.000001', # show master 上得出
mysql>master_log_pos=154;   
mysql>start slave;    # 重啓線程

第七步:show slave status\G查看狀態

兩臺機器上都執行:

show slave status\G;

若以下都爲兩個yes則標識熱備成功,有時可能出現一個是connecting狀態,能夠稍等片刻。如長時間不爲yes,則檢查防火牆,主要問題可能就是數據庫鏈接問題。若有其它狀況能夠查看日誌進行解決。

4、keepalived原理及安裝

  keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。

虛擬路由冗餘協議,能夠認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其餘機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就須要根據VRRP的優先級來選舉一個backup當master。這樣的話就能夠保證路由器的高可用了。

  keepalived主要有三個模塊,分別是core、check和vrrp。core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各類檢查方式。vrrp模塊是來實現VRRP協議的。

  這裏僅僅是對keepalived進行了一個簡單的介紹,方便你們理解,若須要深刻了解,能夠參考官方文檔。

5、keepalived的安裝和配置

第一步:依賴安裝

yum install -y openssl-devel
yum install -y libnfnetlink-devel
yum install -y libnl libnl-devel
yum install -y ipvsadm

第二步:keepalived安裝

cd /usr/local/src/
wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
tar -zvxf keepalived-1.3.5.tar.gz
cd keepalived-1.3.5
./configure --prefix=/usr/local/keepalived
make && make install
cp /usr/local/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
echo "/etc/init.d/keepalived start" >> /etc/rc.local

複製配置文件:

[root@master1 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@master1 ~]# vim /etc/keepalived/keepalived.conf 

keepalived兩臺機器都得安裝:

第三步:修改配置文件

在192.168.175.210上編輯

! Configuration: command not found
global_defs {  # 全局配置,關於郵箱的問題
notification_email {
wallace.wang@tbs.cn
}

notification_email_from wallace.wang@tbs.cn
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MASTER-HA
}
vrrp_instance HA_2 {
    state MASTER     # 設置主節點的標識
    interface em1    # 設置實例綁定的網卡
    virtual_router_id 51   # 惟一標識id主從必須一致
    priority 101     # 優先級 這個和下面的權重結合使用
    advert_int 1
    nopreempt        # 非搶佔式,在主節點上不須要設置
    authentication { # 主從必須一致
        auth_type PASS    # 認證方式
        auth_pass 1111      # 認證密碼
    }
    virtual_ipaddress {
    192.168.175.11     # 虛擬的ip
    }
}

virtual_server 192.168.175.11 3306 {
     delay_loop 2
     lb_algo wrr   # lvs調度算法 有rr|wrr|lc|wlc|lblc|sh|dh等
     lb_kind DR    # 負載均衡轉發規則NAT|DR|RUN
     persistence_timeout 60  # 重新鏈接的時間
     protocol TCP              # 協議名稱
     real_server 192.168.175.210 3306 { # 真實的ip地址
         weight 3   # 權重
         notify_down /opt/script/chk_mysql.sh  # 檢測腳本
         TCP_CHECK {
             connect_timeout 10   # 鏈接時長
             nb_get_retry 3       # 重複次數
             delay_before_retry 3 # 
             connect_port 3306

在192.168.175.211上編輯

! Configuration: command not found
global_defs {  # 全局配置,關於郵箱的問題
notification_email {
wallace.wang@tbs.cn
}

notification_email_from wallace.wang@tbs.cn
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MASTER-HA
}
vrrp_instance HA_2 {
    state BACKUP    # 設置從節點的標識
    interface em1    # 設置實例綁定的網卡
    virtual_router_id 51   # 惟一標識id主從必須一致
    priority 101     # 優先級 這個和下面的權重結合使用
    advert_int 1
    nopreempt        # 非搶佔式,在主節點上不須要設置
    authentication { # 主從必須一致
        auth_type PASS    # 認證方式
        auth_pass 1111      # 認證密碼
    }
    virtual_ipaddress {
    192.168.175.11     # 虛擬的ip
    }
}

virtual_server 192.168.175.11 3306 {
     delay_loop 2
     #lb_algo wrr   # 這裏在從節點上不須要設置不然會出現從節點沒法鏈接上vip的狀況
     #lb_kind DR    # 這裏也無需設置
     persistence_timeout 60  # 重新鏈接的時間
     protocol TCP              # 協議名稱
     real_server 192.168.175.211 3306 { # 真實的ip地址
         weight 3   # 權重
         notify_down /opt/script/chk_mysql.sh  # 檢測腳本
         TCP_CHECK {
             connect_timeout 10   # 鏈接時長
             nb_get_retry 3       # 重複次數
             delay_before_retry 3 # 
             connect_port 3306

第四步:編寫chk_mysql.sh腳本

vim /opt/script/chk_mysql.sh
#!/bin/bash
killall keepalived

第五步:啓動keepalived

兩臺機器經過ip addr的形式查看一下:個人主節點在210上,因此這裏會多一個虛擬ip 

 

到這裏爲止全部的配置就已經完成,老鐵們能夠進行測試了。在測試以前先建立一個帳號,這個帳號對外有權限:

分別在兩個數據庫上進行建立:

grant all on *.* to test@'%' identified by "qwe123";
flush privileges;

而後經過這個進行測試:

mysql -h 192.168.175.11 -utest -pqwe123

注意在高可用這一點上,若經過虛擬IP 進行鏈接時,主節點宕機,在鏈接從節點時可能會須要幾秒鐘的時間,能夠設置鏈接次數解決。其實keepalived和mysql熱備無關,因此不用擔憂數據缺失的問題。

關於priority 和weight的權重選擇問題能夠看一下下面的鏈接文章。

https://blog.csdn.net/hzsunshine/article/details/62041036

 

最後但願你們幫忙點個贊和添加關注,小編會繼續寫一下通俗易懂的文章來和你們一塊兒分享,最後送你們一句話:當你的能力撐不起你的野心時,就安靜下來學習吧!!!!!!!!!!

相關文章
相關標籤/搜索