Master1 192.168.20.145
Master2 192.168.20.146
安装mysql
mysql安装脚本:
#!/bin/bash
yum -y install cmake
tar zxvf mysql-5.5.34.tar.gz
cd mysql-5.5.34
cmake -DCMAKE_INSTALL_PREFIX=/work/mysql5.5 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/data/mysql/3306/data/ -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306
make && make install && echo "install MYSQL ok"
chmod +w /work/mysql5.5/
chown -R mysql:mysql /work/mysql5.5/
mkdir -p /data/mysql/3306/data
chown -R mysql:mysql /data/mysql/
/work/mysql5.5/scripts/mysql_install_db --basedir=/work/mysql5.5/ --datadir=/data/mysql/3306/data/ --user=mysql
cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
sed -i '37a\basedir = /work/mysql5.5' /etc/my.cnf
sed -i '38a\datadir = /data/mysql/3306/data' /etc/my.cnf
sed -i '39a\log-error = /data/mysql/3306/mysql_error.log' /etc/my.cnf
sed -i '40a\pid-file = /data/mysql/3306/mysql.pid' /etc/my.cnf
chkconfig --add mysql
chkconfig mysql on
service mysql start
锁库进行数据同步,配置主主复制
Master 2
server-id = 1
log-bin=mysql-bin
log-slave-updates
Master 2
log-bin=mysql-bin
binlog_format=mixed
server-id = 2
relay-log=relay-bin
relay-log-index=relay-bin.index
log-slave-updates
首先配置主从同步,
主:show master status\G;
从:change master to master_host='192.168.20.146',master_user='slave001',master_password='tl@123 ',master_log_file='mysql-bin.000002',master_log_pos=107,MASTER_CONNECT_RETRY=10;
start slave
show slave status\G;
两台主机互相为主
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64
make && make install
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
chkconfig keepalived on
mkdir /etc/keepalived
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
#当主、备份设备发生改变时,通过邮件通知
notification_email_from [email protected]
smtp_server stmp.163.com
smtp_connect_timeout 30
router_id MySQL-ha
}
vrrp_instance VI_1{
# 在初始化状态下定义为主设备
state BACKUP
# 注意网卡接口
interface eth0
virtual_router_id 51
# 优先级,另一台改为90
priority 100
advert_int 1
# 不主动抢占资源
nopreempt
authentication {
# 认证方式,可以是PASS或AH两种认证方式
auth_type PASS
# 认证密码
auth_pass 1111
}
virtual_ipaddress {
# 虚拟IP地址,随着state的变化而增加删除
192.168.20.111
}
}
virtual_server 192.168.20.111 3306 {
# 每个2秒检查一次real_server状态
delay_loop 2
# LVS算法
lb_algo wrr
# LVS模式
lb_kind DR
# 会话保持时间
persistence_timeout 60
protocol TCP
real_server 192.168.20.146 3306 {
# 权重
weight 3
# 检测到服务down后执行的脚本
notify_down /etc/rc.d/keepalived.sh
TCP_CHECK {
# 连接超时时间
connect_timeout 10
# 重连次数
nb_get_retry 3
# 重连间隔时间
delay_before_retry 3
# 健康检查端口
connect_port 3306
}
}
}
另外一台主机参考此配置
在主的master1上编写检测服务down后所要执行的脚本
vim /etc/rc.d/keepalived.sh
#!/bin/bash
#环境变量
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/work/mysql5.5/bin/; export PATH
sleep 5
#mysql_id(存活=1 死掉=0)
mysql_id=ps -C mysqld --noheader | wc -l
#判断mysql_id如果死掉,则重启mysql一次,若仍然无法启动mysql,则杀掉keepalived进程实现VIP切换
if [ $mysql_id -eq 0 ]
then
service mysql restart
sleep 5
if [ $mysql_id -eq 0 ]
then
/etc/init.d/keepalived stop
fi
fi
Master 2 上的脚本:
vim /etc/rc.d/keepalived.sh
#!/bin/bash
/etc/init.d/keepalived stop
分别在两台机器上启动keepalived 和 此脚本,那台mysql首先开启,那台就是当做master来使用
可以看到虚拟ip已经绑定到优先级高的主机上了
进行连接测试是没有问题,
尝试修改mysql的配置,然后观察结束掉mysql进程,虚拟ip会直通切换到另外一台主机去