您的位置:首页 > 运维架构 > 网站架构

网站搭建项目一

2013-06-12 22:16 211 查看


1.搭建mysql proxy,实现读写分离

mysql proxy - lua script

mysql proxy 不应该在生产环境中使用

1)

mysql-master server(vm1)端:

yum -y install mysql-server mysql-connector-odbc // 不用装mysql mysql-devel

/etc/init.d/mysqld start

mysqladimin -u root -p redhat

mysql -uroot -predhat

vim /etc/my.cnf

修改server_id = 1

log_bin = master_log

/etc/init.d/mysqld restart

mysqldump --all-database > /tmp/mysql-master.sql

mysql > show mater status; //记录log position,假设master_log_file="xx1.000001",master_log_pos=106;

mysql > grant replication slave on *.* to slave@'vm2.ip' //从ip地址

mysql > grant replication slave on *.* to slave@'vm3.ip'

mysql > flush privileges;

scp /tmp/mysql-master.sql [vm2.ip]:/tmp/ //可以通过 mysqldump --all-databases | ssh vm2.ip "mysql" 直接同步到其他机器

scp /tmp/mysql-master.sql [vm3.ip]:/tmp/

--->转 2)配置 vm2 可以同步mysql-master

<--- 接3)授权给 proxy //这边仅作测试,测试完后可以删除掉 drop user test@'host2.ip'

mysql -uroot -predhat

mysql > grant all privileges on *.* to test@'host2.ip' identified by 'redhat' //host2 = proxy server

mysql > flush privileges;

<---接12)-----tomcat ejforum授权------- tomcat server上可以使用mysqlproxy地址进行连接

mysql

> create database javatest;

mysql javatest < ejforum-2.3/install/script/easyjforum_mysql.sql //nfs上挂载的东西,见12

GRANT ALL PRIVILEGES ON javatest.* TO shan3@'host2.ip' IDENTIFIED BY 'redhat' WITH GRANT OPTION; //mysqlproxy可以使用shan3用户来使用javatest数据库,当其他client需要访问javatest数据库时,只需用授予proxy的用户名和密码登录访问proxy
server即可,不需直接访问真正的mysql server。

flush privileges;

//这边的discuz授权也是在这里授权

2)

mysql-slave server端(vm2):

yum -y install mysql-server mysql-connector-odbc

vim /etc/my.cnf

加入 server_id=2 //不然slave start 会报错

/etc/init.d/mysql start

mysqladmin -u root -p redhat

mysql < /tmp/mysql-master.sql

mysql -uroot -predhat

mysql > change master to master_host='vm1.ip',master_user='root',master_password='redhat',master_log_file="xx1.000001",master_log_pos=106;

mysql > slave start;

mysql > show slave status\G; //检查

---> 转 3) 配置 vm3 也可以同步到maysql-master

3)

mysql-slave server端(vm3):clone 3)就好

yum -y install mysql-server mysql-connector-odbc

vim /etc/my.cnf

加入 server_id=3 //不然slave start 会报错

/etc/init.d/mysql start

mysqladmin -u root -p redhat

mysql < /tmp/mysql-master.sql

mysql -uroot -predhat

mysql > change master to master_host='vm1.ip',master_user='root',master_password='redhat',master_log_file="xx1.000001",master_log_pos=106;

mysql > slave start;

mysql > show slave status\G; //检查

自己在vm1上写入数据,进一步检查是否AB同步?

---> 转4)

4)

mysql-proxy server端(真机2-host2):

yum -y install mysql-proxy

(需将mysql-proxy rpm包加入到yum 源中去)

cd /usr/src/mysql-proxy/

rpm -ivh mysql-proxy-0.8.1-1.el6.x86_64.rpm //建议用yum安装方便

//实现读写分离

rpm -ql mysql-proxy | grep lua | grep rw //我们查询下该版即0.8.1是否有lua,没有的话我们从0.8.3中取

cd /usr/src/mysql-proxy

tar xf mysql-proxy-0.8.3.tar.gz

ls mysql-prxoy-0.8.3/lib/ | grep rw

cp mysql-prxoy-0.8.3/lib/rw-splitting.lua /usr/share/lua/5.1

vi /etc/sysconfig/mysql-proxy //可以定义proxy后端的server ip地址

