Keepalived(雙機熱備)
------------------------------------------------------keepalived配置--------------------------------------------------
1.準備工作
vip : 192.168.0.1
master1: 192.168.0.2
master2: 192.168.0.3
2.安裝lnmp:https://lnmp.org/install.html
3. 要給你的機器設置一個虛擬ip
# ifconfig eth0:0 192.168.0.1 netmask 255.255.255.248 up
4.安裝keepalived
# cd /usr/local/src
# wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
# tar zxvf keepalived-1.2.2.tar.gz
# cd keepalived-1.2.2
# ./configure --prefix=/usr/local/keepalived
# make && make install
5.修改keepalived.conf配置文件(192.168.0.2機器上的keepalived.conf)
# vim /etc/keepalived/keepalived.conf
#ConfigurationFile for keepalived
global_defs {
notification_email {
[email protected] ######定義接受郵件的郵箱
}
notification_email_from [email protected] ######定義發送郵件的郵箱
smtp_server [email protected]
smtp_connect_timeout 10
}
######定義vrrptest實例
vrrp_instance VI_1 {
state BACKUP ######服務器狀態
interface eth0 ######使用的接口
virtual_router_id 51 ######虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換
priority 150 ######服務啓動優先級,值越大,優先級越高,BACKUP 不能大於MASTER
advert_int 1 ######服務器之間的存活檢查時間
authentication {
auth_type PASS ######認證類型
auth_pass 111111 ######認證密碼,一組lvs 服務器的認證密碼必須一致
}
virtual_ipaddress {
192.168.0.1/24 ######虛擬IP地址
}
}
6.修改keepalived.conf配置文件(192.168.0.3機器上的keepalived.conf)
# vim /etc/keepalived/keepalived.conf
#ConfigurationFile for keepalived
global_defs {
notification_email {
[email protected] ######定義接受郵件的郵箱
}
notification_email_from [email protected] ######定義發送郵件的郵箱
smtp_server [email protected]
smtp_connect_timeout 10
}
######定義vrrptest實例
vrrp_instance VI_1 {
state BACKUP ######服務器狀態
interface eth0 ######使用的接口
virtual_router_id 51 ######虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換
priority 100 ######服務啓動優先級,值越大,優先級越高,BACKUP 不能大於MASTER
advert_int 1 ######服務器之間的存活檢查時間
authentication {
auth_type PASS ######認證類型
auth_pass 111111 ######認證密碼,一組lvs 服務器的認證密碼必須一致
}
virtual_ipaddress {
192.168.0.1/24 ######虛擬IP地址
}
}
7.配置防火牆
# vim /eth/sysconfig/iptables
添加:
-A INPUT -d 192.168.0.1/32 -j ACCEPT #放出自己的vip
-A INPUT -d 224.0.0.18 -j ACCEPT #添加VRRP通訊支持
重啓防火牆
# service iptables restart
8.啓動keepalived(master1和master2)服務:
# service keepalived start 或者 /etc/init.d/keepalived start
分別執行 ip addr 可以看到master1裏多出一句 inet 192.168.0.2/32 scope global eth0
如果關閉master1的keep服務,則master2中也會出現上面那一句話
9.找一臺同網段的機器上訪問(比如192.168.0.1)
>> mysql -u root -p123456 -h 192.168.0.1 -port 3306
>> use test
>> select * from member;
10.在兩臺機器上分別裝有一個腳本
checksql.sh
export LD_LIBRARY_PATH=/usr/local/mysql
while true; do
#啓動一個循環,定時檢查進程是否存在
server=`ps aux | grep mysql | grep -v grep`
if [ ! "$server" ]; then
#如果不存在就重新啓動
/etc/init.d/keepalived stop && /etc/init.d/mysql start && /etc/init.d/keepalived start
#啓動後沉睡10s
sleep 10
fi
#每次循環沉睡10s
sleep 5
done
chmod 755 checksql.sh
- nohup checksql.sh &
--------------------------------------------熱備----------------------------------------------
-- mysql 雙機熱備實現方案(A,B) --
A: ip 192.198.0.30
B: ip 192.198.20.30
A->B的過程:
1.創建一個用於備份的用戶B:
>> grant replication slave on *.* to 'usera'@'192.168.0.3' identified by 'usera';
- vim /etc/my.cnf (這個是lnmp一鍵安裝下mysql的配置文件)
在mysqld 模塊下 有
log-bin=mysql-bin
binlog_format=mixed
server-id=1
read-only=0
#binlog-do-db=test #只關注這個一個庫的記錄到binlog日誌裏
#binlog-ignore-db = mysql #忽略這個數據庫,不記錄到binlog中
auto-increment-increment=10 #
auto-increment-offset=1
3.獲取服務器狀態和同步數據(1,2,4如果有歷史數據,則需要導出表保存,如果是新表,則忽略)
1)鎖定表
>> FLUSH TABLES WITH READ LOCK;
2)導出數據庫
>> mysqldump -uroot -p -d dbname > db.sql
3)查看A的binlog日誌
>> show master status\G
記錄file名稱以及position位置
File:mysql-bin.00004
Position:1700
4)解除表
>> UNLOCK TABLES;
5)重啓服務器
service mysql restart
4.設置B服務器
1)打開B的數據庫配置文件
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format=mixed
server-id = 2 #保證每臺mysql服務器的id不同
#replication-do-db = test #需要關注的數據庫並記錄到binlog中
repliation-ignore-db = mysql #不需要關注也不記錄到binlog中
relay-log=mysqld-relay-bin # 中繼日誌的名字
log-slave-updates = ON # 雙主熱備打開,要是主從的話則需要關閉
2)進入B的mysql命令行
>> CHANGE MASTER TO MASTER_HOST='192.168.0.3',MASTER_USER='usera',MASTER_PASSWORD='usera',MASTER_LOG_FILE='mysql-bin.000033',MASTER_LOG_POS=107;
如果拋出異常ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
>> stop slave;
>> reset slave;
>>
- 查看slave線程
>> show slave status\G
關注
Slave_IO_Running:YES
Slave_SQL_Running:YES
說明開啓成功
如果其中有出現NO,則說明開啓失敗
進入/usr/local/mysql/var/
刪除 機器名-relay-bin.0000001 機器名-relay-bin.index 和 relay-log.info 或者 預設的名稱-relay-bin.00001,預設的名稱-relay-bin.index 和 relay-log.info 並且重啓MYSQL服務;
命令:
rm -rf 機器名-relay-bin.* relay-log.info
或者
rm -rf 預設的名稱-relay-bin.* relay-log.info
B->A的過程
1.創建一個用於備份的用戶A:
>> grant replication slave on *.* to 'userb'@'192.168.0.1' identified by '123';
- B的mysql配置my.cnf
vim /etc/my.cnf
在mysqld 模塊下 有
log-bin=mysql-bin
binlog_format=mixed
server-id=2
read-only=0
#binlog-do-db=test #只關注這個一個庫的記錄到binlog日誌裏
#binlog-ignore-db = mysql #忽略這個數據庫,不記錄到binlog中
auto-increment-increment=10 #
auto-increment-offset=2
3.獲取服務器狀態和同步數據
1)查看B的binlog日誌
>> show master status\G
記錄file名稱以及position位置
File:mysql-bin.00004
Position:1700
4.設置A服務器
1)打開A的數據庫配置 開啓中繼服務
vim /etc/my.cnf
更改
server-id = 1 #保證每臺mysql服務器的id不同
#replication-do-db = test #需要關注的數據庫並記錄到binlog中
repliation-ignore-db = mysql #不需要關注也不記錄到binlog中
relay-log=mysqld-relay-bin # 中繼日誌的名字
log-slave-updates = ON
2)進入A的mysql命令行
>> CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='userb',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin.000014',MASTER_LOG_POS=7803;
如果拋出異常ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
>> stop slave;
>> reset slave;
>> CHANGE MASTER TO MASTER_HOST='A服務器ip',MASTER_USER='usera',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin.000033',MASTER_LOG_POS=107;
- 重啓mysql
service mysql restart
- 查看slave線程
>> show slave status\G
關注Slave_IO_Running:YES
Slave_SQL_Running:YES
說明開啓成功
如果其中有出現NO,則說明開啓失敗
進入/usr/local/mysql/var/
刪除 機器名-relay-bin.0000001 機器名-relay-bin.index 和 relay-log.info 並且重啓MYSQL服務;