mysql主主keepalived_MySQL主主+Keepalived实现高可用
在企業中,數據庫高可用一直是企業的重中之重,中小企業很多都是使用mysql主主方案,一主多從,讀寫分離等,但是單主存在單點故障,從庫切換成主庫需要作改動。因此,如果是雙主或者多主,就會增加mysql入口,增加高可用。不過多主需要考慮自增長ID問題,這個需要特別設置配置文件,比如雙主,可以使用奇偶,總之,主之間設置自增長ID相互不沖突就能完美解決自增長ID沖突問題
主主方案實現思路
1、?兩臺mysql都可讀寫,互為主備。默認只使用一臺masterA負責數據的寫入,另一臺masterB備用處于備用狀態;
2、?masterA是masterB的主庫,masterB又是masterA的主庫,它們互為主從;
3、?兩臺主庫之間做高可用,可以采用keepalived等方案,使用VIP對外提供服務;
4、所有提供服務的從服務器與masterB進行主從同步(雙主多從);
5、建議采用高可用策略的時候,masterA或masterB均不因宕機恢復后而搶占VIP(非搶占模式);
這樣做可以在一定程度上保證主庫的高可用,在一臺主庫down掉之后,可以在極短的時間內切換到另一臺主庫上,盡可能減少主庫宕機對業務造成的影響,減少了主從同步給生產主庫帶來的壓力;
實驗步驟:
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
interfaceeno16777728#本機網卡名
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實現高可用
總結
以上是生活随笔為你收集整理的mysql主主keepalived_MySQL主主+Keepalived实现高可用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lampp mysql 等待响应时间很长
- 下一篇: 不需要征信的贷款