『注释掉前面几行,只留最后一行 proxy的启动参数 』

『-b vm1.ip:3306 -r vm2.ip:3306 -r vm3.ip -s /usr/share/lua/5.1/rw-splitting.lua』 //添加读写分离

service mysql-proxy start

//现在再做一次负载测试,读写分离实现

---> 转1)让master授权该mysql-proxy

5)客户端登录测试(192.168.0.X)

yum -y install mysql

mysql -utest -predhat -h'host2.ip' // -p4040 客户端登录时加默认端口 ,host2=proxy server (-p 4040? 在授权中指定么)

//这边的授权用户自己改动

---> 6)

2.网站搭建配置

6)dns server (真机2 - host2)

yum -y intall bind bind-chroot

配置www.jsp.comwww.php.com 2个域名解析 指向host1.ip() //注意named权限问题

--->7)

7)nginx server(真机1-host1)

cd /usr/src/iterms/nginx

rpm -ivh nginx-1.2.7-1.el6.ngx.x86_64.rpm

数据目录:/usr/share/nginx/

默认网站页面目录: /usr/share/nginx/html/

vim /etc/nginx/nginx.conf

#gzip on;

upstream cgi_pool {

server vm1:9000;

server vm2:9000;

}

upstream jsp_pool {

ip_hash; //负载均衡

server vm1:8080;

server vm2:8080;

}

cd /etc/nginx/conf.d/ //配置文件

cp -a default.conf cgi.conf

vim cgi.conf

添加修改

server_name www.php.com;

root /usr/share/nginx/discuz;

index index.php index.html index.htm;

location ~ \.php$ {

# root /usr/share/nginx/php;

fastcgi_pass cgi_pool;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

cp -a default.conf jsp.conf

vim jsp.conf

添加修改

server_name www.jsp.com;

location / {

# root /usr/share/nginx/html;

# index index.html index.htm;

proxy_pass http://jsp_pool/;

proxy_redirect off;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $host;

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_4

04;

}

/etc/init.d/nginx restart

8)php server (vm1)

yum install php php-mysql

rpm -ivh spawn-fcgi-1.6.3-1.el6.x86_64.rpm

//建nginx用户,使其uid和gid跟前端一样,每台机器上相同的用户名建立相同的uid和gid 方便维护

//rpm --scripts -qp nginx/nginx-1.2.7-1. //在nginx server端查看建nginx用户的命令,可以同样建

useradd nginx ....

vim /etc/sysconfig/spaum-fcgi

//需要在编译的时候有加上 cgi-enable 才有/usr/bin/php-cgi //端口方式利于扩展 //

options="-u nginx -g nginx -p 9000 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi" //去掉监听网段,默认全网段

//数据挂载

mkdir /usr/share/ngix/discuz/ -p

chown nginx. /usr/share/naginx/discuz/

mount nfs.ip:/var/nfs/discuz/ /usr/share/nginx/discuz/ //可以vim /etc/fstab 永久挂载

启动cgi服务器

service spawn-fcgi start

netstat -ntalp | grep 9000;

//页面授权

9)php server (vm2)

copy 8)

10)tomcat server (wm3)

tar xf jdk-7u15-linux-x64.tar.gz

cp -r jdk1.7.0_15/ /usr/local/java //安装jdk

useradd tomcat

cd /home/tomcat

tar xf apache-tomcat-7.0.37.tar.gz -C /home/tomcat //可以放到var或home目录下

ln -s apache-tomcat-7.0.37 tomcat //可以方便后续切换不同版本

cd /home/tomcat/tomcat/

vim /home/tomcat/.bashrc



export JAVE_HOME=/usr/local/java



. /home/tomcat/.bashrc

./startup.sh //启动tomcat,这里可以测试下http://localhost:8080

-----------

创建服务脚本:

参照tomcat.pdf 中普通用户使用的创建 page4 ,注意修改其中的一些路径

chown -R tomcat. /home/tomcat/tomcat

/etc/init.d/tomcat restart

cp mysql-connector-java-5.1.23-bin.jar ~/tomcat/lib/ //将mysql的相关库copy过去

//网站根目录下

假设为 /home/tomcat/tomcat/ejforum/

