1、環境準備
兩臺分別安裝mysql
yum -y install mysql mysql-server
兩臺分別關閉防火牆和selinux
iptables -F #關閉防火請
setenforce 0 #關閉selinux
兩臺分別修改主配置文件my.cnf
第一臺:
vim /etc/my.cnf
log-bin=mysql-bin
server-id=1
expire-logs-days=99
replicate-do-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
auto-increment-increment=2
auto-increment-offset=1
第二臺:
vim /etc/my.cnf
log-bin=mysql-bin
server-id=2
expire-logs-days=99
replicate-do-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
auto-increment-increment=2
auto-increment-offset=1
兩臺分別開啓mysql服務
service mysqld start
兩臺分別設置mysql密碼並登錄mysql
mysqladmin -u root password '123456'
mysql -u root -p
其中一臺備份test數據庫
其中一臺鎖定數據庫,使數據不再更新
flush tables with read lock;
然後備份test數據庫
mysqldump -uroot -p test > /tmp/test.sql
最後再解鎖數據庫
unlock tables;
傳遞sql文件到另一臺服務器
scp /tmp/test.sql [email protected]:/tmp
傳遞成功。
在兩臺服務器上分別授權一個用戶
grant replication slave on *.* to 'wmm'@'%' identified by '123456';
flush privileges;
兩臺服務器上分別查看當前使用的二進制文件
show master status;
當前使用的二進制文件名相同
兩臺服務器分別登錄並配置master.info文件
第一臺:
change master to master_host='192.168.201.140',master_user='wmm',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=475;
第二臺:
change master to master_host='192.168.201.137',master_user='wmm',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=475;
兩臺服務器都開啓同步功能並查看信息
start slave;
show slave status\G;
兩臺都是Slave_IO_Running: Yes和Slave_SQL_Running: Yes。表明兩臺服務器都顯示同步成功。
爲了確定是否真的同步成功,於是再測試一下:
第一臺同步到第二臺
#第二臺服務器
use test;
show tables;
#第一臺服務器
use test;
show tables;
create table aa (name char(40)); #創建個aa數據表
show tables;
#第二臺服務器
show tables;
經測試,發現第一臺服務器的aa數據表成功同步到第二臺服務器
第二臺同步到第一臺
#第二臺服務器
use test;
show tables;
create table bb (id int(10)); #創建個bb數據表
show tables;
#第一臺服務器
show tables;
經測試,發現第二臺服務器的bb數據表也能成功同步到第一臺服務器。
2、Keepalived搭建MySQL雙主模式的高可用集羣系統
1.兩臺服務器分別安裝gcc
yum -y install gcc*
2.兩臺服務器分別安裝依賴包
yum -y install openssl-devel popt-devel
3.兩臺服務器分別換光盤
eject彈出光盤,然後選擇下面這個鏡像連接
4.兩臺服務器分別安裝keepalived
兩臺服務器都做以下操作:
cd /media/20150611_063116/
tar -zxf keepalived-1.2.7.tar.gz -C /usr/src
cd /usr/src/keepalived-1.2.7/
./configure --prefix=/usr/local/keepalived
make && make install
5.兩臺服務器分別移動、查看和配置keepalived.conf配置文件
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cd /etc/keepalived/
chmod a+x keepalived.conf #加上可執行權限
vim keepalived.conf
keepalived用到虛擬路由冗餘協議vrrp
第一臺配置:
global_defs { #全局配置
router_id aa #配置路由器名稱
}
vrrp_instance VI_1 { #實例區域
state BACKUP #MASTER主設備、backup備用設備
interface eth0 #網卡名稱
virtual_router_id 66 #id號標識同屬一個組
priority 100 #優先級
advert_int 1 #心跳時間,每隔一秒發一次信號,做一次同步
nopreempt #設置優先級
authentication { #認證信息
auth_type PASS #PASS密碼認證
auth_pass 1111
}
virtual_ipaddress { #虛擬地址
192.168.201.200
}
}
virtual_server 192.168.201.200 3306 { #虛擬出來的集羣ip地址
delay_loop 2 #每隔多久檢查服務器狀態
lb_algo wrr
lb_kind DR #類型
persistence_timeout 50 #超時時間
protocol TCP
real_server 192.168.201.137 3306 { #真實ip地址
weight 3 #權重,哪一臺優先工作
notify_down /root/keepalived.sh #關閉服務的腳本
TCP_CHECK {
connect_timeout 5 #連接超時時間
nb_get_retry 3 #如果超時,重連多少次
delay_before_retry 3 #間隔3秒
connect_port 3306 #默認連接端口
}
}
}
第二臺配置:
global_defs { #全局配置
router_id bb #配置路由器名稱
}
vrrp_instance VI_1 { #實例區域
state BACKUP #MASTER主設備、backup備用設備
interface eth0 #網卡名稱
virtual_router_id 66 #id號標識同屬一個組
priority 80 #優先級
advert_int 1 #心跳時間,每隔一秒發一次信號,做一次同步
authentication { #認證信息
auth_type PASS #PASS密碼認證
auth_pass 1111
}
virtual_ipaddress { #虛擬地址
192.168.201.200
}
}
virtual_server 192.168.201.200 3306 { #虛擬出來的集羣ip地址
delay_loop 2 #每隔多久檢查服務器狀態
lb_algo wrr #帶權重的輪詢
lb_kind DR #類型
persistence_timeout 50 #超時時間
protocol TCP
real_server 192.168.201.140 3306 { #真實ip地址
weight 3 #權重,哪一臺優先工作
notify_down /root/keepalived.sh #關閉服務的腳本
TCP_CHECK {
connect_timeout 5 #連接超時時間
nb_get_retry 3 #如果超時,重連多少次
delay_before_retry 3 #間隔3秒
connect_port 3306 #默認連接端口
}
}
}
6.兩臺服務器分別寫關閉keepalived服務的腳本keepalived.sh
cd /root/
vim keepalived.sh
keepalived.sh內容爲:
#!/bin/bash
pkill keepalived
授予keepalived.sh執行權限
chmod a+x keepalived.sh
7.兩臺服務器分別開啓keepalived服務並查看進程
/usr/local/keepalived/sbin/keepalived -D
ps -elf | grep keepalived
服務已經開啓成功
8.兩臺服務器分別ping一下虛擬集羣ip進行測試
ping 192.168.201.200
發現兩臺服務器都可以ping通虛擬集羣ip。
在客戶端進行測試
客戶端ping一下虛擬集羣ip進行測試
ping 192.168.201.200
客戶端安裝mysql並登錄一下虛擬集羣的mysql進行測試
yum -y install mysql
mysql -h 192.168.201.200 -u wmm -p
登錄成功。
在客戶端分別執行以下命令進行查看當前所用的是哪一臺mysql服務器:
mysql>show variables like 'server_id'; #使用server_id查看
tcpdump vrrp #抓包查看
兩臺服務器不同時的執行以下命令,以實現一臺服務器mysql故障,從而切換到另一臺
killall keepalived