mysql 主从 keepalived_MySQL之双向主从加keepalived高可用
最近在做MySQL數(shù)據(jù)庫的雙向主從,了解到keepalived能夠自動(dòng)判斷并切換到可用數(shù)據(jù)庫,自己試了一下,整理出文檔來。
先聲明一下環(huán)境
iptables開啟3306端口或者關(guān)掉,關(guān)閉selinux
MySQL-01:192.168.204.138
MySQL-02:192.168.204.139
VIP:192.168.204.200?????????????#web服務(wù)器連接的ip,自己可以使用工具連接試一下。
MySQL的安裝過程就略過了,根據(jù)個(gè)人情況自己安裝即可。
1.修改數(shù)據(jù)庫的配置文件/etc/my.cnf:
1.1修改MySQL-01的數(shù)據(jù)庫文件,在[mysql]下添加如下內(nèi)容server_id?=?1
log_bin?=?mysql-bin
1.2修改MySQL-02的數(shù)據(jù)庫文件,在[mysql]下添加如下內(nèi)容server_id?=?2
log_bin?=?mysql-bin
2.搭建單向主從
2.1在MySQL-01上
2.1.1操作授權(quán)mysql?-u?root?-p????????????#輸入密碼
mysql>?grant?replication?slave?on?*.*?to?'slave'@'192.168.204.139'?identified?by?'123456';
mysql>?flush?privileges;
2.1.2數(shù)據(jù)傳遞給MySQL-02mysql?-u?root?-p????????????#輸入密碼
flush?tables?with?read?lock;????????#鎖表操作
mysql>?show?master?status;
+------------------+----------+--------------+------------------+-------------------+
|?File?????????????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|?Executed_Gtid_Set?|
+------------------+----------+--------------+------------------+-------------------+
|?mysql-bin.000012?|??????120?|??????????????|??????????????????|???????????????????|
+------------------+----------+--------------+------------------+-------------------+
1?row?in?set?(0.00?sec)
mysqldump?-u?root?-p?--all-databases?>?mysqldump.sql
mysql?-u?root?-p
mysql>?unlock?tables;
mysql>?quit
scp?myqsldump.sql?192.168.204.139:/root/
2.2在MySQL-02上操作
2.2.1恢復(fù)數(shù)據(jù)庫數(shù)據(jù)mysql?-u?root?-p?
2.2.2建立主從同步mysql?-u?root?-p
mysql>?change?master?to?master_host='192.168.204.138',master_user='slave',master_password='123456',master_log_file='mysql-bin.000012',master_log_pos=120,master_port=3306;
start?slave;
檢查是否成功show?slave?status\G;Slave_IO_Running:?Yes
Slave_SQL_Running:?Yes
都為Yes表示同步成功。
注:master_port=3306,默認(rèn)時(shí)不需要加,但是修改過端口的則需要該選項(xiàng)
3.搭建互為主從
3.1在MySQl-01上操作
3.1.1用戶授權(quán)mysql?-u?root?-p123456
mysql>?grant?replication?slave?on?*.*?to?'slave'@'192.168.204.138'?identified?by?'123456';?//建立權(quán)限
mysql>?flush?privileges;
注:因?yàn)樽龅氖撬袔斓闹鲝?#xff0c;所以在MySQL-01上的操作會(huì)同步到MySQL-02上
注2:假如你是線上環(huán)境,主庫在不斷的寫數(shù)據(jù),建議鎖一下表,最好找個(gè)夜深人靜的時(shí)候做吧
3.2在MySQL-02上的操作mysql?-u?root?-p
mysql>?show?master?status\G;
+------------------+----------+--------------+------------------+-------------------+
|?File?????????????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|?Executed_Gtid_Set?|
+------------------+----------+--------------+------------------+-------------------+
|?mysql-bin.000009?|??????120?|??????????????|??????????????????|???????????????????|
+------------------+----------+--------------+------------------+-------------------+
1?row?in?set?(0.00?sec)
3.1.2在MySQL-01上操作授權(quán)mysql>?change?master?to?master_host='192.168.204.138',master_user='slave',master_password='123456',master_log_file='mysql-bin.000009',master_log_pos=120;
mysql>?start?slave;
檢查是否成功show?slave?status\G;
Slave_IO_Running:?Yes
Slave_SQL_Running:?Yes
表示成功。
此,mysql的雙向主從同步已完成
4.keepalived的搭建
4.1在兩臺(tái)服務(wù)器依次做以下操作
a.安裝keepalivedwget?http://www.keepalived.org/software/keepalived-1.2.15.tar.gz
tar?zxvf?keepalived-1.2.15.tar.gz
cd?keepalived-1.2.15
./configure?--prefix=/usr/local/keepalived
make?&&?make?install
假如編譯過程出現(xiàn)錯(cuò)誤,請(qǐng)安裝 gcc,openssl,openssl-devel
b.復(fù)制相關(guān)文件cp?/usr/local/keepalived/etc/rc.d/init.d/keepalived??/etc/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/
4.2修改配置文件
請(qǐng)先將/etc/keepalived/keepalived.conf文件清空
4.2.1在MySQL-01上操作
將一下內(nèi)容復(fù)制進(jìn)去!?Configuration?File?for?keepalived
global_defs?{
notification_email?{
sunyuansheng7@gmail.com
}
notification_email_from?sunyuansheng7@gmail.com
smtp_server?127.0.0.1
smtp_connect_timeout?30
router_id?MySQL-ha
}
vrrp_instance?VI_1?{
state?master
interface?eth0
virtual_router_id?51
priority?100
advert_int?1
nopreempt
authentication?{
auth_type?PASS
auth_pass?1111
}
virtual_ipaddress?{
192.168.204.222
}
}
virtual_server?192.168.204.222?3306?{
delay_loop?6
lb_algo?wrr
lb_kind?DR
persistence_timeout?50
protocol?TCP
real_server?192.168.204.138?3306?{
weight?3
notify_down?/var/lib/mysql/killkeepalived.sh
TCP_CHECK?{
connect_timeout?10
nb_get_retry?3
delay_before_retry?3
connect_port?3306
}
}
}
4.2.2在MySQL-02上操作
vim /etc/keepalived/keepalived.conf!?Configuration?File?for?keepalived
global_defs?{
notification_email?{
sunyuansheng7@gmail.com
}
notification_email_from?sunyuansheng7@gmail.com
smtp_server?127.0.0.1
smtp_connect_timeout?30
router_id?MySQL-ha
}
vrrp_instance?VI_1?{
state?backup
interface?eth0
virtual_router_id?51
priority?100
advert_int?1
nopreempt
authentication?{
auth_type?PASS
auth_pass?1111
}
virtual_ipaddress?{
192.168.204.222
}
}
virtual_server?192.168.204.222?3306?{
delay_loop?6
lb_algo?wrr
lb_kind?DR
persistence_timeout?50
protocol?TCP
real_server?192.168.204.139?3306?{
weight?3
notify_down?/var/lib/mysql/killkeepalived.sh
TCP_CHECK?{
connect_timeout?10
nb_get_retry?3
delay_before_retry?3
connect_port?3306
}
}
}
4.3在兩臺(tái)服務(wù)器做以下操作vim?/var/lib/mysql/killkeepalived.sh
#!/bin/sh
pkill?keepalived
chmod?+x?/var/lib/mysql/killkeepalived.sh
4.4此時(shí)先不要啟動(dòng)keepalived,因?yàn)槲覀円^察日志
5.測(cè)試是否可用
創(chuàng)建一個(gè)新的用戶mysql>?grant?all?privileges?on?*.*?to?'test'@'%'?identified?by?'123456';
mysql>?flush?privileges;
5.1在MySQL-01上多開一個(gè)終端,tailf /var/log/messages,然后再另一個(gè)終端啟動(dòng)keepalived服務(wù)service keepalived start。日志信息如下
5.2在MySQL-02同樣打開一個(gè)新的終端查看日志信息,然后啟動(dòng)keepalived
5.3在MySQL-01上手動(dòng)停掉MySQL服務(wù)。同時(shí)得到日志信息
? ?連接3306端口失敗,準(zhǔn)備移除虛擬ip,然后停掉keepalived服務(wù)。最后虛擬ip地址移除。
MySQL-02日志信息沒啥變化!話說兩邊啟動(dòng)keepalived的日志信息差不多是一樣的。
此時(shí)可以使用連接MySQL的工具測(cè)試一下,虛擬ip地址還是可用的。
5.4假設(shè)MySQL-01恢復(fù)此時(shí)還應(yīng)該啟動(dòng)keepalived服務(wù)。
總結(jié)
以上是生活随笔為你收集整理的mysql 主从 keepalived_MySQL之双向主从加keepalived高可用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三年:微信、京东再续前缘
- 下一篇: centos web 访问mysql_C