mycat分布式+nginx负载均衡(含mysql、jdk、phpadmin、apache安装配置步骤)整理

程序开发 同时被 2 个专栏收录
18 篇文章 0 订阅
1 篇文章 0 订阅

 

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>

 

 

 

 

 

 

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值