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
测试结果:
(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