1. 整体结构图
2.安装标准LAMP
## MySQl ##
$ yum -y update #更新内核
$ yum -y install mysql mysql-server #安装MySQL
$ chkconfig –levels 235 mysqld on #自启动
$ /etc/init.d/mysqld start
$ mysqladmin -u root password “123456” #默认密码
## Nginx ##
$ yum -y install nginx #安装nginx
$ chkconfig –levels 235 nginx on #自启动
$ /etc/init.d/nginx start #启动
## PHP&PHP-fpm
$ yum -y install yum install php php-fpm #安装
$ echo “/etc/init.d/php-fpm start” >>/etc/rc.local #自启动
$ /etc/init.d/php-fpm start
$ yum -y install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-curl php-mbstring
$ /etc/init.d/php-fpm restart
$ /etc/init.d/nginx restart
## 配置文件 ##
$ mkdir /var/www #如果目录不存在
$ echo “<?php phpinfo();?>” >> /var/www/index.php
$ vim /etc/nginx/conf.d/default.conf
——————————————–
listen 80;
server_name 198.11.176.190;
location / {
root /var/www;
index index.php index.html index.htm;
}
…………………………………
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
——————————————–
$ /etc/init.d/nginx restart
查看 http://198.11.176.190/
## PHPmyadmin ##
$ cd /var/www/
$ wget http://autocron.sinaapp.com/php/phpmyadmin.zip
$ unzip phpmyadmin.zip
$ rm -f phpmyadmin.zip
$ chmod -R 755 phpmyadmim
查看 http://198.11.176.190/phpmyadmin/
3.安装SVN
$ yum -y install subversion mod_dav_svn mod_auth_mysql
$ echo “svnserve -d -r /opt/svn ” >> /etc/rc.local
## 创建代码库 ##
$ mkdir -p /opt/svn
$ svnserve -d -r /opt/svn
$ svnadmin create /opt/svn/docker
$ chmod -R 777 /opt/svn/docker
$ cd /opt/svn/docker/conf
## 用户密码passwd配置 ##
$ vi + passwd
——————————————–
[users]
# harry = harryssecret
# sally = sallyssecret
phpbin=abc123
——————————————–
权限控制authz配置:
$ vi + authz
——————————————–
#设置[/]代表根目录下所有的资源
[/]
phpbin=rw
——————————————-
## 服务svnserve.conf配置 ##
$ vi + svnserve.conf
——————————————-
[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db=passwd
#访问控制文件
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
#realm=/opt/svn/chepiao
——————————————–
测试更新:svn://198.11.176.190/docker
## 配置网站目录 ##
$ mkdir -p /var/www/docker
$ chmod -R 777 /var/www/docker
## 实现SVN与WEB同步 ##
$ svn co svn://198.11.176.190/docker /var/www/docker –username phpbin –password abc123
$ chown -R apache:apache /var/www/docker #修改权限为WEB用户#
## 建立同步脚本 ##
$ cd /opt/svn/docker/hooks
$ cp post-commit.tmpl post-commit
$ vi + post-commit
———————————————–
$ export LANG=zh_CN.UTF-8
$ CURDATE=`date`
$ SVN=/usr/bin/svn
$ WEB=/var/www/docker/
$ LOG=/opt/svn/docker/hooks/codedeploy.log
$ echo “Code Deployed By at $CURDATE” >> $LOG
$ $SVN update $WEB –username phpbin –password abc123 >> $LOG
$ echo “” >> $LOG
$ chown -R apache:apache $WEB
————————————————
$ chmod a+x post-commit #增加脚本执行权限
# 测试同步成功,新增加一个index.php测试页
## 备用服务 ##
$ cd /etc/nginx/conf.d/
$ cp default.conf 198.11.176.190:23110.conf
$ vim 198.11.176.190:23110.conf
——————————————–
listen 23110;
server_name 198.11.176.190;
location / {
root /var/docker;
index index.php index.html index.htm;
}
…………………………………
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/docker$fastcgi_script_name;
include fastcgi_params;
}
——————————————–
$ /etc/init.d/nginx restart
浏览:http://docker.chepiao100.com/ 测试成功
5.安装Docker
## CentOS6中 ##
$ yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
$ yum install docker-io
## 启动 ##
$ service docker start
$ chkconfig docker on
## 获取镜像 ##
$ mkdir /docker
$ cd /docker
$ wget http://120.25.148.68/centos-php5.4.tar
$ docker load < centos-php5.4.tar # 载入镜像
$ docker images # 查看镜像
## 新增容器 ##
## 使用三个容器 端口从23111开始
## ===========================================================##
$ docker run –name docker_1 -d -i -p 23111:80 -v /var/www/docker:/var/www/html centos:php5.4 /etc/rc.local
$ docker run –name docker_2 -d -i -p 23112:80 -v /var/www/docker:/var/www/html centos:php5.4 /etc/rc.local
$ docker run –name docker_3 -d -i -p 23113:80 -v /var/www/docker:/var/www/html centos:php5.4 /etc/rc.local
##=============================================================##
$ docker ps -a # 查看运行的容器
测试1:http://198.11.176.190:23111
测试2:http://198.11.176.190:23112
测试3:http://198.11.176.190:23113
6.绑定域名+负载均衡
$ cd /etc/nginx/conf.d/
$ cp default.conf docker.chepiao100.com.conf
$ vim docker.chepiao100.com.conf
———————————————
http{
upstream docker.chepiao100.com {
#ip_hash;
server 198.11.176.190:23111;
server 198.11.176.190:23112;
server 198.11.176.190:23113;
server 198.11.176.190:23110 backup;
}
server {
listen 80;
server_name docker.chepiao100.com;
location / {
proxy_pass http://docker.chepiao100.com
}
}
———————————————
$ /etc/init.d/nginx restart
浏览:http://docker.chepiao100.com/ 测试成功
6. 路由策略
那我们看看Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
参考文档:
1.http://www.phpbin.cn/archives/420
2.http://www.phpbin.cn/archives/600
3.http://www.phpbin.cn/archives/605
4.http://www.phpbin.cn/archives/607
5.http://www.cnblogs.com/mecity/archive/2011/06/20/2085529.html