lvs+keepalived+mysql的HA(keepalived是做高可用的)


准备2台机器:node1、node2  共4个网卡(每台2个),4个ip地址

 

备注:

 

      node1-->eth1、node2--->eth1是keepalived,node1--->eth0、node2--->eth0是真实服务器

      node1-----》192.168.1.101

      node2-----》192.168.1.102

      vip---------->192.168.1.200

 

1\\如果已经使用过LVS,那么重置LVS
 环境:# yum install  kernel-devel openssl openssl-devel -y
先安装:#yum  install  ipvsadm -y
在2台机器上都执行:
ipvsadm -C
ipvsadm -Ln


2\\开始安装keepalived (node1和node2都要安装)
执行:#yum  install keepalived -y


3\\node1和node2,编辑keepalived.conf文件(路径:vi /etc/keepalived/keepalived.conf)
修改前先备份:cp /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.backup.conf
#vi /etc/keepalived/keepalived.conf
通过学习:man keepalived.conf来更改配置文件
内容见备注,----注意:虚拟服务器端口号要和真实服务器的端口号一致
即:192.168.1.200:3306 --------》
real server 192.168.1.101:3306   real server 192.168.1.102:3306


4\\启动keepalived(node1和node2)
#service keepalived start
查看启动日志:
# tail  /var/log/messages


5\\查看虚拟网卡
#ifconfig


6\\测试单个keepalived运行是否正常
java访问虚拟网卡ip:192.168.1.200
当关掉node1后,如果ifconfg查看node2是正常,那么说明成功了


7\\在真实服务器上配置lvs,在keepalived机器上不用配置lvs(查看二\\)
在真实服务器RS(后端服务器,目前有2个:192.168.1.101和192.168.1.102)中执行以下命令,
         更改linux的内核参数映射
# 修改arp为不广播、不响应,隐藏RS上的VIP
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 


#真实服务器上,再添加RS上的VIP,并在VIP上添加虚拟路由,虚拟路由的IP必须与VIP相同(可以不执行)

ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
route add -host 192.168.1.200 dev lo:0

 

 

 

 

目的是为了提供以下服务虚拟ip:

   virtual_ipaddress {

192.168.1.200/24 dev eth1 label eth1:1 #外部访问的虚拟ip

    }

本文没有使用,原因:测试不通过

 

 

8\\启动keepalived(192.168.1.101和192.168.1.102),测试是否可以正常
编写java代码访问:虚拟服务器—》http://192.168.1.200:3306/
关闭一个keepalived和mysql后查看启动是否正常----》查看命令:ipvsamd –Ln  




关闭当前mysql后----》java程序访问mysql再查看----》http://192.168.142.200:8080/
同时执行命令:#ifconfig查看
9\\注意:启动keepalived一定要先启动master,再启动backup!!!!!
10\\如果不能正常使用,那么先停掉master,再重启master!!!即可

 

 

备注:lvs+keepalived+mysql的keepalived配置

 

 

【【主:node2】】

! Configuration File for keepalived

#guration File for keepalived

#global define

global_defs {

router_id LVS_CNC_1

}

vrrp_sync_group VGM {

group {

VI_CACHE

}

}

################################################################

# vvrp_instance define #

################################################################

vrrp_instance VI_CACHE {

state MASTER    #这台是主,另一台设置为BACKUP

interface eth0

lvs_sync_daemon_inteface eth0

virtual_router_id 51

priority 180     #从的值必须比180小

advert_int 5

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.200

}

}

##############################################################

# virtual machine setting #

##############################################################

# setting port 3306 forward

virtual_server 192.168.1.200 3306

delay_loop 6

lb_algo wlc  #调度算法wlc

lb_kind DR  #lvs的模式,NAT

persistence_timeout  20 #会话保持时间,单位是秒。

protocol TCP

real_server 192.168.1.101 3306

weight 100     #从的值必须比主的小

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

real_server 192.168.1.102 3306

weight 100

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

【【从node1】】

! Configuration File for keepalived

#guration File for keepalived

#global define

global_defs {

router_id LVS_CNC_2

}

vrrp_sync_group VGM {

group {

VI_CACHE

}

}

################################################################

# vrrp_instance setting #

################################################################

vrrp_instance VI_CACHE {

state BACKUP  

interface eth1

lvs_sync_daemon_inteface eth1 #必须使用eth1,不能使用eth0

virtual_router_id 51

priority 150

advert_int 5

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.200

}

}

##############################################################

# virtual server setting #

##############################################################

# setting port 3306 forward

virtual_server 192.168.1.200 3306

delay_loop 6

lb_algo wlc

lb_kind DR

persistence_timeout 30  #会话保持时间,单位是秒。

protocol TCP

real_server 192.168.1.101 3306

weight 100

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

real_server 192.168.1.102 3306 {

weight 100

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

【jdbc访问mysql】

1、添加mysql驱动jar

2、编写代码类:TestLvxMysql.java

import java.sql.Connection;
import java.sql.DriverManager;
/**
* Document:本类作用---->测试负载均衡
* User: yangjf
* Date: 2016/8/2 9:38
*/
public class TestLvxMysql {
public static void main(String[] args) {
try{
Connection conn=null;
for(int i=0;i<2000;i++){
conn=getConn();
System.out.println(i+" "+conn);
releaseConn(conn);
Thread.sleep(1000);
}
}catch (Exception e){
e.printStackTrace();
}
}
public static Connection getConn(){
Connection conn=null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://192.168.1.200:3306/my_test?useUnicode=true&characterEncoding=UTF-8","root","123456");
}catch (Exception e){
e.printStackTrace();
}
return conn;
}
public static void releaseConn(Connection conn){
try{
if(conn!=null){
conn.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}

测试结果:

(1)当停止node1或者node2的mysql服务后,jdbc仍然可以获取连接,说明配置成功!!

(2)当停止node1的keepalived master或者node2的keepalived backup服务后,jdbc仍然可以获取连接,说明配置成功!

注意:停止mysql服务后,中间有3s左右的等待时间!!

      停止keepalived 服务后,中间有5s左右的等待时间!!

 

参考:​http://www.keepalived.org/pdf/sery-lvs-cluster.pdf