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 root@192.168.201.140:/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