企业架构LNMP学习笔记40

框架配置实现读写分离:

1)修改项目配置文件:

bash 复制代码
return [
    // 数据库类型
    'type'            => 'mysql',
    // 服务器地址
    // 1、主从数据库的连接地址  主在前  从在后
    'hostname'        => '192.168.17.100,192.168.17.105',
    // 2、主从数据库的名称、用户、密码一样的话,只配置一份即可。如果不一样,按照先后顺序,逗号分隔
    // 数据库名
    'database'        => 'tp5shop',
    // 用户名
    'username'        => 'tp5shop',
    // 密码
    'password'        => '$Abc3721',
    // 端口
    'hostport'        => '3306',
    // 连接dsn
    'dsn'             => '',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
    'prefix'          => 'tpshop_',
    // 数据库调试模式
    'debug'           => true,
    // 3、项目框架的业务代码实现读写分离,使用的是分布式(主从服务器)  配置为1
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 1,
    // 4、数据库读写分离是业务代码实现的,配置为true
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => true,
    // 读写分离后 主服务器数量
    'master_num'      => 1,
    // 指定从服务器序号
    'slave_no'        => '',
    // 是否严格检查字段是否存在

可以问软件开发工程师,看主从复制是怎么配置处理的。

测试down主库,看从库是否可以访问。thinkphp5中,如果slave宕机,master提供读服务。这个对用更友好一点。从压力大。

等学到PHP的时候,可以看看这部分内容。

MyCAT实现读写分离:

介绍:

数据库中间件:对前端服务器来说,只有一台。

准备一台服务器,作为数据库的中间件服务器,配置基本环境、网卡、FQDN。

server07 mycat 192.168.17.107

MyCat 数据库中间件。

国内最活跃、性能最好的开源数据库中间件。

因为MyCat是java语言开发的,必须使用java的运行环境启动和操作。

JDK安装:

java静态编译的编程语言,代码编译成机器码 执行机器码输出结果。

编译JDK(JAVA DEVELOPMENT KIT java开发工具包) javac编译java代码。

运行jre,编译好的机器代码(可执行文件)java。

实际业务环境中,如果存在需要编译的情况,就选择JDK。

JRE java解释运行环境,一般情况编译过的可执行的java程序,jre就够用了。

公司代码在服务器上进行编译,是因为服务器性能好。有些包本地没有,在公司服务器上。

下载JDK:

选择下载X64的tar.gz的包:

上传mycat和jdk到soft目录下。

bash 复制代码
shell > tar xvf jdk-8u192-linux-x64.tar.gz
shell > mv jdk1.8.0_192 /usr/local/java


配置环境变量:
#追加环境变量
shell > echo "PATH=/usr/local/java/bin:$PATH" >> /etc/profile
shell > source /etc/profile
#检测java环境变量  如果看到版本信息即为成功 
shell > java -version

MyCat 安装测试:

1)解压安装MyCat:

bash 复制代码
tar xvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local

实际解压到目录即可,无需安装。

启动MyCat:

默认情况下,启动MyCat是可以启动的:

通过控制台,进行前端启动,可以看到执行过程。

bash 复制代码
/usr/local/mycat/bin/mycat console
bash 复制代码
[root@server07 bin]# nohup ./mycat console &
[1] 15897
[root@server07 bin]# nohup: ignoring input and appending output to 'nohup.out'

注意:如果启动不成功,可能是由于没有解析主机名称,需要在hosts文件中进行解析。

域名解析暂时失败。

配置读写分离:

读写分离的配置文件:

Mycat是由java开发,**java开发的软件大部分配置文件是xml格式。**注意它的基本格式。

bash 复制代码
xml格式注意点:

1、xml声明信息

2、具有一个根标签

3、双标签和单标签格式 

4、注意闭合标签 

5、注释格式为  <!--  这里是注释内容 -->

查看server.xml:

默认server.xml可以不用修改。

bash 复制代码
/usr/local/mycat/conf
vim server.xml

修改server.xml

配置mycat对外的使用用户信息:

root是对外使用的用户名,123456是对外使用的密码,TESTDB是对外使用的数据库。

修改schema.xml:

schema标签里配置name的server.xml里的虚拟数据库名称,dataNode 填写后面使用的dataNode名称

dataNode标签和dataHost指定配置使用

dataHost标签里配置writeHost和readHost(密码,地址,用户名称)

schema=>dataNode=>dataHost=>writeHost=>readHost

bash 复制代码
[root@server07 conf]# cat schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
        <dataNode name="dn1" dataHost="localhost1" database="tp5shop" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.17.108:3306" user="tp5shop" password="$Abc3721">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.17.112:3306" user="tp5shop" password="$Abc3721" />
                </writeHost>
        </dataHost>
</mycat:schema>

然后再运行mycat进行下测试:

启动mycat服务器:

bash 复制代码
/usr/local/mycat/bin/mycat start

