实验环境

主机名 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的更多相关文章

  1. Keepalived + LVS/DR 安装配置

    Keepalived + LVS/DR 说明 Keepalived:可以踢出掉故障服务 Keepalived:可以实现主从切换,解决单点故障 实验环境 四台主机:Linux Centos 6.4 32 ...

  2. RHEL6 搭建 keepalived + lvs/DR 集群

    搭建 keepalived + lvs/DR  集群 使用Keepalived为LVS调度器提供高可用功能,防止调度器单点故障,为用户提供Web服务: LVS1调度器真实IP地址为192.168.4. ...

  3. Mysql双主 keepalived+lvs实现mysql高可用性

    MySQL复制 能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.但是MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现 ...

  4. Keepalived+LVS(dr)高可用负载均衡集群的实现

    一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2 ...

  5. Keepalived+LVS DR模式高可用架构实践

    Keepalived最初是为LVS设计,专门监控各服务器节点的状态(LVS不带健康检查功能,所以使用keepalived进行健康检查),后来加入了VRRP(虚拟路由热备协议(Virtual Route ...

  6. linux keepalived+LVS 实现mysql 从库负载均衡

    前情提要: 参考链接: http://www.osyunwei.com/archives/7464.html ps:以上为本次操作的主要参考资料,非常感谢此文作者的贡献,我的随笔的主要目的是 说明在使 ...

  7. Keepalived+LVS高可用负载均衡集群

    概述 Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(HeathChecking)功能——判断LVS负载调度器.节点服务器的可用性,及 ...

  8. Keepalived+Lvs+Mysql主主复制

    一简单介绍 Keepalived+lvs+mysql主主复制是比較经常使用的一种Mysql高可用方案,当中lvs 提供读负载均衡,Keepalived通过虚拟vip漂移实现故障自己主动转移,而Mysq ...

  9. mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)

    mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言    4 2.原理    4 2.1.概要介绍    4 2.2.工作原理    4 2.3.实际作用    4 3方 ...

随机推荐

  1. 报错:out of memory java heap space

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...

  2. 线程安全 对StringBuilder抛出ArrayIndexOutOfBoundsException的探究

    对StringBuilder抛出ArrayIndexOutOfBoundsException的探究 - CSDN博客 https://blog.csdn.net/liu_005/article/det ...

  3. DOM操作三

    1.以一个对象的x和y属性的方式返回滚动条的偏移量 function getScrollOffsets(w){ //使用指定的窗口,如果不带参数则使用当前窗口 w= w || window; //除了 ...

  4. redis的图形界面管理工具

    大部分人都知道redis是一款用在缓存服务器上的软件,它与memcache类似,都可以存储海量的数据,用在大访问量的web网站.聊天记录存放等方面,但是又与memcache不同: 1.缓存数据可以持久 ...

  5. Kafka在Windows安装运行

    摘要:本文主要说明了如何在Windows安装运行Kafka 一.安装JDK 过程比较简单,这里不做说明. 最后打开cmd输入如下内容,表示安装成功 二.安装zooeleeper 下载安装包:http: ...

  6. IE9不能直接引用Console

    问题: 公司有个项目,功能很简单,读取业务数据,展示在页面上. 一个很简单的问题,却因为目标浏览器是IE9,卡了三天. 前端给的反馈是: 在IE9下,程序一会儿对,一会儿不对--第一次刷不出来,多刷几 ...

  7. CentOS7.2安装Vim8和YouCompleteMe

    1.环境 本文使用VMWare虚拟机进行实验,客户机系统是CentOS 7.2最小安装(CentOS-7-x86_64-Minimal-1511.iso) 最终实现效果:安装vim8 + python ...

  8. HDU2089 不要62 —— 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    M ...

  9. AutoEventWireup

    Page_PreInit & OnPreInit - whats the difference? https://forums.asp.net/t/1095903.aspx?Page_PreI ...

  10. mpvue——实现点击数组内的某一元素进行置顶(排序第一)操作

    前言 其实很简单只是用了js的几个函数 substr unshift splice 完整代码 | mpvue模仿QQ 代码 思路很简单,获取当前元素下标然后通过unshift函数将该值插入到数组第一位 ...