1. 程式人生 > >MySQL高可用,MySQL互為主從+keepalived。

MySQL高可用,MySQL互為主從+keepalived。

一:環境:centos7.5 MySQL5.7
192.168.3.222 master
192.168.3.158 slave
192.168.3.223 VIP

二:首先做出雙主來
以下操作兩臺機器都要做
2.1:首先域名解析:

###vim /etc/hosts (兩臺都做)
192.168.3.222 master
192.168.3.158 slave

2.2:下載MySQL5.7

### wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
### rpm -ivh mysql57-community-release-el7-8.noarch.rpm
### yum install mysql-server

2.3:啟動並修改密碼

### systemctl start mysqld
### grep pass /var/log/mysqld.log
### mysqladmin -u root -p'bJZY,Z0kMdcQ' password 'Cherry`123'     //修改密碼

2.4:修改兩臺機器的配置

修改master上的配置
### vim /etc/my.cnf
    [mysqld]
    log-bin
    server-id=1
    gtid_mode=ON
    enforce_gtid_consistency=1
修改slave上的配置
### vim /etc/my.cnf
    [mysqld]
    log-bin
    server-id=2
    gtid_mode=ON
    enforce_gtid_consistency=1

2.5:重啟兩臺機器並進行授權
重啟兩臺機器
### systemctl restart mysqld
進入主資料庫得到binlog日誌檔名和偏移量

   mysql> show master status;

在master建立使用者

   mysql> grant replication slave on *.* to 'iii'@'192.168.3.158' identified by  'Cherry321`';

去slave上執行

   change master to master_host='192.168.3.158',master_user='iii',master_password='Tiger321`',master_port=3306,master_log_file='master-bin.000003',master_log_pos=194;                  //master-bin.000003',master_log_pos=194為檔名和偏移量 

啟動slave

   mysql> start slave;

在從庫檢視

   mysql>show slave status\G;              //Slave_IO_Running:YES    Slave_SQL_Running:YES為成功

三:雙主搭建完成,然後在master上做一下虛擬IP,繫結網絡卡
3.1:在master上copy一份網絡卡檔案


cp /etc/sysconfig/network-scripts/ifcfg-ens33  /etc/sysconfig/network-scripts/ifcfg-ens37
配置檔案如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
UUID=9f0c5e90-b5e5-44f4-95ce-9f97d19bf880
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.3.223
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=8.8.8.8
DNS2=114.114.114.114

3.2重啟網絡卡

###systemctl restart network

四:下載keepalived,修改其配置檔案

4.1:兩臺機器都下載keepalived
yum -y install keepalived

4.2:修改配置檔案,修改之前最好先備份一下。。。
[[email protected] keepalived]# vim keepalived.conf
! Configuration File for keepalived      //表示註釋

global_defs {

  router_id mysql-1         //表示執行keepalived伺服器的標識 

}

vrrp_instance VI_1 {
   state BACKUP                     //指定keepalived的角色,兩臺配置此處均是backup,這為backup將根據優先順序決定主或從
   interface ens33    //指定HA檢測網路的介面
   virtual_router_id 51  //虛擬路由標識,這個標識是一個數字(取值在0~255之間,用來區分多個instance的VRRP組播),同一個vrrp例項使用唯一的標識
                                  確保和slave相同,同網內不同叢集此項不同,否則發生衝突
   priority 100         //用來選舉master的,要成為master,該項取值範圍是1-255,預設為100,slave設為50
   advert_int 1       //傳送vrrp包的間隔時間
   nopreempt          //不搶佔
   authentication {
       auth_type PASS
       auth_pass 1111
   }

   virtual_ipaddress {               //VIP地址

       192.168.3.223

   }

}

virtual_server 192.168.3.223 3306 {      //設定虛擬伺服器,需要指定虛擬IP地址和服務埠。
   delay_loop 2             //執行情況檢查時間,單位為秒
   lb_algo rr    //設定後端排程演算法
   lb_kind DR        
   persistence_timeout 60
   protocol TCP

   real_server 192.168.3.222 3306 {    //配置服務節點,需要指定real server的真實IP地址和埠。
       weight 3             //配置服務節點的權值,權值大小用數字標識,數字越大,權值越高,設定權值大小為了區分不用效能的伺服器
       notify_down   /root/keepalived_check_mysql.sh                //檢測到realserver的MySQL服務down後執行的指令碼位置
       TCP_CHECK {
            connect_timeout 3                   //連線超時時間
            nb_get_retry 3                         //重連次數
            delay_before_retry 3                //重連間隔時間
            connect_port 3306                 //健康檢查埠
       }
   }
}

下面為slave的配置

4.3:slave也修改keepalived的配置
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {

  router_id mysql-2

}

vrrp_instance VI_1 {
   state BACKUP
   interface ens33
   virtual_router_id 51
   priority 50
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
   }

   virtual_ipaddress {

       192.168.3.223

   }

}

virtual_server 192.168.3.223 3306 {
   delay_loop 2
   lb_algo rr
   lb_kind DR
   persistence_timeout 60
   protocol TCP

   real_server 192.168.3.158 3306 {
       weight 3
       notify_down   /root/keepalived_check_mysql.sh
       TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
       }
   }
}

五:兩臺機器修改之後新增mysql簡易的狀態檢測指令碼

### vim /root/keepalived_check_mysql.sh
#!/bin/bash
/usr/bin/mysql -h 192.168.3.222 -uroot -p'Tiger`123' -e "show status;" &>/dev/null
if [ $? -ne 0 ] ;then
        systemctl stop keepalived
fi

加上可執行許可權

### chmod 755 /root/keepalived_check_mysql.sh

啟動keepalived,關閉master 檢視IP跳動