您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

利用keepalived构建MySQL

添加时间:2012-4-19  添加: admin 

环境拓扑如下:MySQL-VIP:192.168.1.200  MySQL-master1:192.168.1.201  MySQL-master2:192.168.1.202   OS版本:CentOS 5.4  MySQL版本:5.0.89  Keepalived版本:1.1.20 一、MySQL master-master配置

1、修改MySQL配置文件

两台MySQL均如要开启binlog日志功能,开启方法:在MySQL配置文件[MySQLd]段中加上log-bin=MySQL-bin选项

两台MySQL的server-ID不能一样,默认情况下两台MySQL的serverID都是1,需将其中一台修改为2即可

2、将192.168.1.201设为192.168.1.202的主服务器

在192.168.1.201上新建授权用户

MySQL> grant replication slave on *.* to 'replication'@'%' identified by 'replication';  Query OK, 0 rows affected (0.00 sec)   MySQL> show master status;  +------------------+----------+--------------+------------------+  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |  +------------------+----------+--------------+------------------+  | MySQL-bin.000003 |      374 |              |                  |   +------------------+----------+--------------+------------------+  1 row in set (0.00 sec) 在192.168.1.202上将192.168.1.201设为自己的主服务器

MySQL> change master to master_host='192.168.1.201',master_user='replication',master_password='replication',master_log_file='MySQL-bin.000003',master_log_pos=374;  Query OK, 0 rows affected (0.05 sec)   MySQL> start slave;  Query OK, 0 rows affected (0.00 sec)   MySQL> show slave status\G  *************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.1.201                  Master_User: replication                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: MySQL-bin.000003          Read_Master_Log_Pos: 374               Relay_Log_File: MySQL-master2-relay-bin.000002                Relay_Log_Pos: 235        Relay_Master_Log_File: MySQL-bin.000003             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table:                    Last_Errno: 0                   Last_Error:                  Skip_Counter: 0          Exec_Master_Log_Pos: 374              Relay_Log_Space: 235              Until_Condition: None               Until_Log_File:                 Until_Log_Pos: 0           Master_SSL_Allowed: No           Master_SSL_CA_File:            Master_SSL_CA_Path:               Master_SSL_Cert:             Master_SSL_Cipher:                Master_SSL_Key:         Seconds_Behind_Master: 0  1 row in set (0.00 sec) 3、将192.168.1.202设为192.168.1.201的主服务器

在192.168.1.202上新建授权用户

MySQL> grant replication slave on *.* to 'replication'@'%' identified by 'replication';  Query OK, 0 rows affected (0.00 sec)   MySQL> show master status;  +------------------+----------+--------------+------------------+  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |  +------------------+----------+--------------+------------------+  | MySQL-bin.000003 |      374 |              |                  |   +------------------+----------+--------------+------------------+  1 row in set (0.00 sec) 在192.168.1.201上,将192.168.1.202设为自己的主服务器

MySQL> change master to master_host='192.168.1.202',master_user='replication',master_password='replication',master_log_file='MySQL-bin.000003',master_log_pos=374;  Query OK, 0 rows affected (0.05 sec)   MySQL> start slave;  Query OK, 0 rows affected (0.00 sec)   MySQL> show slave status\G  *************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.1.202                  Master_User: replication                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: MySQL-bin.000003          Read_Master_Log_Pos: 374               Relay_Log_File: MySQL-master1-relay-bin.000002                Relay_Log_Pos: 235        Relay_Master_Log_File: MySQL-bin.000003             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table:                    Last_Errno: 0                   Last_Error:                  Skip_Counter: 0          Exec_Master_Log_Pos: 374              Relay_Log_Space: 235              Until_Condition: None               Until_Log_File:                 Until_Log_Pos: 0           Master_SSL_Allowed: No          Master_SSL_CA_File:            Master_SSL_CA_Path:               Master_SSL_Cert:             Master_SSL_Cipher:                Master_SSL_Key:         Seconds_Behind_Master: 0  1 row in set (0.00 sec) 4、MySQL同步测试

如上述均正确配置,现在任何一台MySQL上更新数据都会同步到另一台MySQL,MySQL同步在此不再演示

二、keepalived安装及配置

1、192.168.1.201服务器上keepalived安装及配置

安装keepalived

#tar zxvf keepalived-1.1.20.tar.gz  #cd keepalived-1.1.20  #./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686  #make && make install 配置keepalived

我们自己在新建一个配置文件,默认情况下keepalived启动时会去/etc/keepalived目录下找配置文件

