拓扑结构:
实验规划:
把后端的mysql做成“一主多从”复制架构,主的mysql将提供“写”操作,从的mysql将提供“读”操作,两台服务器做lvs-keepalived实现高可用,正常情况下,一台服务器获得对mysql“写”操作的vip,另一台服务器获得对mysql"读"操作的vip,当用户请求连接“写”vip操作时,将被lvs调度到主的mysql上,当用户请求连接“读”vip操作时,将被lvs调度到从的mysql上。
实验环境:
ipvsadm-1.26-4.el6.x86_64
keepalived-1.2.13-4.el6.x86_64
Linux centos-server 2.6.32-504.el6.x86_64
mysql-5.1
首先配置主从复制:
配置主mysql[root@centos-server ~]# vim/etc/my.cnf #修改my.cnf
[mysqld]
port = 3306
binlog-do-db=dragon #同步的数据库
replicate-ignore-db=mysql #不同步的数据库
replicate-ignore-db=information_schema
server-id= 1 #server-id要唯一
log-bin=mysql-bin
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000037 | 106 | dragon | |
+------------------+----------+--------------+------------------+
1 row in set (0.08 sec)
mysql> grant replication slave on *.* to 'back'@'192.168.150.%' identified by 'qwe123';
1 row in set (0.01 sec) #添加用户"back",SLAVE用于登录本机复制数据库日志文件
[root@centos-server ~]# cd /usr/local/mysql/var/
[root@centos-server var]# tar zcf dragon.tar.gz dragon/
scp dragon.tar.gz root@192.168.150.137:/usr/local/mysql/var/ #把数据库复制到SLAVE上
配置从mysql:
修改my.cnf的server-id为2
[root@drbd1 ~]# cd /usr/local/mysql/var/
[root@drbd1 var]#tar xf dragon.tar.gz #先解压缩复制过来的数据库文件
[root@drbd1 var]#mysql -uroot -pqwe123
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='192.168.150.128',master_user='back',masaster_log_pos=106; #使用用户"back"复制MASTER的"mysql-bin.000025"日志
Query OK, 0 rows affected (0.03 sec)
mysql> slave start;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
[root@drbd1 var]# service mysqld restart #重启SLAVE的mysql
[root@drbd1 var]# mysql -uroot -pqwe123
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.150.128
Master_User: back
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000037
Read_Master_Log_Pos: 106
Relay_Log_File: drbd1-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000037
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在从mysql配置提供“读”操作的vip,并且禁止apr响应和添加路由条目:
[root@centos-server ~]# vim /etc/sysctl.confnet.ipv4.conf.all.arp_ignore=1net.ipv4.conf.all.arp_announce=2net.ipv4.conf.default.arp_ignore=1net.ipv4.conf.default.arp_announce=2net.ipv4.conf.lo.arp_ignore=1net.ipv4.conf.lo.arp_announce=2[root@centos-server ~]# sysctl -p[root@centos-server ~]# ifconfig lo:0 192.168.150.201/32[root@centos-server ~]# route add -host 192.168.150.201 dev lo:0
在从mysql配置提供“写”操作的vip,并且禁止apr响应和添加路由条目:
[root@centos-server ~]# vim /etc/sysctl.confnet.ipv4.conf.all.arp_ignore=1net.ipv4.conf.all.arp_announce=2net.ipv4.conf.default.arp_ignore=1net.ipv4.conf.default.arp_announce=2net.ipv4.conf.lo.arp_ignore=1net.ipv4.conf.lo.arp_announce=2[root@centos-server ~]# sysctl -p[root@centos-server ~]# ifconfig lo:0 192.168.150.200/32[root@centos-server ~]# route add -host 192.168.150.200 dev lo:0
配置LVS调度:
[root@centos-server ~]# sysctl -w net.ipv4.conf.all.send_redirects=0net.ipv4.conf.all.send_redirects = 0[root@centos-server ~]# sysctl -w net.ipv4.conf.default.send_redirects=0net.ipv4.conf.default.send_redirects = 0[root@centos-server ~]# sysctl -w net.ipv4.conf.eth3.send_redirects=0net.ipv4.conf.eth2.send_redirects = 0[root@centos-server ~]# ipvsadm -A -t 192.168.150.200:3306 -s rr[root@centos-server ~]# ipvsadm -a -t 192.168.150.200:3306 -r 192.168.150.129 -g -w 1[root@centos-server ~]# ipvsadm -A -t 192.168.150.201:3306 -s rr[root@centos-server ~]# ipvsadm -a -t 192.168.150.201:3306 -r 192.168.150.128 -g -w 1[root@centos-server ~]# service ipvsadm save
配置keepalived实现高可用:
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 220.181.12.11 smtp_connect_timeout 30 router_id haproxy_DEVEL}vrrp_instance VI_1 { state mastert #另一端keepalived配置为slave interface eth3 #挂载vip的本地网卡 virtual_router_id 51 priority 100 #另一配置文件为“80” advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.150.200/24 dev eth3 }}virtual_server 192.168.150.200/24 3306 { #后端mysql的健康检测 delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.150.128 3306 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } }}vrrp_instance VI_2 { state slave #另一端keepalived配置为“master” interface eth3 virtual_router_id 52 priority 80 #另一端keepalived配置为“100” advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.150.201/24 dev eth3 }}virtual_server 192.168.150.201/24 3306 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.150.129 3306 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } }}[root@centos-server ~]# service keepalived restart #两端keepalived重启
连接vip测试:
请求“写”操作的vip时,能够被正常调度
[root@drbd2 var]# mysql -uback -pqwe123 -h 192.168.150.200 Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 161Server version: 5.1.55-log Source distributionCopyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.This software comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to modify and redistribute it under the GPL v2 licenseType 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
请求“读”操作时,能够被正常调度
[root@drbd2 var]# mysql -uread -pqwe123 -h 192.168.150.201 Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 12Server version: 5.1.55-log Source distributionCopyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.This software comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to modify and redistribute it under the GPL v2 licenseType 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
查看lvs当前处理的调度:
[root@centos-server ~]# ipvsadm -LncIPVS connection entriespro expire state source virtual destinationTCP 14:56 ESTABLISHED 192.168.150.129:53464 192.168.150.200:3306 192.168.150.128:3306TCP 00:46 NONE 192.168.150.129:0 192.168.150.200:3306 192.168.150.128:3306[root@centos-server ~]# ipvsadm -LncIPVS connection entriespro expire state source virtual destinationTCP 01:25 FIN_WAIT 192.168.150.128:49274 192.168.150.201:3306 192.168.150.129:3306TCP 14:41 ESTABLISHED 192.168.150.128:49275 192.168.150.201:3306 192.168.150.129:3306
keepalived实现故障转移:
停掉其中一台HA的网卡[root@centos-server ~]# ifdown eth3
虚拟IP被转移
本文出自 “龙爱雪琪” 博客,请务必保留此出处http://dragon123.blog.51cto.com/9152073/1608288