netstat -atunlp |grep 8066 
bash 复制代码
[root@server07 bin]# ./mycat start
Starting Mycat-server...
[root@server07 bin]# ps aux |grep mycat
root       1490  0.0  0.0  17864   748 ?        Sl   10:50   0:00 /usr/local/mycat/bin/./wrapper-linux-x86-64 /usr/local/mycat/conf/wrapper.conf wrapper.syslog.ident=mycat wrapper.pidfile=/usr/local/mycat/logs/mycat.pid wrapper.daemonize=TRUE wrapper.lockfile=/var/lock/subsys/mycat
root       1492 12.9 11.7 6928724 239192 ?      Sl   10:50   0:01 java -DMYCAT_HOME=. -server -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=2G -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1984 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx4G -Xms1G -Djava.library.path=lib -classpath lib/wrapper.jar:conf:lib/zookeeper-3.4.6.jar:lib/jline-0.9.94.jar:lib/ehcache-core-2.6.11.jar:lib/log4j-1.2.17.jar:lib/fastjson-1.2.12.jar:lib/curator-client-2.11.0.jar:lib/joda-time-2.9.3.jar:lib/log4j-slf4j-impl-2.5.jar:lib/libwrapper-linux-x86-32.so:lib/netty-3.7.0.Final.jar:lib/druid-1.0.26.jar:lib/log4j-api-2.5.jar:lib/mapdb-1.0.7.jar:lib/slf4j-api-1.6.1.jar:lib/univocity-parsers-2.2.1.jar:lib/hamcrest-core-1.3.jar:lib/objenesis-1.2.jar:lib/leveldb-api-0.7.jar:lib/hamcrest-library-1.3.jar:lib/wrapper.jar:lib/commons-lang-2.6.jar:lib/reflectasm-1.03.jar:lib/mongo-java-driver-2.11.4.jar:lib/guava-19.0.jar:lib/curator-recipes-2.11.0.jar:lib/curator-framework-2.11.0.jar:lib/libwrapper-linux-ppc-64.so:lib/log4j-core-2.5.jar:lib/mysql-binlog-connector-java-0.6.0.jar:lib/netty-common-4.1.9.Final.jar:lib/leveldb-0.7.jar:lib/sequoiadb-driver-1.12.jar:lib/kryo-2.10.jar:lib/jsr305-2.0.3.jar:lib/commons-collections-3.2.1.jar:lib/mysql-connector-java-5.1.35.jar:lib/disruptor-3.3.4.jar:lib/log4j-1.2-api-2.5.jar:lib/velocity-1.7.jar:lib/Mycat-server-1.6.5-release.jar:lib/libwrapper-linux-x86-64.so:lib/dom4j-1.6.1.jar:lib/minlog-1.2.jar:lib/asm-4.0.jar:lib/netty-buffer-4.1.9.Final.jar -Dwrapper.key=pC2d0REJJQ5SznBy -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=1490 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.tanukisoftware.wrapper.WrapperSimpleApp io.mycat.MycatStartup start
root       1530  0.0  0.0 112812   972 pts/0    S+   10:50   0:00 grep --color=auto mycat
bash 复制代码
[root@server07 bin]# netstat -atunlp |egrep "8066|9066"
tcp6       0      0 :::9066                 :::*                    LISTEN      1492/java
tcp6       0      0 :::8066                 :::*                    LISTEN      1492/java

如果配置之后,不能启动mycat,不能够启动。

通过查看/usr/local/mycat/logs/wrapper.log。

最好是启动console,查看console日志,检查没问题了,然后再进行配置:

mycat客户端:

在server07的机器上还是需要安装mysql软件:

然后使用mysql客户端连接mycat客户端:

bash 复制代码
mysql -h 127.0.0.1 -uroot -p -P 8066

执行查询命令查看结果:

mycat管理端:

连接mycat管理端:

bash 复制代码
mysql -h127.0.0.1 -uroot -p123456 -P9066

执行管理命令查看:

bash 复制代码
mysql > show @@help;  //查看管理监控端的所有帮助命令
mysql > show @@heartbeat;  //查看服务器状态

show @@help

show @@heartbeat