#mkdir /etc/keepalived  #vi /etc/keepalived/keepalived.conf  ! Configuration File for keepalived  global_defs {       notification_email {       luwenju@live.cn       }       notification_email_from luwenju@live.cn       smtp_server 127.0.0.1       smtp_connect_timeout 30       router_id MySQL-ha       }   vrrp_instance VI_1 {       state BACKUP   #两台配置此处均是BACKUP       interface eth0       virtual_router_id 51       priority 100   #优先级,另一台改为90       advert_int 1       nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置       authentication {       auth_type PASS       auth_pass 1111       }       virtual_ipaddress {       192.168.1.200       }       }   virtual_server 192.168.1.200 3306 {       delay_loop 2   #每个2秒检查一次real_server状态       lb_algo wrr   #LVS算法       lb_kind DR    #LVS模式       persistence_timeout 60   #会话保持时间       protocol TCP       real_server 192.168.1.201 3306 {       weight 3       notify_down /usr/local/MySQL/bin/MySQL.sh  #检测到服务down后执行的脚本       TCP_CHECK {       connect_timeout 10    #连接超时时间       nb_get_retry 3       #重连次数       delay_before_retry 3   #重连间隔时间       connect_port 3306   #健康检查端口       }       } 编写检测服务down后所要执行的脚本

#vi /usr/local/MySQL/bin/MySQL.sh  #!/bin/sh  pkill keepalived  #chmod +x /usr/local/MySQL/bin/MySQL.sh 注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server的服务状态,当发现real_server服务故障时,便触发此脚本;我们可以看到,脚本就一个命令,通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。另外,我们不用担心两个MySQL会同时提供数据更新操作,因为每台MySQL上的keepalived的配置里面只有本机MySQL的IP+VIP,而不是两台MySQL的IP+VIP

启动keepalived

#/usr/local/keepalived/sbin/keepalived –D  #ps -aux | grep keepalived 测试

找一台局域网PC,然后去ping  MySQL的VIP,这时候MySQL的VIP是可以ping的通的

停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本

2、192.168.1.202上keepalived安装及配置

安装keepalived

#tar zxvf keepalived-1.1.20.tar.gz  #cd keepalived-1.1.20  #./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686  #make && make install 配置keepalived

这台配置和上面基本一样,但有三个地方不同:优先级为90、无抢占设置、real_server为本机IP

#mkdir /etc/keepalived  #vi /etc/keepalived/keepalived.conf  ! Configuration File for keepalived  global_defs {       notification_email {       luwenju@live.cn       }       notification_email_from luwenju@live.cn       smtp_server 127.0.0.1       smtp_connect_timeout 30       router_id MySQL-ha       }   vrrp_instance VI_1 {       state BACKUP       interface eth0       virtual_router_id 51       priority 90       advert_int 1       authentication {       auth_type PASS       auth_pass 1111       }       virtual_ipaddress {       192.168.1.200       }       }   virtual_server 192.168.1.200 3306 {       delay_loop 2       lb_algo wrr       lb_kind DR       persistence_timeout 60       protocol TCP       real_server 192.168.1.202 3306 {       weight 3       notify_down /usr/local/MySQL/bin/MySQL.sh       TCP_CHECK {       connect_timeout 10       nb_get_retry 3       delay_before_retry 3       connect_port 3306       }       } 编写检测服务down后所要执行的脚本

#vi /usr/local/MySQL/bin/MySQL.sh  #!/bin/sh  pkill keepalived  #chmod +x /usr/local/MySQL/bin/MySQL.sh   启动keepalived  #/usr/local/keepalived/sbin/keepalived –D  #ps -aux | grep keepalived 测试

停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本

三、测试

MySQL远程登录测试

我们找一台安装有MySQL客户端的windows,然后登录VIP,看是否能登录,在登录之两台MySQL服务器都要授权允许从远程登录

MySQL> grant all privileges on *.* to 'root'@'%' identified by '123456';  Query OK, 0 rows affected (0.00 sec)   MySQL> flush privileges;  Query OK, 0 rows affected (0.00 sec) 使用客户端登录VIP测试

C:\MySQL\bin>MySQL.exe -uroot -p123456 -h192.168.1.200 -P3306  Welcome to the MySQL monitor.  Commands end with ; or \g.  Your MySQL connection id is 224  Server version: 5.0.89-log Source distribution   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.   MySQL> ● keepalived故障转移测试

※在windows客户端一直去ping  VIP,然后关闭192.168.1.201上的keepalived,正常情况下VIP就会切换到192.168.1.202上面去

※开启192.168.1.201上的keepalived,关闭192.168.1.202上的keepalived,看是否能自动切换,正常情况下VIP又会属于192.168.1.201

注:keepalived切换速度还是非常块的,整个切换过程只需1-3秒

● MySQL故障转移测试

※在192.168.1.201上关闭MySQL服务,看VIP是否会切换到192.168.1.202上

※开启192.168.1.201上的MySQL和keepalived,然后关闭192.168.1.202上的MySQL,看VIP是否会切换到192.168.1.201上

关键字:keepalived、构建、MySQL

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站