nginx负载均衡配置两个不同服务器tomcat集群操控读写分离mysql数据库以解决高并发问题
分类: Java 标签: nginx配tomcat集群 tomcat集群 mysql主主复制 高并发高可用
2021-01-01 16:15:30 897浏览
nginx负载均衡配置两个不同服务器tomcat集群操控读写分离mysql数据库以解决高并发问题
背景:给深圳的一个初中学校开发了一个学生评教系统,这个学院有2000多学生,项目开发完后上线是在一个1核2G的服务器上(当时觉得反正用户也不多,按理说这配置虽然低但跑个小项目还是没问题的)。结果在评教正式开始的那天出问题了(tomcat服务器时不时就偷停了,另一块就是全校学生同时登陆的时候很卡很卡,导致用户体验很不好,而且由于tomcat暂停那会还出现了错误数据很是头疼)
解决方案思考:其实最简单的方法就是换一个配置高一点的服务器,但这个成本好高,我给人开发的这个项目也就挣了1500的服务费(出租的形式),暂时还不想花大价钱买贵的服务器。所以这个方案就pass了。所以思来想去要不再买个1核2G的服务器搭建一个集群试试。这里打个比方,用一个破自行车拉一定重量的货物拉不动或者很吃力的情况下,要是换成拖拉机肯定能拉得动,但买拖拉机太贵了而且可能还大材小用了,那我再买个破自行车应该是性价比最高的了。
闲话少说直接开始讲解决过程:
1、两个服务器上分别安装好tomcat服务器,并把项目代码上传到服务器然后启动tomcat。先保证两个服务器上的tomcat都能访问项目。因为并发不只是tomcat并发的问题其实最主要的是数据库并发的问题。(多个学生并发登录的时候都是多个ip请求数据库查询导致的,如果我们用两个数据库分担一下压力,一半的学生访问Atomcat上的A数据库。另一半的学生访问Btomcat上的B数据库。然后让这两个数据库的数据保持一致不就ok了嘛)
2、修改项目jar包(源码是用springboot框架开发的)数据库jdbc配置文件,Atomcat配置A服务器上的数据库,Btomcat配置B服务器上的数据库。并把A数据库和B数据库实现主主复制就行了。
①配置文件
--A服务器的mysql数据库配置文件vi /etc/my.cnf
server-id=11 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin #开启二进制日志
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog-ignore=mysql #忽略mysql库【我一般都不写】
binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
replicate-do-db=aa #要同步的数据库,默认所有库
--B服务器的mysql数据库配置文件vi /etc/my.cnf
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=aa
配置好后重启MySQL
② 开始构建主主复制
第一步:在B中创建一个A主机中可以登录的MySQL用户
用户:mysql11
密码:mysql11
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql11’@’A主机ip’ IDENTIFIED BY ‘mysql11’;
mysql>FLUSH PRIVILEGES;
第二步:在B主机mysql查看二进制日志名和位置
mysql>show master status;
第三步: 告知二进制文件名与位置
在A主机中执行:
mysql>CHANGE MASTER TO
MASTER_HOST=’B主机ip’,
MASTER_USER=’mysql11’,
MASTER_PASSWORD=’mysql11’,
MASTER_LOG_FILE=’mysql-bin.000084’,
MASTER_LOG_POS=107;
第四步:分别开启start slave
mysql>SHOW SLAVE STATUS\G #查看是否配置成功
当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常
最后你可以新建表插入数据测试下看能不能实现两个数据库同步
3、配置nginx负载均衡分配两tomcat
nginx默人的链接数是1024,这里改成5000
events {
worker_connections 5000;
}
启动nginx就可以了。
4、jmeter测试并发
总结:采用这种集群处理后,一是将并发负载均衡到两台服务器上,即使一个服务器宕机了,学生仍然能继续登录评教。采用mysql主主复制也是一样的道理,可以高可用,即使一个数据库出问题另一个数据库照样能工作。
有什么疑问可以联系我q1913284695交流。
解决方案思考:其实最简单的方法就是换一个配置高一点的服务器,但这个成本好高,我给人开发的这个项目也就挣了1500的服务费(出租的形式),暂时还不想花大价钱买贵的服务器。所以这个方案就pass了。所以思来想去要不再买个1核2G的服务器搭建一个集群试试。这里打个比方,用一个破自行车拉一定重量的货物拉不动或者很吃力的情况下,要是换成拖拉机肯定能拉得动,但买拖拉机太贵了而且可能还大材小用了,那我再买个破自行车应该是性价比最高的了。
闲话少说直接开始讲解决过程:
1、两个服务器上分别安装好tomcat服务器,并把项目代码上传到服务器然后启动tomcat。先保证两个服务器上的tomcat都能访问项目。因为并发不只是tomcat并发的问题其实最主要的是数据库并发的问题。(多个学生并发登录的时候都是多个ip请求数据库查询导致的,如果我们用两个数据库分担一下压力,一半的学生访问Atomcat上的A数据库。另一半的学生访问Btomcat上的B数据库。然后让这两个数据库的数据保持一致不就ok了嘛)
2、修改项目jar包(源码是用springboot框架开发的)数据库jdbc配置文件,Atomcat配置A服务器上的数据库,Btomcat配置B服务器上的数据库。并把A数据库和B数据库实现主主复制就行了。
①配置文件
--A服务器的mysql数据库配置文件vi /etc/my.cnf
server-id=11 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin #开启二进制日志
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog-ignore=mysql #忽略mysql库【我一般都不写】
binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
replicate-do-db=aa #要同步的数据库,默认所有库
--B服务器的mysql数据库配置文件vi /etc/my.cnf
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=aa
配置好后重启MySQL
② 开始构建主主复制
第一步:在B中创建一个A主机中可以登录的MySQL用户
用户:mysql11
密码:mysql11
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql11’@’A主机ip’ IDENTIFIED BY ‘mysql11’;
mysql>FLUSH PRIVILEGES;
第二步:在B主机mysql查看二进制日志名和位置
mysql>show master status;
第三步: 告知二进制文件名与位置
在A主机中执行:
mysql>CHANGE MASTER TO
MASTER_HOST=’B主机ip’,
MASTER_USER=’mysql11’,
MASTER_PASSWORD=’mysql11’,
MASTER_LOG_FILE=’mysql-bin.000084’,
MASTER_LOG_POS=107;
第四步:分别开启start slave
mysql>SHOW SLAVE STATUS\G #查看是否配置成功
当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常
最后你可以新建表插入数据测试下看能不能实现两个数据库同步
3、配置nginx负载均衡分配两tomcat
nginx默人的链接数是1024,这里改成5000
events {
worker_connections 5000;
}
启动nginx就可以了。
4、jmeter测试并发
总结:采用这种集群处理后,一是将并发负载均衡到两台服务器上,即使一个服务器宕机了,学生仍然能继续登录评教。采用mysql主主复制也是一样的道理,可以高可用,即使一个数据库出问题另一个数据库照样能工作。
有什么疑问可以联系我q1913284695交流。
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
暂无评论,快来写一下吧
展开评论
他的专栏
他感兴趣的技术