bash 复制代码
mysql> show @@help;
+------------------------------------------+--------------------------------------------+
| STATEMENT                                | DESCRIPTION                                |
+------------------------------------------+--------------------------------------------+
| show @@time.current                      | Report current timestamp                   |
| show @@time.startup                      | Report startup timestamp                   |
| show @@version                           | Report Mycat Server version                |
| show @@server                            | Report server status                       |
| show @@threadpool                        | Report threadPool status                   |
| show @@database                          | Report databases                           |
| show @@datanode                          | Report dataNodes                           |
| show @@datanode where schema = ?         | Report dataNodes                           |
| show @@datasource                        | Report dataSources                         |
| show @@datasource where dataNode = ?     | Report dataSources                         |
| show @@datasource.synstatus              | Report datasource data synchronous         |
| show @@datasource.syndetail where name=? | Report datasource data synchronous detail  |
| show @@datasource.cluster                | Report datasource galary cluster variables |
| show @@processor                         | Report processor status                    |
| show @@command                           | Report commands status                     |
| show @@connection                        | Report connection status                   |
| show @@cache                             | Report system cache usage                  |
| show @@backend                           | Report backend connection status           |
| show @@session                           | Report front session details               |
| show @@connection.sql                    | Report connection sql                      |
| show @@sql.execute                       | Report execute status                      |
| show @@sql.detail where id = ?           | Report execute detail status               |
| show @@sql                               | Report SQL list                            |
| show @@sql.high                          | Report Hight Frequency SQL                 |
| show @@sql.slow                          | Report slow SQL                            |
| show @@sql.resultset                     | Report BIG RESULTSET SQL                   |
| show @@sql.sum                           | Report  User RW Stat                       |
| show @@sql.sum.user                      | Report  User RW Stat                       |
| show @@sql.sum.table                     | Report  Table RW Stat                      |
| show @@parser                            | Report parser status                       |
| show @@router                            | Report router status                       |
| show @@heartbeat                         | Report heartbeat status                    |
| show @@heartbeat.detail where name=?     | Report heartbeat current detail            |
| show @@slow where schema = ?             | Report schema slow sql                     |
| show @@slow where datanode = ?           | Report datanode slow sql                   |
| show @@sysparam                          | Report system param                        |
| show @@syslog limit=?                    | Report system mycat.log                    |
| show @@white                             | show mycat white host                      |
| show @@white.set=?,?                     | set mycat white host,[ip,user]             |
| show @@directmemory=1 or 2               | show mycat direct memory usage             |
| switch @@datasource name:index           | Switch dataSource                          |
| kill @@connection id1,id2,...            | Kill the specified connections             |
| stop @@heartbeat name:time               | Pause dataNode heartbeat                   |
| reload @@config                          | Reload basic config from file              |
| reload @@config_all                      | Reload all config from file                |
| reload @@route                           | Reload route config from file              |
| reload @@user                            | Reload user config from file               |
| reload @@sqlslow=                        | Set Slow SQL Time(ms)                      |
| reload @@user_stat                       | Reset show @@sql  @@sql.sum @@sql.slow     |
| rollback @@config                        | Rollback all config from memory            |
| rollback @@route                         | Rollback route config from memory          |
| rollback @@user                          | Rollback user config from memory           |
| reload @@sqlstat=open                    | Open real-time sql stat analyzer           |
| reload @@sqlstat=close                   | Close real-time sql stat analyzer          |
| offline                                  | Change MyCat status to OFF                 |
| online                                   | Change MyCat status to ON                  |
| clear @@slow where schema = ?            | Clear slow sql by schema                   |
| clear @@slow where datanode = ?          | Clear slow sql by datanode                 |
+------------------------------------------+--------------------------------------------+
58 rows in set (0.00 sec)

mysql> show @@heartbeat;
+--------+-------+----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME   | TYPE  | HOST           | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME    | STOP  |
+--------+-------+----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| hostM1 | mysql | 192.168.17.108 | 3306 |       1 |     0 | idle   |       0 | 1,1,1        | 2023-09-14 11:23:42 | false |
| hostS2 | mysql | 192.168.17.112 | 3306 |       1 |     0 | idle   |       0 | 1,0,0        | 2023-09-14 11:23:42 | false |
+--------+-------+----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
2 rows in set (0.01 sec)

业务代码配置:

使用数据库中间件服务器实现读写分离和后端真实数据库的管理。对于前端业务来说,数据操作需要连接的是数据库中间件服务器,操作连接的是数据库中间件服务器,而不直接连接多实例的真实服务器。

修改项目数据库文件:

bash 复制代码
vim /usr/local/nginx/html/tp5shop/application/database.php
bash 复制代码
return [
    // 数据库类型
    'type'            => 'mysql',
    // 服务器地址
    // 1、连接mycat数据库中间件服务器
    'hostname'        => '192.168.17.106',
    // 2、mycat对外映射的数据库名称
    // 数据库名
    'database'        => 'TESTDB',
    // 3、mycat对外映射的用户
    // 用户名
    'username'        => 'root',
    // 4、mycat对外映射的密码和端口
    // 密码
    'password'        => '123456',
    // 端口
    'hostport'        => '8066',
    // 连接dsn
    'dsn'             => '',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
    'prefix'          => 'tpshop_',
    // 数据库调试模式
    'debug'           => true,
    // 5、使用数据库中间件,对于前端业务服务器来说,属于使用集中式单一服务器  配置为0
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 0,
    // 6、集中式单一服务器  不在业务代码进行读写分离,交由数据库中间件去做  配置为false
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => false,
    // 读写分离后 主服务器数量
    'master_num'      => 1,
    // 指定从服务器序号
    'slave_no'        => '',
    // 是否严格检查字段是否存在
相关推荐
javaDocker3 小时前
业务架构、数据架构、应用架构和技术架构
架构
JosieBook5 小时前
【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍
架构
.生产的驴6 小时前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
丁总学Java6 小时前
ARM 架构(Advanced RISC Machine)精简指令集计算机(Reduced Instruction Set Computer)
arm开发·架构
ZOMI酱8 小时前
【AI系统】GPU 架构与 CUDA 关系
人工智能·架构
天天扭码15 小时前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
余生H15 小时前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer