|
环境:
1台客户端(192.168.65.100),2台apache(192.168.66.102,192.168.66.103),2台lvs(192.168.65.101,192.168.65.104,vip1:192.168.66.200,vip2:192.168.66.201),3台mysql(192.168.66.105(主),192.168.66.106,192.168.66.107),1台路由(192.168.65.101,192.168.66.100),实现mysql读写分离及a-b-b模式,通过dr模式实现负载,拓扑图如下:
客户端:
route add default gw 192.168.65.101
路由:
echo 1 > /proc/sys/net/ipv4/ip_froword
分发器1:
yum install ipvsadm -y
ifconfig eth0:0 192.168.66.200 netmask 255.255.255.255 broadcast 192.168.66.200 up
ipvsadm -A -t 192.168.66.200:80 -s rr
ipvsadm -a -t 192.168.66.200:80 -r 192.168.66.102 -g
ipvsadm -a -t 192.168.66.200:80 -r 192.168.66.103 -g
apache1:
yum install httpd php* -y
ifconfig lo:0 192.168.66.200 netmask 255.255.255.255 broadcast 192.168.66.200 up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
route add -host 192.168.66.200 dev lo:0
route add default gw 192.168.66.100
apache2:
yum install httpd php* -y
ifconfig lo:0 192.168.66.200 netmask 255.255.255.255 broadcast 192.168.66.200 up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
route add -host 192.168.66.200 dev lo:0
route add default gw 192.168.66.100
分发器2:
yum install ipvsadm -y
ifconfig eth0:0 192.168.66.201 netmask 255.255.255.255 broadcast 192.168.66.201 up
ipvsadm -A -t 192.168.66.201:3306 -s rr
ipvsadm -a -t 192.168.66.201:3306 -r 192.168.66.106 -g
ipvsadm -a -t 192.168.66.201:3306 -r 192.168.66.107 -g
mysql主:
yum install mysql
vim /etc/my.cnf
server_id=1
log-bin=binlog
grant replication slave on *.* to 'ls'@'%' identified by '123';
flush privileges;
grant all on *.* to 'hello'@'%' identified by '123';
mysql2:
ifconfig lo:0 192.168.66.201 netmask 255.255.255.255 broadcast 192.168.66.201 up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
route add -host 192.168.66.201 dev lo:0
route add default gw 192.168.66.100
yum install mysql
vim /etc/my.cnf
server_id=2
relay_log=/var/lib/mysql/mysql-relay-bin
relay_log_index=/var/lib/mysql/mysql-relay-bin.index
grant all on *.* to 'who'@'%' identified by '123';
change master to master_host='192.168.66.105',master_port=3306,master_user='ls',master_password='123',master_log_file='binlog.000001',master_log_pos=294;
start slave;
mysql3:
ifconfig lo:0 192.168.66.201 netmask 255.255.255.255 broadcast 192.168.66.201 up
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
route add -host 192.168.66.201 dev lo:0
route add default gw 192.168.66.100
yum install mysql
vim /etc/my.cnf
server_id=3
relay_log=/var/lib/mysql/mysql-relay-bin
relay_log_index=/var/lib/mysql/mysql-relay-bin.index
grant all on *.* to 'who'@'%' identified by '123';
change master to master_host='192.168.66.105',master_port=3306,master_user='ls',master_password='123',master_log_file='binlog.000001',master_log_pos=294;
start slave;
至此所有服务器的配置完成。mysql的读写分离本人使用的是一个程序实现的,配置简单,在这里我就不做说明了,另外也可有使用mysql提供的一个插件(mysql-proxy插件可以实现读写分离和mysql主服务器的负载,以减少mysql主服务器的压力),经过本人的测试结果,当使用create,insert语句的时候,在第二个分发器上使用ipvsadm -lnc命令查看没有任何的连接请求,当使用select语句的时候,第二个分发器上才会有lvs记录生成,在第一个分发器上同样使用ipvsadm -lnc命令可以查看的lvs的记录,因为此拓扑使用的是rr模式,看到的结果是一个是apache1连接数据库,另一个就是apache2连接数据库,在此我就不上传测试图片了,此拓扑也是有不足的地方,就是存在单点故障以及其他的问题,之后我将再次更新一份比较全面的拓扑以及详细配置。
|
|
|