码迷,mamicode.com
首页 > 其他好文 > 详细

Keepalived+Master-Master-Slave组合

时间:2016-07-11 19:23:25      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:mha keepalived 双主 主从

参考文章:http://blog.csdn.net/catoop/article/details/41285001


master1master2公用一个VIP。当某个master宕机后,keepalived能自动将VIP漂移到另一个master上。只需要1~3秒即可切换完成,基本能保证服务不中断。

 

实验环境:

    CentOS6.7X86_64

    MariaDB10.0.17

    Keepalived1.2.21

 

各节点配置:

    Master1192.168.2.13

    Master2192.168.2.14

    VIP192.168.2.100

    Slave192.168.2.11

    Web服务器:192.168.2.11


主要步骤如下:

构建MySQL双主---> 配置Keepalived ---> 模拟节点故障 ---> MHA基础上构建web站点 ---> MHA基础上添加Slave



一、构建双主MySQL

安装MariaDB过程略过,可以直接使用通用二进制包进行安装。

首先确保2Master是新安装的(不是新安装的话,执行mysql_install_db重新初始化即可),配置起来更方便些。

 

配置Master1,修改my.cnf,如下:

[mysqld]

....主要修改如下:....

innodb_file_per_table =ON

skip_name_resolve = ON

 

log-bin=mysql-bin

binlog_format=mixed

server-id=1

 

auto-increment-offset = 1

auto-increment-increment = 2

replicate-ignore-db = test

replicate-ignore-db = mysql

 

配置Master2,修改my.cnf,如下:

[mysqld]

....主要修改如下:....

innodb_file_per_table =ON

skip_name_resolve = ON

 

log-bin=mysql-bin

binlog_format=mixed

server-id=2

 

auto-increment-offset = 2

auto-increment-increment = 2

replicate-ignore-db = test

replicate-ignore-db = mysql

 

Master1上建立授权用户

> grant replication slave on*.* to ‘repluser‘@‘192.168.2.%‘ identified by ‘123456‘;

> flush privileges;

> show master status;

技术分享


Master2上连接到Master1作为自己的主服务器

> change master tomaster_host=‘192.168.2.13‘,

master_user=‘repluser‘,

master_password=‘123456‘,

master_log_file=‘mysql-bin.000003‘,

master_log_pos=22519;

 

> start slave;

> show slave status\G

技术分享


Master2上建立授权用户

> grant replication slave on*.* to ‘repluser‘@‘192.168.2.%‘ identified by ‘123456‘;

> flush privileges;

> show master status;

技术分享


Master1上连接到Master2作为自己的主服务器

> change master to master_host=‘192.168.2.14‘,

master_user=‘repluser‘,

master_password=‘123456‘,

master_log_file=‘mysql-bin.000003‘,

master_log_pos=643;

 

> start slave;

> show slave status\G

技术分享


我们可以随意在master1master2建立测试数据库,插入数据,可以发现在任意节点插入都能自动同步到另一台上面。



二、安装配置keepalived

编译安装keepalived

2个节点都如下操作:

tar xf keepalived-1.2.21.tar.gz

cd keepalived-1.2.21

./configure

make && make install

cp/usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d

cp/usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf/etc/keepalived

cp /usr/local/sbin/keepalived/usr/sbin/

chkconfig --add keepalived

chkconfig keepalived on

 

master1(192.168.2.13)上,修改keepalived的配置文件,如下:

! Configuration File forkeepalived

 

global_defs {

  notification_email {

       receiver@126.com

  }

  notification_email_from localhost

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id MySQL_HA

}

 

vrrp_instance VI_1 {

   state BACKUP      # 两台配置此处均是BACKUP 

   interface eth0    # 网卡,可使用ifconfig查看

   virtual_router_id 51

   priority 90       # 优先级,另一台改为90,默认VIP飘在在这个节点上

   advert_int 1

    nopreempt         # 不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置

   authentication {

        auth_type PASS

        auth_pass 1111

   }

   virtual_ipaddress {

        192.168.2.100 dev eth0 label eth0:1

   }

}

 

virtual_server 192.168.2.100 3306{

   delay_loop 2      # 每个2秒检查一次real_server状态 

   lb_algo rr    # 轮询算法

   lb_kind DR    # LVS算法,直接转发

   persistence_timeout 50   # 会话保持时间

   protocol TCP

 

   real_server 192.168.2.13 3306 {     # 只配置一个real_server,且为本机地址

        weight 3

       notify_down/home/scripts/MySQL.sh # 检测到服务down后执行的脚本 

       TCP_CHECK{

           connect_timeout10       # 连接超时时间

           nb_get_retry 3           # 重连次数

           delay_before_retry 3 # 重连间隔时间

           connect_port 3306    # 健康检查端口

        }

   }

}

 

master2(192.168.2.14)上,修改keepalived的配置文件,如下:

! Configuration File forkeepalived

 

global_defs {

  notification_email {

       receiver@126.com

  }

  notification_email_from localhost

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id MySQL_HA

}

 

vrrp_instance VI_1 {

   state BACKUP      # 两台配置此处均是BACKUP 

   interface eth0    # 网卡,可使用ifconfig查看

   virtual_router_id 51

   priority 90       # 优先级,master2这台改为90,当master1无响应,则VIP会飘到这个节点上

   advert_int 1

    #nopreempt          # 不抢占,只在优先级高的机器上设置即可,优先级低的机器设不设置都无所谓

   authentication {

       auth_type PASS

        auth_pass 1111

   }

   virtual_ipaddress {

        192.168.2.100 dev eth0 label eth0:1

   }

}

 

virtual_server 192.168.2.100 3306{

   delay_loop 2      # 每个2秒检查一次real_server状态 

   lb_algo rr    # 轮询算法

   lb_kind DR    # LVS算法,直接转发

   persistence_timeout 50   # 会话保持时间

   protocol TCP

 

   real_server 192.168.2.14 3306 {     # 只配置一个real_server,且为本机地址

        weight 3

       notify_down/home/scripts/MySQL.sh # 检测到服务down后执行的脚本 

       TCP_CHECK{

           connect_timeout10       # 连接超时时间

           nb_get_retry 3           # 重连次数

           delay_before_retry 3 # 重连间隔时间

           connect_port 3306    # 健康检查端口

        }

   }

}

 

编写检测服务down后所要执行的脚本

master1master2都执行下面的操作:

 

mkdir /home/scripts/

vim /home/scripts/MySQL.sh 内容如下:

#!/bin/sh

pkill keepalived

注意:

此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server的服务状态,当发现real_server服务故障时,便触发此脚本;我们可以看到,脚本就一个命令,通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。

另外,我们不用担心两个MySQL会同时提供数据更新操作,因为每台MySQL上的keepalived的配置里面只有本机MySQLIP+VIP,而不是两台MySQLIP+VIP

 

master1master2上都启动keepalived

/etc/init.d/keepalived start

ps aux|grep keepalived

ifconfig -a

可以看到VIP默认是在master1上的(因为keepalived里配置master1的优先级为100master2的优先级为90)


 

三、模拟节点故障

模拟MySQLMaster的写节点故障

我们可以模拟下masterMySQL无法访问了,看看VIP会不会自动漂移。

先查看master1master2IP情况,如下图:

技术分享

技术分享

 

可以看到VIPmaster1节点上。我们在master1上执行/etc/init.d/mariadb stop 模拟master1MySQL进程挂掉的情况。

然后,在maste1master2上执行

ps aux|egrep "keepalived|mariadb"

ip a

可以看到VIP已经漂移到master2上了。此时,master1上的MariaDB进程挂掉后,keepalived进程也一并被kill了。

 

 

至此,实验初步算是完成了。但是这个方案的话,mysql一退出, keepalived也退出了,后面再次修复的话要手动启动keepalived进程,不然就达不到高可用的效果了。不过出于数据安全性、完整性考虑,MySQLkeepalived进程还是应该手动恢复的。

这个方案还有个不足,就是mysql端口和进程都在,但是复制线程却不是Yes状态了,这种只能靠zabbix或者其它监控工具来监控了。

 


四、在MHA的基础上构建个web站点

MySQL高可用实现后,不如继续深入下,再基于上面的环境构建个web站点吧,操作如下:

 

web节点参数:

IP192.168.2.11

运行有:Nginx+php-fpm

 

nginx虚拟主机配置如下:

server {

   listen  80;

   server_name  192.168.2.11;

 

   location / {

        root           /home/wwwroot/default;

        index index.php index.html index.htm;

   }

 

   location ~ \.php$ {

        root           /home/wwwroot/default;

       fastcgi_pass  unix:/tmp/php-cgi.sock;

       fastcgi_index  index.php;

       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

       include        fastcgi_params;

      

       access_log  /home/wwwlogs/access.log  main;

   }

}

 

/etc/init.d/nginx start     启动nginx服务

/etc/init.d/php-fpm start     启动php-fpm服务


 

 

master1或者master2上执行下面命令,创建个web网站所需的数据库:

> create database metinfo;

> grant all on metinfo.* to‘met‘@‘192.168.2.%‘ identified by ‘123456‘;

> flush privileges;

 

 

在浏览器访问http://192.168.2.11 如下图:

注意数据库主机地址要填:192.168.2.100

技术分享


安装完成后,如下图所示:

技术分享



五、在MHA的基础上添加一个Slave

生产环境中,光靠2Master是顶不住那么大压力的,因此还需要添加几个Slave节点(假设节点IP 192.168.2.11)。

 

修改Slavemy.cnf 如下

[mysqld]

....主要修改如下:....

innodb_file_per_table =ON

skip_name_resolve = ON

 

log-bin=mysql-bin

binlog_format=mixed

server-id   = 10

relay_log =mysql-relay.bin

log_slave_updates = 1

read_only = 1

replicate-ignore-db = test

replicate-ignore-db = mysql

 

在业务低谷时候,先将keepalived进程停掉,防止写入数据。

然后稍等片刻,等2master之间的数据同步后,在任意master上执行:

> flush tables with read lock;

# mysqldump -uroot -proot -A >all.sql

# scp all.sqlroot@192.168.2.11:/root/

 

在干净的slave上启动MariaDB,并导入all.sql

# mysql -uroot -proot -e ‘sourceall.sql;‘

 

导入后,在刚才锁表的master上解除锁

> unlock tables;

 

操作完成后,在master1master2上启动keepalived进程,让VIP再次出现。

 

VIP出现后,然后,在slave上执行:

> change master tomaster_host=‘192.168.2.100‘,

master_user=‘repluser‘,

master_password=‘123456‘,

master_log_file=‘mysql-bin.000006‘,

master_log_pos=326;

 

> start slave;  启动复制

> show slave status\G

技术分享


这时候,我们可以在master1或者master2上任意创建库、表、插入数据,然后在slave上都可以看到数据已经正常同步过来了。


Keepalived+Master-Master-Slave组合

标签:mha keepalived 双主 主从

原文地址:http://lee90.blog.51cto.com/10414478/1825478

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!