keepalived + Mysql(主主)实现高可用集群

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
vi/etc/keepalived/keepalived.conf
global_defs {

notification_email {

[email protected]

}

#当主、备份设备发生改变时,通过邮件通知

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 {

认证方式,可以是PASSAH两种认证方式

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会直通切换到另外一台主机去

你可能感兴趣的:(keepalived + Mysql(主主)实现高可用集群)