Keepalived+LVS(DR)+MySQL
实验环境
| 主机名 | IP | VIP | 服务 | 主备 | 
| KA_LV_MYSQL_01 | 192.168.30.130 | 192.168.30.100 | keepalived、LVS、MySQL | MASTER | 
| KA_LV_MYSQL_02 | 192.168.30.131 | BACKUP | 
软件版本:
[root@KA_LV_MYSQL_01 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@KA_LV_MYSQL_01 ~]# keepalived -v
Keepalived v1.2.13 (03/19,2015)
[root@KA_LV_MYSQL_01 ~]# mysql -V
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
[root@KA_LV_MYSQL_01 ~]# ipvsadm -v
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
安装:
配置好本地YUM源,直接采用光盘镜像中的软件进行安装。
[root@KA_LV_MYSQL_01 ~]# yum install -y mysql mysql-server keepalived ipvsadm
配置MySQL主从:
[root@KA_LV_MYSQL_01 ~]# cp /etc/my.cnf{,.bak}
[root@KA_LV_MYSQL_01 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-bin=mysql-master-bin                            
server-id=1
binlog-ignore-db=mysql                             #忽略这些库
binlog-ignore-db=user                               
binlog-ignore-db=information_schema
值得注意的是:需要忽略哪些数据库时有三种方法:
.在主节点上的/etc/my.cnf中使用binlog-do-db、binlog-ignore-db参数指定。
.在使用grant指定权限时,指定数据库
.在slave上限定数据库使用replicate-do-db=dbname
[root@KA_LV_MYSQL_01 ~]# mysql -uroot -p123456
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 754
Server version: 5.1.73-log Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant replication client,replication slave on *.* to root@'192.168.30.%' identified by '123456';
mysql> grant all privileges on *.* to root@'%' identified by '123456' with grant option;
mysql> flush privileges;
mysql> show binary logs;
+-------------------------+-----------+
| Log_name                | File_size |
+-------------------------+-----------+
| mysql-master-bin.000001 |     19726 |
| mysql-master-bin.000002 |    765307 |
| mysql-master-bin.000003 |       125 |
| mysql-master-bin.000004 |       276 |
+-------------------------+-----------+
4 rows in set (0.00 sec)
mysql> reset master;
Query OK, 0 rows affected (0.02 sec)
mysql> show binary logs;
+-------------------------+-----------+
| Log_name                | File_size |
+-------------------------+-----------+
| mysql-master-bin.000001 |       106 |
+-------------------------+-----------+
1 row in set (0.00 sec)


配置mysql从节点
[root@KA_LV_MYSQL_02 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-bin=mysql-slave-bin
server-id=2
mysql> change master to
-> master_host='192.168.30.130',
    -> master_user='root',
    -> master_password='123456',
    -> master_log_file='mysql-master-bin.000001',
    -> master_port=3306,
    -> master_log_pos=106;
Query OK, 0 rows affected (0.02 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.30.130
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-master-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 258
        Relay_Master_Log_File: mysql-master-bin.000001
             Slave_IO_Running: Yes            #这两个Yes说明mysql主从配置成功
            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: 106
              Relay_Log_Space: 414
              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
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)
ERROR: 
No query specified
配置keepalived:
[root@KA_LV_MYSQL_01 ~]# cp /etc/keepalived/keepalived.conf{,.bak}
[root@KA_LV_MYSQL_01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
        1255560195@qq.com
   }
   notification_email_from 1255560195@qq.com
     smtp_server 127.0.0.1
     smtp_connect_timeout 30
     router_id KA_LV_MYSQL_01
}
vrrp_instance VI_1 {
      state MASTER
      interface eth0
      virtual_router_id 51
      priority 200
advert_int
 authentication {
      auth_type PASS
      auth_pass
    }
    virtual_ipaddress {
        192.168.30.100
    }
}
virtual_server 192.168.30.100  {
    delay_loop
    lb_algo wlc
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout
    protocol TCP
    real_server 192.168.30.130  {
        weight
        TCP_CHECK {
            connect_timeout
            nb_get_retry
            delay_before_retry
            connect_port
        }
    }
    real_server 192.168.30.131  {
        weight
        TCP_CHECK {
            connect_timeout
            nb_get_retry
            delay_before_retry
            connect_port
        }
    }
}
在KA_LV_MYSQL_02上只需修改如下两个地方即可。
router_id KA_LV_MYSQL_02
priority 100
配置LVS
[root@KA_LV_MYSQL_01 network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@KA_LV_MYSQL_01 network-scripts]# vim ifcfg-lo:1
DEVICE=lo:1
IPADDR=192.168.30.100
NETMASK=255.255.255.255
#NETWORK=
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=192.168.30.100
ONBOOT=yes
NAME=loopback
[root@KA_LV_MYSQL_01 network-scripts]# service network restart
[root@KA_LV_MYSQL_01 ~]# service ipvsadm restart && service keepalived restart
[root@KA_LV_MYSQL_01 network-scripts]# chkconfig ipvsadm on
[root@KA_LV_MYSQL_01 network-scripts]# chkconfig keepalived on
[root@KA_LV_MYSQL_01 network-scripts]# ipvsadm -A -t 192.169.30.100:3306 -s wlc
[root@KA_LV_MYSQL_01 network-scripts]# ipvsadm -a -t 192.168.30.100:3306 -r 192.168.30.130 -g
Destination already exists
[root@KA_LV_MYSQL_01 network-scripts]# ipvsadm -a -t 192.168.30.100:3306 -r 192.168.30.131 -g
Destination already exists
[root@KA_LV_MYSQL_01 network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.30.100:3306 wlc persistent 50
  -> 192.168.30.130:3306          Local   3      0          0         
  -> 192.168.30.131:3306          Route   3      0          0         
TCP  192.169.30.100:3306 wlc
在KA_LV_MYSQL_02上做相应操作即可。
测试:
在KA_LV_MYSQL_01上登入MySQL

在KA_LV_MYSQL_02上登入MySQL并查看


手动停掉KA_LV_MYSQL_02上的MySQL,去KA_LV_MYSQL_01上查看日志如下,可以看出,当停掉MySQL时,keepalived可以将故障节点自动剔除,当故障节点恢复时,又会重新加入到集群中。
[root@KA_LV_MYSQL_01 network-scripts]# tail /var/log/messages 
Apr 25 08:12:43 KA_LV_MYSQL_01 Keepalived_vrrp[70845]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.30.100
Apr 25 08:12:48 KA_LV_MYSQL_01 Keepalived_vrrp[70845]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.30.100
Apr 25 08:16:15 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: TCP connection to [192.168.30.131]:3306 failed !!!
Apr 25 08:16:15 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: Removing service [192.168.30.131]:3306 from VS [192.168.30.100]:3306
Apr 25 08:16:15 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: Remote SMTP server [127.0.0.1]:25 connected.
Apr 25 08:16:15 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: SMTP alert successfully sent.
Apr 25 08:18:45 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: TCP connection to [192.168.30.131]:3306 success.
Apr 25 08:18:45 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: Adding service [192.168.30.131]:3306 to VS [192.168.30.100]:3306
Apr 25 08:18:45 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: Remote SMTP server [127.0.0.1]:25 connected.
Apr 25 08:18:45 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: SMTP alert successfully sent.
手动关掉KA_LV_MYSQL_01上的keepalived,查看主备节点日志日志,可以看出,KA_LV_MYSQL_02已经接变成master,并接管了VIP。
[root@KA_LV_MYSQL_01 ~]# tail /var/log/messages 
Apr 25 09:09:49 KA_LV_MYSQL_01 Keepalived[70843]: Stopping Keepalived v1.2.13 (03/19,2015)
Apr 25 09:09:49 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: Removing service [192.168.30.130]:3306 from VS [192.168.30.100]:3306
Apr 25 09:09:49 KA_LV_MYSQL_01 Keepalived_vrrp[70845]: VRRP_Instance(VI_1) sending 0 priority
Apr 25 09:09:49 KA_LV_MYSQL_01 Keepalived_healthcheckers[70844]: Removing service [192.168.30.131]:3306 from VS [192.168.30.100]:3306
Apr 25 09:09:49 KA_LV_MYSQL_01 Keepalived_vrrp[70845]: VRRP_Instance(VI_1) removing protocol VIPs.
Apr 25 09:09:49 KA_LV_MYSQL_01 kernel: IPVS: __ip_vs_del_service: enter
[root@KA_LV_MYSQL_02 ~]# tail /var/log/messages 
Apr 25 09:09:50 KA_LV_MYSQL_02 Keepalived_vrrp[6325]: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 25 09:09:51 KA_LV_MYSQL_02 Keepalived_vrrp[6325]: VRRP_Instance(VI_1) Entering MASTER STATE
Apr 25 09:09:51 KA_LV_MYSQL_02 Keepalived_vrrp[6325]: VRRP_Instance(VI_1) setting protocol VIPs.
Apr 25 09:09:51 KA_LV_MYSQL_02 Keepalived_vrrp[6325]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.30.100
Apr 25 09:09:51 KA_LV_MYSQL_02 Keepalived_healthcheckers[6324]: Netlink reflector reports IP 192.168.30.100 added
Apr 25 09:09:56 KA_LV_MYSQL_02 Keepalived_vrrp[6325]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.30.100
KA_LV_MYSQL_02上的LVS集群正常。
[root@KA_LV_MYSQL_02 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.30.100:3306 wlc persistent 50
  -> 192.168.30.130:3306          Route   3      0          0         
  -> 192.168.30.131:3306          Local   3      0          0
Keepalived+LVS(DR)+MySQL的更多相关文章
- Keepalived + LVS/DR 安装配置
		Keepalived + LVS/DR 说明 Keepalived:可以踢出掉故障服务 Keepalived:可以实现主从切换,解决单点故障 实验环境 四台主机:Linux Centos 6.4 32 ... 
- RHEL6 搭建 keepalived + lvs/DR  集群
		搭建 keepalived + lvs/DR 集群 使用Keepalived为LVS调度器提供高可用功能,防止调度器单点故障,为用户提供Web服务: LVS1调度器真实IP地址为192.168.4. ... 
- Mysql双主  keepalived+lvs实现mysql高可用性
		MySQL复制 能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.但是MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现 ... 
- Keepalived+LVS(dr)高可用负载均衡集群的实现
		一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2 ... 
- Keepalived+LVS DR模式高可用架构实践
		Keepalived最初是为LVS设计,专门监控各服务器节点的状态(LVS不带健康检查功能,所以使用keepalived进行健康检查),后来加入了VRRP(虚拟路由热备协议(Virtual Route ... 
- linux keepalived+LVS 实现mysql 从库负载均衡
		前情提要: 参考链接: http://www.osyunwei.com/archives/7464.html ps:以上为本次操作的主要参考资料,非常感谢此文作者的贡献,我的随笔的主要目的是 说明在使 ... 
- Keepalived+LVS高可用负载均衡集群
		概述 Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(HeathChecking)功能——判断LVS负载调度器.节点服务器的可用性,及 ... 
- Keepalived+Lvs+Mysql主主复制
		一简单介绍 Keepalived+lvs+mysql主主复制是比較经常使用的一种Mysql高可用方案,当中lvs 提供读负载均衡,Keepalived通过虚拟vip漂移实现故障自己主动转移,而Mysq ... 
- mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
		mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方 ... 
随机推荐
- sql建表,建索引注意事项
			建表注意 .建议字段定义为NOT NULL 搜索引擎 MyISAM InnoDB 区别 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基 ... 
- cocos2d-x交叉编译到安卓
			ccocos2d-x是一个基于MIT协议的开源框架,用于构建游戏.应用程序和其它图形界面交互应用. 它的最大特点就是跨平台性,支持IOS, Android.Windows, WindowsPhone等 ... 
- Unity3D集成腾讯语音GVoice SDK
			友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了.不过新官网的 ... 
- shell脚本怎么调试
			shell是Linux系统上常用的一种脚本语言.一般从事web后台开发的从业者,都会用到shell,因此shell调试也是一项必备的技能.本文教你如何进行shell脚本调试. 工具/原料 Linu ... 
- Centos7.2——自定义系统服务
			前言 顾明思议,自己创建系统服务,在上一篇博文中写道了,这里就详细写下~ 步骤 我是一段美丽的用户分割的废话~ 进入到系统服务目录 ··· cd /lib/systemd/system ··· 创建服 ... 
- 目前最新版本ActiveMQ 5.15.3 和JDK版本有关的问题
			java.lang.UnsupportedClassVersionError: org/apache/activemq/ActiveMQConnectionFactory : Unsupported ... 
- Android 走向MD的配色风格
			这是一些google官方推出的推荐色值 下面补充上对应的xml文件,省得大家再去自己写 <?xml version="1.0" encoding="utf-8&qu ... 
- ImportError: No module named 'httplib'
			原因:Python 2.x中的"httplib"模块在Python 3.x中变成了"http.client" 原代码: import httplib impor ... 
- JAVA线程同步 (三)信号量
			一个信号量有且仅有3种操作,且它们全部是原子的:初始化.增加和减少 增加可以为一个进程解除阻塞: 减少可以让一个进程进入阻塞. 信号量维护一个许可集,若有必要,会在获得许可之前阻塞每一个线程: ... 
- org.hibernate.hql.ast.QuerySyntaxException: Student is not mapped [from Student as stu where stu.sclass=?]
			java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: t_aty_disease is not ... 
