MySQL主主+Keepalived實現高可用

 在企業中,數據庫高可用一直是企業的重中之重,中小企業不少都是使用mysql方案,一主多從,讀寫分離等,可是單主存在單點故障,從庫切換成主庫須要做改動。所以,若是是雙主或者多主,就會增長mysql入口,增長高可用。不過多主須要考慮自增加ID問題,這個須要特別設置配置文件,好比雙主,可使用奇偶總之,主之間設置自增加ID相互不衝突就能完美解決自增加ID衝突問題mysql

主主方案實現思路sql

 

一、 兩臺mysql均可讀寫,互爲主備默認只使用一臺masterA負責數據的寫入,另外一臺masterB備用處於備用狀態數據庫

 

二、 masterAmasterB的主庫,masterB又是masterA的主庫,它們互爲主從;vim

 

三、 兩臺主庫之間作高可用,能夠採用keepalived等方案使用VIP對外提供服務;bash

 

4全部提供服務的從服務器與masterB進行主從同步(雙主多從);服務器

 

5建議採用高可用策略的時候,masterAmasterB均不因宕機恢復後而搶佔VIP(非搶佔模式);ide

 

這樣作能夠在必定程度上保證主庫的高可用,在一臺主庫down掉以後,能夠在極短的時間內切換到另外一臺主庫上儘量減小主庫宕機對業務形成的影響,減小了主從同步給生產主庫帶來的壓力;測試

實驗步驟:spa

master:192.168.200.111線程

slave:192.168.200.112

配置master1服務器:

1.修改配置文件

 vim /etc/my.cnf

添加內容

[mysqld]

server-id=1

log-bin=mysql-binlog#打開二進制功能

log-slave-updates=true#將複製事件寫入binlog,一臺服務器既作主庫又作從庫此選項必需要開啓

max_binlog_size=1024M#binlog單文件最大值

auto_increment_offset = 1#自增加ID數

auto_increment_increment = 2#奇數ID

 

replicate-ignore-db = information_schema#忽略不一樣步主從的數據庫

replicate-ignore-db = performance_schema

replicate-ignore-db = test

replicate-ignore-db = mysql

 

max_connections = 3000

max_connect_errors = 30

 

skip-character-set-client-handshake#忽略應用程序想要設置的其餘字符集

init-connect='SET NAMES utf8'#鏈接時執行的SQL

character-set-server=utf8#服務端默認字符集

wait_timeout=1800#請求的最大鏈接時間

interactive_timeout=1800#和上一參數同時修改纔會生效

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES#sql模式

 

relay-log=relay-log-bin#開啓中繼日誌

relay-log-index=slave-relay-bin.index

 2.重啓數據庫

systemctl restart mariadb

3.登陸數據庫進行受權

mysql -uroot -p'密碼'

3.給master2受權

grant replication slave on *.* to 'repl'@'192.168.200.112' identified by '123456';

4.刷新受權表

 flush privileges;

5.查看信息表

show master status;

  相似上表

 

配置master2服務器:

1.修改配置文件

vim /etc/my.cnf

添加內容:

[mysqld]

server-id       = 2

log-bin=mysql-binlog

log-slave-updates=true

max_binlog_size=1024M

auto_increment_offset = 2

auto_increment_increment = 2#ID

 

replicate-ignore-db = information_schema

replicate-ignore-db = performance_schema

replicate-ignore-db = test

replicate-ignore-db = mysql

 

max_connections = 3000

max_connect_errors = 30

 

skip-character-set-client-handshake

init-connect='SET NAMES utf8'

character-set-server=utf8

wait_timeout=1800

interactive_timeout=1800

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

 

relay-log=relay-log-bin

relay-log-index=slave-relay-bin.index

2.重啓數據庫

systemctl restart mariadb

3.登陸數據庫進行受權

mysql -uroot -p'密碼'

4.給master1受權

 grant replication slave on *.* to 'repl'@'192.168.200.111' identified by '123123';

5.刷新受權表

 flush privileges;

6.查看信息表

show master status;

 

 相似上表

實現主主複製:

配置master1數據庫:

1.登陸到數據庫

mysql -uroot -p'密碼'

2.停掉從服務

stop slave;

3.指向master2

change master to master_host='192.168.200.112',master_port=3306,master_user='repl',master_password='123123',master_log_file='mysql-binlog.000001',master_log_pos=889;

#對應master2的IP地址、設置密碼、binlog進程數和position號

4.開啓從服務

start slave;

5.查看從服務信息

 show slave status\G

 

 

#確保兩個線程處於開啓狀態

 

master2數據庫與master1數據庫步驟相同

惟一不一樣的是指向命令

change master to master_host='192.168.200.111',master_port=3306,master_user='repl',master_password='123123',master_log_file='mysql-binlog.000004',master_log_pos=486;

 #對應master1的IP地址、設置密碼、進程數和position號

查看從服務信息

 

show slave status\G

 

 

 
#確保兩個線程處於開啓狀態

進行測試:
測試環境,能夠保證沒數據寫入。步驟是:先masterA鎖表-->masterA備份數據-->masterA解鎖表 -->masterB導入數據-->masterB設置主從-->查看主從

1.在master1數據庫中建立庫

create database hhh;

2.在master2中查看數據庫

show databases;

 

 

 3.在master2中建立庫jjj

create database jjj;

4.在master1中查看數據庫

show databases;

 

 

 實現主主複製

配置keepalived實現主主複製高可用

配置master1數據庫:

1.安裝keepalived軟件

yum -y install keepalived

2.修改keepalived配置文件

vim /etc/keepalived/keepalived.conf

修改內容:

! Configuration File for keepalived

 

global_defs {

   router_id LVS_MASTER-A#指定LVS負載標識

}

 

vrrp_script mysql {

    script "/opt/mysql.sh"#準備觸發腳本

    interval 2

    weight -5                 

    fall 2                 

    rise 1

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eno16777728#本機網卡名

    virtual_router_id 51

priority 100#優先級

nopreempt#採用不搶佔模式

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    track_script {

        mysql#指定要觸發的腳本

    }

    virtual_ipaddress {

        192.168.200.254#指定VIP地址

    }

}

3.編輯觸發腳本

vim /opt/mysql.sh

編輯內容:

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]; then

    systemctl stop keepalived

fi

4.給與腳本執行權限

chmod +x /opt/mysql.sh

5.重啓keepalived服務使其生效

systemctl start keepalived

6.查看IP信息

ip a

 

 

 #VIP地址爲254被篇master1所佔用

7.查看日誌信息

 tail -f /var/log/messages

 

 

 

master2數據庫操做與master1相同

惟一不一樣的地方是keepalived配置文件作調整

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

   router_id LVS_MASTER-B

}

 

vrrp_script mysql {

    script "/opt/mysql.sh"

    interval 2

    weight -5                 

    fall 2                 

    rise 1

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eno16777728

    virtual_router_id 51

    priority 99

    nopreempt

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    track_script {

        mysql

    }

    virtual_ipaddress {

        192.168.200.254

    }

}

實現雙主複製並給予keepalived實現高可用

相關文章
相關標籤/搜索