前几天看了一套关于负载均衡和MySQL主从复制的教程后,打算自己手动实验一下。由于还没涉及到服务器集群技术,所以这里并没有做服务器集群,所以当系统中某台服务器宕机时,整个系统都会受到影响,但这里先不考虑这个问题。
由于真实环境中并没有那么多主机可以,所以这里用一台真实主机模拟出多台虚拟机服务器来做实验。
准备
主机配置
CPU | I5-3210M 2.50GHz |
RAM | 8G |
OS | Win8 X64 |
HDD | 500G |
VirtualBox | 4.2.12 |
虚拟服务器配置
设备 | 说明 | 环境 | 初始配置 |
LvsNatServer
| Lvs服务器 | CentOS6.3 | eth0:192.168.6.1 eth1:192.168.0.232 Ipvsadm |
WebServer1 | Web服务器1 | CentOS6.3 | eth0:192.168.6.2 gw:192.168.6.1 Apache2.2.x |
WebServer2 | Web服务器2 | CentOS6.3 | eth0:192.168.6.3 gw:192.168.6.1 Apache2.2.x |
MasterDBServer | 主数据库服务器 | CentOS6.3 | eth0:192.168.6.100 MySQL5.5.40 |
SlowDBServer | 从数据库服务器 | CentOS6.3 | eth0:192.168.6.101 MySQL5.5.40 |
说明:为了加快实验速度,这里先装了一台母本CentOS6.3的服务器,复制出5台出来,再根据需要对服务器进行修改。
环境测试
创建好虚拟机后,需要对环境进行测试
首先是网络测试,所有的服务器都是处在同一个网段,子网为255.255.255.0,这时只要让所有的服务器互ping能够ping通,则表示网络是没问题的。
接下来是检查两台WebServer的Apache是否正常启动,能否正确访问,通过
ps–e | grep httpd
这条命令检查httpd服务是否开启,再通过
wget http://localhost/index.html
检查服务器是否能够正常访问,为了后面能看出不同的结果,在两台服务器的index.html内容进行修改,分别改为server1和server2。
再接着是判断两台DBServer是否能够正常使用,通过
ps–e | grep mysqld
判断mysql服务是否开启,再用
/usr/local/mysql/bin/mysql–uroot –p123456
检查能否进行数据库。
最后检查LvsServer是否已配置Ipvsadm,输入ipv用tab键看能否补全,如果没有补全表示还没安装ipvsadm,这时可通过yum安装ipvsadm,命令为
yum–y install ipvsadm
配置Lvs Nat轮循,实现负载均衡
想要使用Nat轮循功能,就要将LvsServer作为路由使用,需要开启路由转发功能:
vi/etc/sysctl.conf
在最后增加一行(1开启,0关闭)
net.ipv4.ip_forward= 1
写入后重新加载
sysctl–p
然后写个shell来启动ipvsadm
viipvs.sh
#!/bin/bash
#ipvs.sh
ipvsadm –C
ipvsadm –At 192.168.0.232:80 –s rr
ipvsadm –at 192.168.0.232:80 –r192.168.6.2:80 –m
ipvsadm –at 192.168.0.232:80 –r192.168.6.3:80 –m
ipvsadm –L –n
写完之后添加权限,然后执行
chmoda+x ipvs.sh
shipvs.sh
这时,用真机浏览器访问192.168.0.232/index.html,刷新就可以看到两个不同的结果,server1和server2。
至此,一个具有负载均衡系统已经完成。
配置MySQL主从复制
MySQL主从复制是实现读写分离的关键,主数据库用于增删改操作,从数据库用于读操作。考虑到增删改的事务功能和读取的快捷,这里主数据库使用InnoDB引擎,从数据库使用MyISAM引擎。考虑到最近还学了分区技术,所以这里也用一下MySQL的分区技术。
首先在两台数据库服务器上创建数据库lyb
create databaselyb;
create table ly(
id int not null primary keyauto_increment,
dt datetime not null,
content varchar(300) not null default''
) engine=innodb(注意在SlowDBServer上要改成myisam) defaultcharset=utf8
partition byrange(MOD(id,10))(
partition p0 values less than (0),
partition p1 values less than (1),
partition p2 values less than (2),
partition p3 values less than (3),
partition p4 values less than (4),
partition p5 values less than (5),
partition p6 values less than (6),
partition p7 values less than (7),
partition p8 values less than (8),
partition p9 values less than (9),
partition p10 values less than maxvalue
);
MasterDBServer设置
在MasterDBServer使用grant添加一个可以从SlowDBServer登录到MasterDBServer的用户
grant all onlyb.* to lyb@192.168.6.101 identified by‘123456’;
lyb.* 是指授权lby数据库下的所有表
lyb@192.168.6.101 是指授权lyb用户可以从主机192.168.6.101登录
identified by ‘123456’是指登录密码
然后在SlowDBServer测试 mysql –ulyb–p123456 –h192.168.6.100看下能否登录
配置MasterDBServer下的MySQL配置文件
vi /etc/my.cnf
找到server-id,改为1(只要跟SlowDBServer不相同即可)
SlowDBServer设置
修改配置文件/etc/my.cnf中的server-id=2(只要不跟MasterDBServer相同即可)
进入数据库,输入
change master tomaster_host='192.168.6.100', master_user='lyb', master_password='123456';
slave start;
完成主从配置,查看配置结果
show slavestatus\G;
如果看到
Slave_IO_Running:yes
Slave_SQL_Running:yes
表示已经与MasterDBServer同步。
这时可以测试,在MasterDBServer插入一条记录,再从SlowDBServer查询,可以看到从MasterDBServer插入的记录,表示已经实现主从复制。
实现简单留言板实现读写分离
这里没有什么技术难点,只是根据操作的内容选择不同数据库而已,这里就不细说了,网上也有很多读写分离的实例可以参考。