负载均衡
转发用户的请求到后端服务器【平均分配:轮询】
硬件:性能好,稳定,价格昂贵
软件: 性能还行,稳定也还行,免费
一般网站都用软件
lvs: [已经集成到linux2.6及内核]
hapoxy: 工作在第四层
nginx[负载均衡服务器,web服务器,。。。] 工作在7层,只能做网站http协议的负载均衡
mysql : 主从复制,读写分离 【当向主主服务器操作数据时,同样的数据会被自动复制到从服务器,就像一个镜像】
php把上传的图片存到服务器->图片服务器[图片共享]->用一个二级域名
解决session丢失的问题
session共享[session入库 或者 session存到memcached]
反向代理服务器:用户请求数据时先在本地查找缓存的页面,如果没有就到后端服务器请求数据,然后缓存,下次可以直接使用。
【缓存时间和要缓存的页面 也都可以自己设置】
穿透:网站中有些页面不能缓存【购物车,搜索页面】,那么可以配置成穿透的行为直接访问
软件:
squid: 缓存到硬盘上
varnish[*]: 把数据缓存到内存中
--------------------
高可用【hign availiablity】:没有单点故障:集群中任何一台服务器出现故障,整个系统依然能对外服务。【备份一个负载均衡服务器就可以了】
软件:hearbeat
keepalived
--------------------
CDN:内容分发网络,全世界各地搭建数据节点,只适合静态页面!
建议:不要自己搭建,维护成本比较高。
----------------------
搭建自己的集群
nginx 负载均衡-》nginx+php(两个) ->mysql主 从(两个)
1 使用虚拟机克隆四个服务器
centos5.5-》右键-》管理-》克隆-》点到 创建完整克隆(起个名字)-》完成
负载均衡
WEB1:
WEB2:
MYSQL 主:
MYSQL 从:
2 搭建mysql 的主从服务器
2.1 主服务器
修改配置文件 开启bin日志
vim /etc/my.cnf
#log-bin=mysql-bin //把注释去掉
server-id =1
创建一个用来实现主从复制的账号
进入mysql: grant replication slave on *.* to 'slave'@'%' identified by '1234';
replication slave: 分配给这个账号的限制
*.*可以操作的数据库
slave : 账号用户名
1234:密码
-------------
查看主服务器上bin日志上的状态:[这两个参数在配置从服务器时要使用]
show master status:
file position
mysql-bin.00006 248
2.2 p配置从服务器
修改配置文件,开启bin日志,把ID设置成和主不一样的server-id就行
重启mysql 从服务器
service mysqlid restart
登录从服务器的mysql 并设置主服务器:
change master to mast_host='主服务器的ip',master_user='用户名',msater_password="密码",master_log_file="mysql-bin.0006",master_log_pos=248;
在从服务器上启动主从复制的功能:
start slave; 配置完毕
查看是否启动成功:
show slave status;
最后两个是yes 就表示成功了
-----------------
程序上实现读写分离
--------
TP 框架自带主从复制的功能,只需修改配置文件即可:
tp 手册-》模型-》分布式数据库支持
还要加上:'DB_RW_SEPARATE'=>true , // 表示支持读写分离
--------------
启动两台WEB服务器上的NGINX PHP:[两个分别一起启动]
service nginx start;
/usr/local/php/sbin/php-fpm &;
配置两台服务器的允许两台php服务器来连接【mysql数据库默认只允许当前同一个服务器的程序连接】:
先修改主服务器的mysql;
use mysql;
select host,user,password from user;
查看host,修改成%允许所有IP连接即可:
update user set host='%'; //最好设置能IP局域网段
然后刷新数据库
flush privileges;
最后修改从服务器的 user,host;同上
--------------------
配置负载均衡服务器
修改nginx 的配置文件
vim /usr/local/nginx/conf/nginx.conf;
在 http 大括号里写
http {
upstream web{
server 192.168.**.** weight= 1 ; //weight 可以不写,
server 192.168.**.** weight= 1; //1:1
...
...
}
//把之前的配置改成下面的
server {
listen 80;
server_name 192.168.**.**; //自己的网站的IP
location / {
proxy_pass http://web; //web 是上面定义的web
}
}
}
只用一个server就可以了
/us/local/nginx/sbin/nginx -t //检查配置文件改的对不对
ok,successful 表示修改正确
启动nginx:
service nginx start
到此完成!
-----------------------------
session 入库
TP自带这个功能:
先在mysql的主服务器上创建一个session表
D:serverapachehtdocsThinkPHPLibraryThinkSessionDriver
* 数据库方式Session驱动
* CREATE TABLE think_session (
* session_id varchar(255) NOT NULL,
* session_expire int(11) NOT NULL,
* session_data blob,
* UNIQUE KEY `session_id` (`session_id`)
* );
先创建表,修改表前缀:
复制数据库里的表的语句:
create table .表名.. like ..表名...;
删除表
drop table ...表名;
--------------
2 修改程序的配置文件
vim./Application/Commont/Conf/config.php
加一句:
return array(
'SESSION_TYPE' =>'Db',
)
两个WEB都修改一下。