300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验

MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验

时间:2022-08-27 01:51:55

相关推荐

MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验

/wzy0623/article/details/38757561

MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验

分类:MySQL-08-22 15:39331人阅读评论(0)收藏举报 一、环境

Master(主机A):192.168.1.1

Slave(主机B) :192.168.1.2

W-VIP(写入) :192.168.1.3

R-VIP(读取) :192.168.1.4

Client(测试) :192.168.1.100

操作系统版本:CentOS release 6.4

MySQL数据库版本:5.6.14

keepalived版本:1.2.7

LVS版本:1.26

所有环境均为虚拟机

二、设计思路

1. 服务器A和B,通过mysql的slave进程同步数据。

2. 通过keepalived启用两个虚IP:W-VIP/R-VIP,一个负责写入,一个负责读取,实现读写分离。

3. A和B都存在时,W-VIP下将请求转发至主机A,R-VIP将请求转发给A和B,实现负载均衡。

4. 当主机A异常时,B接管服务,W-VIP/R-VIP此时漂到了主机B上,此时这两个虚IP下都是主机B,实现高可用

5. 当主机B异常时,R-VIP会将B踢出,其他不变

三、架构图

四、软件安装

主从两个主机都要装以下软件:

1. MySQL的安装(略)

2. keepalived安装

yum install keepalived

2. LVS安装

yum install ipvsadm

五、配置

1. 配置MySQL的主从复制(略)

2. 配置keepalived

Master上的配置

vi /etc/keepalived/keepalived.conf

[plain]view plaincopy!ConfigurationFileforkeepalived global_defs{ router_idMySQL-ha } vrrp_instanceVI_1{ stateBACKUP interfaceeth1 virtual_router_id90 priority100 advert_int1 notify_master"/usr/local/mysql/bin/remove_slave.sh" nopreempt authentication{ auth_typePASS auth_pass1111 } virtual_ipaddress{ 192.168.1.3labeleth1:1 192.168.1.4labeleth1:2 } } virtual_server192.168.1.36603{ delay_loop2 lb_algowrr lb_kindDR persistence_timeout60 protocolTCP real_server192.168.1.16603{ weight3 notify_down/usr/local/mysql/bin/mysql.sh TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port6603 } } } virtual_server192.168.1.46603{ delay_loop2 lb_algowrr lb_kindDR persistence_timeout60 protocolTCP real_server192.168.1.16603{ weight1 notify_down/usr/local/mysql/bin/mysql.sh TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port6603 } } real_server192.168.1.26603{ weight3 TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port6603 } } }

keepalived配置成服务并开机启动

[plain]view plaincopycp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/ cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/ cp/usr/local/keepalived/sbin/keepalived/usr/sbin/ chkconfig--addkeepalived chkconfig--level345keepalivedon

vi /usr/local/mysql/bin/remove_slave.sh

[plain]view plaincopy#!/bin/bash user=u1 password=12345 log=/usr/local/mysql/log/remove_slave.log echo"`date`">>$log /usr/local/mysql/bin/mysql-u$user-p$password-e"setglobalread_only=OFF;resetmaster;stopslave;changemastertomaster_host='localhost';">>$log /bin/sed-i's#read-only#\#read-only#'/etc/f

vi /usr/local/mysql/bin/mysql.sh

[plain]view plaincopy#!/bin/bash /etc/init.d/keepalivedstop

Slave上的配置

vi /etc/keepalived/keepalived.conf

[plain]view plaincopy!ConfigurationFileforkeepalived global_defs{ router_idMySQL-ha } vrrp_instanceVI_1{ stateBACKUP interfaceeth1 virtual_router_id90 priority99 advert_int1 notify_master"/usr/local/mysql/bin/remove_slave.sh" authentication{ auth_typePASS auth_pass1111 } virtual_ipaddress{ 192.168.1.3labeleth1:1 192.168.1.4labeleth1:2 } } virtual_server192.168.1.36603{ delay_loop2 lb_algowrr lb_kindDR persistence_timeout60 protocolTCP real_server192.168.1.26603{ weight3 notify_down/usr/local/mysql/bin/mysql.sh TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port6603 } } } virtual_server192.168.1.46603{ delay_loop2 lb_algowrr lb_kindDR persistence_timeout60 protocolTCP real_server192.168.1.26603{ weight3 notify_down/usr/local/mysql/bin/mysql.sh TCP_CHECK{ connect_timeout10 nb_get_retry3 delay_before_retry3 connect_port6603 } } } keepalived配置成服务并开机启动[plain]view plaincopycp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/ cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/ cp/usr/local/keepalived/sbin/keepalived/usr/sbin/ chkconfig--addkeepalived chkconfig--level345keepalivedon vi /usr/local/mysql/bin/remove_slave.sh[plain]view plaincopy#!/bin/bash user=u1 password=12345 log=/usr/local/mysql/log/remove_slave.log echo"`date`">>$log /usr/local/mysql/bin/mysql-u$user-p$password-e"setglobalread_only=OFF;resetmaster;stopslave;changemastertomaster_host='localhost';">>$log /bin/sed-i's#read-only#\#read-only#'/etc/f

vi /usr/local/mysql/bin/mysql.sh[plain]view plaincopy#!/bin/bash /etc/init.d/keepalivedstop

3. 配置LVS

Master与Slave上的配置相同:

vi /usr/local/bin/lvs_real.sh[plain]view plaincopy#!/bin/bash #description:Configrealserverloandapplynoarp SNS_VIP=192.168.1.3 SNS_VIP2=192.168.1.4 source/etc/rc.d/init.d/functions case"$1"in start) ifconfiglo:0$SNS_VIPnetmask255.255.255.255broadcast$SNS_VIP ifconfiglo:1$SNS_VIP2netmask255.255.255.255broadcast$SNS_VIP2 /sbin/routeadd-host$SNS_VIPdevlo:0 /sbin/routeadd-host$SNS_VIP2devlo:1 echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore echo"2">/proc/sys/net/ipv4/conf/all/arp_announce sysctl-p>/dev/null2>&1 echo"RealServerStartOK" ;; stop) ifconfiglo:0down ifconfiglo:1down routedel$SNS_VIP>/dev/null2>&1 routedel$SNS_VIP2>/dev/null2>&1 echo"0">/proc/sys/net/ipv4/conf/lo/arp_ignore echo"0">/proc/sys/net/ipv4/conf/lo/arp_announce echo"0">/proc/sys/net/ipv4/conf/all/arp_ignore echo"0">/proc/sys/net/ipv4/conf/all/arp_announce echo"RealServerStoped" ;; *) echo"Usage:$0{start|stop}" exit1 esac exit0[plain]view plaincopychmod755/usr/local/bin/lvs_real.sh echo"/usr/local/bin/lvs_real.shstart">>/etc/rc.local

五、Master和Slave的启动

1. 启动Master上的MySQL

service mysql start

2. 启动Slave上的MySQL

service mysql start

3. 启动Master上的realserver脚本

/usr/local/bin/lvs_real.sh start

4. 启动Slave上的realserver脚本

/usr/local/bin/lvs_real.sh start

5. 启动Master上的keepalived

service keepalived start

6. 启动Slave上的keepalived

service keepalived start

六、测试

1. 查看lvs能否进行负载均衡转发

在Master和Slave上分别执行:

ipvsadm -ln

2. 在Client上验证连通性:

ping 192.168.1.3

ping 192.168.1.4

mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"

mysql -u u1 -p12345 -P 6603 -h 192.168.1.4 -e "show variables like 'server_id'"

3. 停掉Master上的MySQL,看写IP否自动切换到Slave,看读IP是否去掉了Master的MySQL

在Master和Slave上分别执行:

ipvsadm -ln

在Client上执行:

mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"

mysql -u u1 -p12345 -P 6603 -h 192.168.1.4 -e "show variables like 'server_id'"

4. 停掉Master上的keepalived,看读写VIP是否会迁移到Slave上。

在Master和Slave上分别执行:

ipvsadm -ln

在Client上执行:

mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"

mysql -u u1 -p12345 -P 6603 -h 192.168.1.4 -e "show variables like 'server_id'"

5. 停掉Slave上的MySQL,看读IP是否去掉了Slave的MySQL

在Master和Slave上分别执行:

ipvsadm -ln

在Client上执行:

mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"

mysql -u u1 -p12345 -P 6603 -h 192.168.1.4 -e "show variables like 'server_id'"

6. 重启Master的系统,看看切换过程是否正常

七、参考

/link?url=17K0UDApzfK18A8F5Of9wl0lmGx6AD_0PQ8GyVqmCsBMSz16xjt2JI88lPAeID2qECs7piUxkzQLyatTtDuEJxwZEy6joIBfBmT3vgTfdUS

/uid-23500957-id-3781918.html

/uid-23500957-id-3781919.html

/uid-20639775-id-3337471.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。