本文主要是介绍mycat分布式+nginx负载均衡(含mysql、jdk、phpadmin、apache安装配置步骤)整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
88元购买云服务器
Mysql安装
. 解压MySQL压缩包
将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是:
"D:\Program Files\MySQL\mysql-5.6.13-win32"
将解压目录下默认文件 my-default.ini 拷贝一份,改名 my.ini
复制下面的配置信息到 my.ini 保存
#如果没有my-default.ini,可自己新建my.ini或者从其他地方中获取
#########################################################
[client]
port=3306
default-character-set=utf8
[mysqld]
port=3306
character_set_server=utf8
basedir=D:\Program Files\MySQL\mysql-5.6.13-win32
#解压目录
datadir=D:\Program Files\MySQL\mysql-5.6.13-win32\data
#解压目录下data目录
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[WinMySQLAdmin]
D:\Program Files\MySQL\mysql-5.6.13-win32\bin\mysqld.exe
#########################################################
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
3. 添加环境变量
操作如下:
1)右键单击我的电脑->属性->高级系统设置(高级)->环境变量
点击系统变量下的新建按钮
输入变量名:MYSQL_HOME
输入变量值:D:\Program Files\mysql-5.6.11-winx64
#即为mysql的自定义解压目录。
2)选择系统变量中的Path
点击编辑按钮
在变量值中添加变量值:%MYSQL_HOME%\bin
注意是在原有变量值后面加上这个变量,用;隔开,不能删除原来的变量值,
4. 将mysql注册为windows系统服务
1)从控制台进入到MySQL解压目录下的 bin 目录下:
2)输入服务安装命令:
mysqld install MySQL --defaults-file="D:\Program Files\MYSQL01\mysql-5.6.13-win32\my.ini"
mysqld install MySQL3 --defaults-file="D:\Program Files\MySQL03\my.ini"
#解压目录下修改的my.ini文件
安装成功后会提示服务安装成功。
#注:my.ini文件放在MySQL解压后的根目录下
#移除服务命令为:mysqld remove
5. 启动MySQL服务
方法一:
启动服务命令为:net start mysql
方法二:
打开管理工具 服务,找到MySQL服务。
通过右键选择启动或者直接点击左边的启动来启动服务。
6. 修改 root 账号的密码
刚安装完成时root账号默认密码为空,此时可以将密码修改为指定的密码。如:123456
c:>mysql –uroot
mysql>show databases;
mysql>use mysql;
mysql>UPDATE user SET password=PASSWORD("123456") WHERE user='root';
mysql>FLUSH PRIVILEGES;
mysql>QUIT
7. MySQL控制台快捷方式建立:
1)桌面右键->新建->快捷方式->对象位置输入:C:\Windows\System32\cmd.exe
快捷方式名称自己定义,确定,快捷方式建立成功
2)右键单击刚才建立的快捷方式->属性->把目标一栏修改成MySQL启动参数:
C:\Windows\System32\cmd.exe "D:\Program Files\MySQL\mysql-5.6.13-win32\bin" /k mysql -uroot -p inventory
解释:CMD路径 "MySQL路径bin目录" /k mysql -u用户名 -p密码 数据库名
3)修改完成后点击确定保存,直接双击快捷方式即可连接到MySQL数据库
Apache 安装配置
解压Apache_HTTP_Server_2.4.12_JiSuXia
注意下面蓝色的路径必须是你本机Apache所在路径
找到D:\application_software\Apache\conf\httpd.conf文件,用记事本打开,找到:Define SRVROOT 这一项,将其右方的值改为
当前你Apache安装存放的目录地址,如下所示:
继续找,找到:Listene 80
若你的80端口被占用(可在cmd下用命令netstat -a查看),则将80端口改为别的保存httpd.conf文件。
接下来需要配置安装Apache的主服务,有了它,Apache才可启动:
打开CMD窗口,输入:"D:\Program Files\Apache\x86\bin\httpd.exe" -k install -n apache
切记,包含引号。该命令的意思是,安装apache服务,并将该服务名称命名为apache(你也可以改成别的),回车。
服务安装完毕,完毕后,会自动测试,若有问题,窗口会提示错误,此时,请根据错误自行排查。
正常安装完毕如下图所示:
其中,Errors reported here must be corrected before the service can be started.意思是,若该句话后面有错误信息,则表示服务安装失败,需要先改正错误。若没有,则成功。
在安装目录中,找到D:\application_software\Apache\bin\ApacheMonitor.exe可执行文件,双击运行,桌面右下角会出现图标,双击打开窗口界面,会看到如图所示:
点击左侧start,启动apache服务。
补充句,从该界面可看出,其可以手动控制服务的开启与关闭,为了节省资源,关闭Apache服务器的时候,请先点击“Stop”关闭apache服务。
当然,该服务也可以在windows系统服务中关闭(建议设置成手动)
下图显示的是该服务成功显示的状态:
打开浏览器,输入访问
http://localhost 若出现如下图所示界面,则Apache服务器的基本配置完毕,此时apache服务器已经可以运行,更具体的配置,需要使用者自行去参悟了。
END
apache服务的卸载
若Apache服务器软件不想用了,想要卸载,需要先卸载apache服务(切记,若直接删除安装路径的文件夹,会有残余文件在电脑,可能会造成不必要的麻烦)
在CMD命令窗口,输入如下(建议先停止服务再删除):
sc delete apache
apache是Apache服务器的服务名
PHP
解压php_5.6.11到D:\Program Files
具体配置参考下面
Apache启用PHP模块 (PHP配置/Apache配置)
php配置
php.ini-development 文件重命名为 php.ini
指定PHP扩展包的具体目录,以便调用相应的DLL文件
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
; extension_dir = "ext"
修改为
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "D:/servers/php/ext"
去掉以下配置注释,支持mysql
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mysql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_odbc.dll
支持session
session.save_path = "e:/temp"
上传文件目录配置
upload_tmp_dir ="e:/temp"
时区配置
date.timezone =Asia/Shanghai
------------------------------------------------
apache配置
找到D:\application_software\Apache\conf\httpd.conf文件,用记事本打开
在#LoadModule vhost_alias_module modules/mod_vhost_alias.so下添加
LoadModule php5_module "e:/servers/php/php5apache2_2.dll"
PHPIniDir "e:/servers/php" 这个很关键 注意路径
下面这个注意搜索一下
AddType application/x-httpd-php .php .html .htm
web主目录修改
DocumentRoot "D:/servers/Apache2.2/htdocs"
改为
DocumentRoot "D:/servers/phpweb"
-------------------------------------------------------------------------------------
<Directory "D:/servers/Apache2.2/htdocs">
改为
<Directory "D:/phpweb">
---------------------------------------------------------------------------
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
改为
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
phpmyadmin安装教程及配置设置
解压phpMyAdmin_4.4.11_all_languages.1437381213到apache站点下
将phpmyadmin放到apache站点路径下D:\Program Files\Apache\x86\htdocs
直接访问即可
其中D:\Program Files\Apache\x86\htdocs\phpMyAdmin\libraries
Config.default.php 这个文件
132行 $cfg['Servers'][$i]['port'] = ''; 可以指定mysql端口 默认3306
这样可以切换数据库链接
JDK7.0安命令装
jdk环境变量配置方法:
解压安装jdk7_64_win_jb51net.rar
下面教大家如何配置jdk环境变量:
1.右键选择 计算机→属性→高级系统设置→高级→环境变量
2.系统变量→新建
变量名:JAVA_HOME
变量值:(变量值填写你的jdk的安装目录,例如本人是 E:\Java\jdk1.7.0)
3.在系统变量中找到 Path 变量,选择编辑
在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(注意如果原来Path的变量值末尾没有;号,就先输入;号再输入上面的代码)
4.系统变量→新建
变量名:CLASSPATH
变量值:.%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
到这系统变量就配置完毕了。
测试jdk是否安装成功
1、win+R组合键,输入cmd 打开命令行窗口
2、输入javac,正确就显示如图
jdk是否安装成功:
运行cmd 输入 java -version (java 和 -version 之间有空格)注意文字说明,默认是win64版本。
截图:
Mycat分布式数据库
http://www.blogjava.net/amigoxie/archive/2014/12/24/421788.html
解压Mycat-server-1.5-RELEASE-20160301083012-win.tar
安装步骤:
启动前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如下行的内容为2G和2048,可根据本机配置情况修改为512M或其它值。
wrapper.java.additional.5=-XX:MaxDirectMemorySize=512M
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
wrapper.java.initmemory=512
# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64
wrapper.java.maxmemory=512
在命令行窗口中进入MyCAT安装解压文件下的bin目录,输入如下命令可安装(可选)、启动和停止MyCAT,参考结果如下所示:
D:\software\Mycat-server-1.2-GA-win\bin>mycat install
wrapper | Mycat-server installed.
D:\software\Mycat-server-1.2-GA-win\bin>mycat start
wrapper | Starting the Mycat-server service
wrapper | Waiting to start
wrapper | Mycat-server started.
D:\software\Mycat-server-1.2-GA-win\bin>mycat stop
wrapper | Stopping the Mycat-server service
wrapper | Mycat-server stopped.
垂直分切
<schema name="weixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="weixin" />
<schema name="yixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="yixin" />
<schema name="photo" checkSQLschema="false" sqlMaxLimit="100" dataNode="photo" />
<schema name="bbb" checkSQLschema="false" sqlMaxLimit="100" dataNode="bbb" />
<dataNode name="weixin" dataHost="testhost" database="weixin" />
<dataNode name="yixin" dataHost="testhost" database="yixin" />
<dataNode name="photo" dataHost="testhost" database="photo" />
<dataNode name="bbb" dataHost="testhost2" database="bbb" />
<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
<dataNodename="jdbc_dn2" dataHost="jdbchost" database="db2" />
<dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> -->
<dataHost name="testhost" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3306" user="root" password="123456" />
</dataHost>
<dataHost name="testhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM2" url="localhost:3307" user="root" password="123456" />
</dataHost>
水平分表
http://wenku.baidu.com/view/78abcf392b160b4e777fcf6c.html?qq-pf-to=pcqq.c2c
配置文件:schema.xml
自定义一个虚拟数据库mycat 里面添加要水平分表的userinfo(这个表在weixin,bbb的两个数据库中都存在,表结构一样)
<schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" >
<!-- auto sharding by id (long) -->
<table name="userinfo" primaryKey="UPID" dataNode="weixin,bbb" rule="rule1">
</table>
</schema>
配置文件:rule.xml
下面partitionCount是要分库的数量,partitionLength是当多少条数据的时候进行分片,大概意思就是这样。
<tableRule name="rule1">
<rule>
<columns>UPID</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<function name="func1" class="org.opencloudb.route.function.PartitionByLong">
<property name="partitionCount">2</property>
<property name="partitionLength">512</property>
</function>
--------------------------------
还可以这样写
<function name="func1" class="org.opencloudb.route.function.PartitionByLong">
<property name="partitionCount">1,1</property>
<property name="partitionLength">512,512</property>
</function>
配置文件:server.xml
最后不要忘记配置数据库
<user name="test">
<property name="password">test</property>
<property name="schemas">weixin,yixin,photo,bbb,mycat</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">weixin,yixin,photo,bbb,mycat</property>
<property name="readOnly">true</property>
</user>
最后项目里链接数据库字符串需要链接这个带有分表的库mycat
读写分离:
<dataHost name="testhost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3306" user="root" password="">
<readHost host="hostM2" url="10.18.96.133:3306" user="test" password="test" />
</writeHost>
</dataHost>
全局表:
<schema name="test_mycat" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="t_user" dataNode="user0,user1,user2,user3" rule="rule1">
<childTable name="t_user_class_rel" primaryKey="id" joinKey="user_id" parentKey="user_id" />
</table>
<table name="t_area" primaryKey="id" type="global" dataNode="weixin,yixin,photo,user0,user1,user2,user3" />
</schema>
查看端口是否被占用:netstat -ano
.NET 链接 MySQL
所需DLL:MySQL.Data (可借助动软代码生成器生成的项目中找到)。
所需数据库访问类:DbHelperMySQL(可从动软代码生成器的项目中找到)。
WebConfig 中链接数据库字符串:
<connectionStrings><addname="sql_conn" connectionString="server=localhost;port=3306;database=weixin;uid=root;pwd=123456;"/></connectionStrings>
利用SQLBase泛型底层 (注意添加时表名不能加中括号“[ ]”)。
利用SmileAngel dapper通用底层。
Nginx+iis 负载均衡
http://www.cnblogs.com/yanweidie/archive/2015/07/19/4658136.html
解压nginx-1.9.3.zip
配置conf/nginx.conf
修改nginx监听端口,修改http server下的listen节点值,由于本机80端口已经被占用,我改为监听8083端口。
listen 8083;
在http节点下添加upstream(服务器集群),server设置的是集群服务器的信息,我这里搭建了两个站点,配置了两条信息。
#服务器集群名称为Jq_one
upstream Jq_one {
server 127.0.0.1:9000;
server 127.0.0.1:8082;
}
在http节点下找到location节点修改
location / {
root html;
index index.aspx index.html index.htm; #修改主页为index.aspx
#其中jq_one 对应着upstream设置的集群名称
proxy_pass http://Jq_one;
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
修改完成配置文件以后记得重启nginx服务,最终完整配置文件信息如下
虽然我们搭建好了负载均衡站点,但是还存在以下问题。
1.如果站点使用了session,请求平均分配到两个站点,那么必然存在session共享问题,该如何解决?
使用数据库保存session信息
使用nginx将同一ip的请求分配到固定服务器,修改如下。ip_hash会计算ip对应hash值,然后分配到固定服务器
upstream Jq_one{
server 127.0.0.1:8082 ;
server 127.0.0.1:9000 ;
ip_hash;
}
搭建一台Redis服务器,对session的读取都从该Redis服务器上读取。后面的文章将介绍分布式缓存Redis的使用
2.管理员更新站点文件,该怎么操作,现在还只有两台服务器,可以手工将文件更新到两台服务器,如果是10台呢,那么手工操作必然是不可行的
多服务器站点更新可以使用GoodSync 文件同步程序,会自动检测文件的修改新增,然后同步到其它服务器上。在linux下可以使用rsync
3.站点中的文件上传功能会将文件分配到不同的服务器,文件共享问题如何解决。
使用文件服务器将所有文件存储到该服务器上,文件操作读取写入都在该服务器上。这里同样会存在一个问题,文件服务器存在读写上限。
4.负载的服务器配置不一样,有的高有的低可不可以让配置高的服务器处理请求多一些
这里讲一下,负载均衡有好几种算法 轮转法,散列法, 最少连接法,最低缺失法,最快响应法,加权法。我们这里可以使用加权法来分配请求。
upstream Jq_one{
server 127.0.0.1:8082 weight=4;
server 127.0.0.1:9000 weight=1;
}
通过weight设置每台服务器分配请求站的权重,值越高分配的越多。
5.由于请求是经过nginx转发过来的,可以在代码里面获取到用户请求的实际ip地址吗?
答案是肯定的,在localtion节点设置如下请求头信息
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
代码里面通过Request.Headers["X-Real-IP"],就能获取到真实ip
6.nginx实现静态文件(image,js,css)缓存
在server节点下添加新的localtion
#静态资源缓存设置
location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$
{
expires 30d;
root /nginx-1.9.3/html;#root: #静态文件存在地址,这里设置在/nginx-1.9.3/html下
break;
}
这是index页面的代码 <li><img src="/images/1.jpg"/></li>
这篇关于mycat分布式+nginx负载均衡(含mysql、jdk、phpadmin、apache安装配置步骤)整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!