在企業中,數據庫高可用一直是企業的重中之重,中小企業不少都是使用mysql主主方案,一主多從,讀寫分離等,可是單主存在單點故障,從庫切換成主庫須要做改動。所以,若是是雙主或者多主,就會增長mysql入口,增長高可用。不過多主須要考慮自增加ID問題,這個須要特別設置配置文件,好比雙主,可使用奇偶,總之,主之間設置自增加ID相互不衝突就能完美解決自增加ID衝突問題mysql
主主方案實現思路sql
一、 兩臺mysql均可讀寫,互爲主備。默認只使用一臺masterA負責數據的寫入,另外一臺masterB備用處於備用狀態;數據庫
二、 masterA是masterB的主庫,masterB又是masterA的主庫,它們互爲主從;vim
三、 兩臺主庫之間作高可用,能夠採用keepalived等方案,使用VIP對外提供服務;bash
4、全部提供服務的從服務器與masterB進行主從同步(雙主多從);服務器
5、建議採用高可用策略的時候,masterA或masterB均不因宕機恢復後而搶佔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實現高可用