mkdir -p /home/tomcat/tomcat/ejforum/ROOT/

chwon -R tomcat. /home/tomcat/tomcat/ejforum/ROOT/

ejforum的数据放在nfs server 上

mount host1.ip:/var/nfs/ejforum/ /home/tomcat/tomcat/ejforum/ROOT/ (可以通过vim /etc/fstab 永久挂载)

cd /home/tomcat/tomcat/

vim conf/server.xml

添加虚拟主机,在原来虚拟主机配置下添加

<Host name="www.jsp1.com" appBase="ejforum" //修改

unpackWARs="true" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log." suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

</Host>

如果需要其为默认虚拟主机,则要修改。。。参照pdf

定义数据库

vim ejforum/ROOT/WEB-INF/conf/config.xml

在database标签下修改

username="shan3" password="redhat"

url="jdbc:mysql://host2.ip:3306/javatest?" // host2= mysql proxy ,参见1)所给定义

/etc/init.d/tomcat restart

11)tomcat server (wm4)

与10)基本相同,只需修改 Host name="www.jsp2.com" //如不单独访问也可以不修改

12)nfs server(host1)

//discuz

tar xf discuz* -C /var/nfs/discuz/ //应该是upload文件夹

chmod -R nginx /var/nfs/discuz/

//ejforum

useradd tomcat -u uid -g uid -s /sbin/nologin //uid,gid 取自nginx端的tomcat id

unzip ejforum-2.3.zip

mv ejforum-2.3/ejforum/ /var/nfs/ //

chmod -R tomcat. /var/nfs/ejforum/

vim /etc/exports

/var/nfs 192.168.0.0/24(rw,async)

/etc/init.d/nfs start && chkconfig nfs on

---> 转到1)去授权

13)monitor server (host1)

使用ganglia软件包监视cpu,memory

//clone机器,修改ip,主机名;chkconfig ; setenforce;授权,flush privileges;chown;hosts;dns;port;

文中蓝色字体为后续修改,实验中出现很多细节问题,最终还碰到的问题,

1. php 网页出现 “no input file specified” ,查看 nginx server log : tail -f /var/log/nginx/error.log

会说index.php等网站根目录下的文件找不到。2种情况它指向的仍然是nginx server上的网站根目录,要么是cgi server上挂载到的根目录数据(从nfs处挂载到的)权限不够,

因为我们知道,nfs的默认挂载过来是nobody 所有者。

2.tomcat网站在上传附件时出现权限error,nfs问题。

3.如果客户端访问网站出现空白页,可以考虑是否安装了php-mysql等工具

4.再整个实验中,都将selinux设置为pemission,即 setenforce = 0

=====更新于7月16日=====

今天发现nfs共享出discuz,在访问http时会出现访问不到的问题,这里我们只能采用将discuz在本地完全搭建好之后,再进行数据的迁移,这样可以解决此问题

假设192.168.122.1 为nfs storage 、客户端和mysql端, 192.168.122.2 为http server

122.1机器:

mkdir /tmp/web_data //给定需要共享出web数据的目录

chown apache /tmp/web_data

vim /etc/exports

加入"/tmp/web_data 192.168.122.0/24(rw,async)"

/etc/init.d/nfs restart

=======

yum -y install mysql-server mysql-devel php php-mysql

/etc/init.d/mysql start

mysql

> grant all on *.* to 'root'@'%' identified by 'uplooking';

> flush privileges;

122.2:

unzip Discuz.zip

cp -r ./upload/* /var/www/html/

chown -r apache /var/www/html/

/etc/init.d/httpd start

122.1:

firefox

输入192.168.122.2 访问安装

数据库中 根据122.1上grant授权范围进行修改,安装成功之后,再次访问192.168.122.2 成功后

回到

122.2

mount 192.168.122.1:/tmp/web_data /mnt //临时挂载web_data目录,此时里面没有web数据

cd /var/www/html

tar cf - . | tar xf - -C /mnt //将当前已经安装完全的web数据迁移到web_data目录

umount /mnt //卸载临时点

rm -rf * //删除122.2 本地的web数据,我们最终要使用的是122.1上的web_data数据

mount 192.168.122.1:/tmp/web /var/www/html //挂载122.1上的web数据

再到122.1上进行访问
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: