在《如何应对服务器压力?服务器横向扩展(加机【作者:唐霜】著作权归作者所有,禁止商业用途转载。器)策略详谈》一文中,我提出了几套加机器的方案,其中著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】加服务器的第一个方案就是将数据库和程序执【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。行的服务器分开,一台服务器跑数据库,一台【作者:唐霜】【本文首发于唐霜的博客】服务器跑程序代码。而现在,我就要实践这个未经授权,禁止复制转载。【原创不易,请尊重版权】操作。
转载请注明出处:www.tangshua【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.netng.net原创内容,盗版必究。【版权所有】唐霜 www.tangshu本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】ang.net首先,我们来分离网站程序和mysql数据【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】库。
本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。现在,另一台同网段(局域网内)的服务器已【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net经买好了,mysql也在新的服务器上面安【转载请注明来源】本文作者:唐霜,转载请注明出处。装好。接下来,我们需要做三个步骤:
【版权所有】唐霜 www.tangshu未经授权,禁止复制转载。【本文首发于唐霜的博客】ang.net【作者:唐霜】【访问 www.tangshuang.n本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】et 获取更多精彩内容】【作者:唐霜】- 允许从其他机器上面访问这个mysql 【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshu本文版权归作者所有,未经授权不得转载。【作者:唐霜】ang.net本文作者:唐霜,转载请注明出处。
- 开放防火墙的端口 原创内容,盗版必究。【关注微信公众号:wwwtangshua转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。ngnet】【访问 www.tangshuang.n本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】et 获取更多精彩内容】
- 程序连接到新的mysql数据库 【作者:唐霜】本文作者:唐霜,转载请注明出处。
第一个步骤。我们要考虑到一个事实,即我们著作权归作者所有,禁止商业用途转载。【本文受版权保护】仅允许从原来的程序执行服务器访问新的my【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】sql服务器,而且为了安全起见,我们最好未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。新建一个mysql用户,这个用户不同于r转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。oot,它只能进行增删改查的基本操作,而【作者:唐霜】转载请注明出处:www.tangshuang.net不能拥有管理权限,而且,这个用户只能从原【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】来的服务器连接过来。我们假设程序端服务器本文作者:唐霜,转载请注明出处。【转载请注明来源】IP为192.168.1.24(A),而转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。新搭建的mysql服务器IP为192.1未经授权,禁止复制转载。【版权所有,侵权必究】68.24.111(B)。接下来我们要在本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。B上进行操作。
未经授权,禁止复制转载。【本文受版权保护】创建这样的用户有两种方法,一种是通过ph【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】pmyadmin来操作,如果你使用过ph【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。pmyadmin,应该知道有一个新建用户【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。的功能,在这个功能中新建一个用户,创建新本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net的用户名密码等,授予合适的权限,其中关键【本文受版权保护】【版权所有】唐霜 www.tangshuang.net的一点是,在该用户的域一栏中,要填写A服【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。务器的IP地址,也就是192.168.1【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】.24。然后点击创建。
转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】ng.net转载请注明出处:www.tangshua著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netng.net但是如果B仅仅安装了mysql,而没有安【本文首发于唐霜的博客】原创内容,盗版必究。装服务器环境和php,phpmyadmi【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】n是无法运行起来的,所以还有一种方法是通本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。过mysql命令行来创建新用户:
转载请注明出处:www.tangshua【原创不易,请尊重版权】【本文首发于唐霜的博客】ng.net【版权所有,侵权必究】【版权所有,侵权必究】【关注微信公众号:wwwtangshua未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。ngnet】GRANT ALL PRIVILEGES ON *.* TO 'newusername'@'192.168.1.24' IDENTIFIED BY 'newuserpassword' WITH GRANT OPTION;
这样就创建了一个可以从192.168.1本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】.24登陆B的新用户,A将通过这个用户与【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net数据库连接。
转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】ng.net【本文首发于唐霜的博客】未经授权,禁止复制转载。第二个步骤。一般服务器都会通过防火墙来控【本文受版权保护】原创内容,盗版必究。制必要的一些访问,防止出现大规模的攻击。【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】centos一般采用iptables防火未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。墙,配置起来比较简单。为了简洁快速的打开本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】端口,让A能够连接到B的mysql,我们【作者:唐霜】【关注微信公众号:wwwtangshuangnet】执行下面的操作:
转载请注明出处:www.tangshua【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。ng.net【原创不易,请尊重版权】【本文首发于唐霜的博客】vi /etc/sysconfig/iptables
在规则列表中新增一行规则:
本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.n本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】et 获取更多精彩内容】【关注微信公众号:wwwtangshua原创内容,盗版必究。本文作者:唐霜,转载请注明出处。ngnet】-A INPUT -s 192.168.1.24 -p tcp -m tcp --dport 3306 -j ACCEPT
添加上面这条规则之后,来自A服务器的访问【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。如果请求3306端口,就会放行了。
【作者:唐霜】【转载请注明来源】【作者:唐霜】第三个步骤。修改你的PHP程序,把数据库【未经授权禁止转载】转载请注明出处:www.tangshuang.net连接信息改为B服务器和刚才创建的用户信息原创内容,盗版必究。本文作者:唐霜,转载请注明出处。。
著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。至此,MySQL的分离工作已经完成了。
本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshua转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.netngnet】【访问 www.tangshuang.n未经授权,禁止复制转载。【作者:唐霜】et 获取更多精彩内容】接下来,我们来分离Redis。
转载请注明出处:www.tangshua【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.netng.net【原创不易,请尊重版权】Redis的分离和mysql的分离有一样本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】逻辑,也是修改B上面的Redis配置,打【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。开防火墙端口,修改A上的连接程序。
转载请注明出处:www.tangshua【本文受版权保护】转载请注明出处:www.tangshuang.netng.net著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】ng.net第一个步骤。我们在B上面安装上了Redi【原创内容,转载请注明出处】【未经授权禁止转载】s,但我们需要修改Redis的配置文件。
未经授权,禁止复制转载。【作者:唐霜】【版权所有,侵权必究】vi /etc/redis.conf
找到bind 120.0.0.1,将这一未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net行改为
【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshu【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。ang.net著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。bind 192.168.24.111
你可能已经注意到了,这个IP是B服务器的转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。内网IP,这个和mysql那个新建用户的【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】域不同,mysql要填写A服务器的IP,【原创不易,请尊重版权】【本文首发于唐霜的博客】而Redis要绑定B服务器的IP。
转载请注明出处:www.tangshua【本文首发于唐霜的博客】【原创不易,请尊重版权】ng.net本文作者:唐霜,转载请注明出处。如果在没有防火墙的情况下,经过这个修改,【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】局域网内的所有服务器都可以连接到B,使用【未经授权禁止转载】【作者:唐霜】B的Redis(不过我们有防火墙)。为了【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】避免这种情况,我们给redis增加密码,【本文受版权保护】本文版权归作者所有,未经授权不得转载。连接进行数据操作的时候,必须要进行密码验【原创不易,请尊重版权】【原创不易,请尊重版权】证,继续在配置文件中找到requirep【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】ass这一行,默认情况下,这一行是注释掉【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net的,我们删除最前面的#,打开注释,并写入【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】自己的新密码:
【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。requirepass sfdf9sd8f09das87f89ds7af9
OK,完成redis的配置。但是mysq【转载请注明来源】【版权所有,侵权必究】l在新增用户后不用重启,redis更改配本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】置后却需要重启服务器才能使配置生效。
原创内容,盗版必究。【本文受版权保护】service redis restart
第二个步骤。还记得上面是怎么打开mysq转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】l的防火墙端口的吗?我们用同样的方法,在转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netiptables中增加:
【关注微信公众号:wwwtangshua【本文受版权保护】本文作者:唐霜,转载请注明出处。ngnet】未经授权,禁止复制转载。原创内容,盗版必究。【作者:唐霜】-A INPUT -s 192.168.1.24 -p tcp -m tcp --dport 6379 -j ACCEPT
6379就是redis的默认端口,现在,本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】在A服务器上面已经可以连接B上的redi【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。s了。
【版权所有】唐霜 www.tangshu本文作者:唐霜,转载请注明出处。【作者:唐霜】ang.net转载请注明出处:www.tangshua【本文受版权保护】【未经授权禁止转载】ng.net第三个步骤。在A上通过phpredis连【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】接B上的redis,需要提供密码了。在进【版权所有,侵权必究】【版权所有,侵权必究】行所有数据交互前,执行如下连接操作:
原创内容,盗版必究。未经授权,禁止复制转载。【版权所有,侵权必究】$Redis = new Redis;
$Redis->connect('192.168.24.111',6379);
$Redis->auth('sfdf9sd8f09das87f89ds7af9');
这样,就完成了程序和Redis的分离。据【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】说局域网内redis的吞吐能够达到150【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。w条的数据量,赶紧体验一下网站的速度吧。
【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。【作者:唐霜】等一下,我们还可以做一些收尾工作,把B服【版权所有,侵权必究】转载请注明出处:www.tangshuang.net务器上面的除了mysql和redis之外【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】的其他服务停止,比如httpd、ngin【原创内容,转载请注明出处】原创内容,盗版必究。x之类的,把它们停到,这样B就成为纯粹提著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】供数据服务的内部服务器了,再你需要进行调未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net试,或特殊情况下,又可以打开httpd,著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。用phpmyadmin来查看修改数据库。转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net而在A服务器上,把之前使用的mysqld【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net服务和redis服务停掉吧,虽然不会再有【原创内容,转载请注明出处】【原创不易,请尊重版权】程序去连接它们,但是,它们一直再运行,也【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。会消耗少量的资源。记得随时备份B上面的数【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】据,最好做一个同步,将B上的数据同步到A本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】上,如果哪一天B突然发生意外,可以临时开本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】启A上的数据库服务,挽救一下,起码让网站转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。的正常访问。
【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。2015-11-29 15406


