企业架构LNMP学习笔记40

2023-09-14 12:44:19

框架配置实现读写分离:

1)修改项目配置文件:

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目录下。

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:

tar xvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local

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

启动MyCat:

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

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

/usr/local/mycat/bin/mycat console
[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格式。注意它的基本格式。

xml格式注意点:

1、xml声明信息

2、具有一个根标签

3、双标签和单标签格式 

4、注意闭合标签 

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

查看server.xml:

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

/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

[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服务器:

/usr/local/mycat/bin/mycat start

netstat -atunlp |grep 8066 
[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
[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客户端:

mysql -h 127.0.0.1 -uroot -p -P 8066

执行查询命令查看结果:

 

mycat管理端:

连接mycat管理端:

mysql -h127.0.0.1 -uroot -p123456 -P9066

执行管理命令查看:

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

show @@help

show @@heartbeat 

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)

业务代码配置:

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

修改项目数据库文件:

vim /usr/local/nginx/html/tp5shop/application/database.php
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'        => '',
    // 是否严格检查字段是否存在

更多推荐

弹跳小球-第15届蓝桥杯第一次STEMA测评Scratch真题精选

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第152讲。第15届蓝桥杯第1次STEMA测评已于2023年8月20日落下帷幕,编程题一共有6题,分别如下:行走的螃蟹飞驰的高铁旋转的正方体弹跳小球比较身高数据计算弹跳小球,本题是202

每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值

文章目录每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值每日语录第26题中级题:活跃时长的均值1.需求列表思路分析答案获取加技术群讨论附表文末SQL小技巧后记每天一道大厂SQL题【Day26】脉脉真题实战(二)活跃时长的均值大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据

测试用例设计底层逻辑

【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】测试用例是每位测试人员都绕不开的话题,也是大家习以为常的事情。几乎所有测试相关的公众号、博客、专栏,都会提及测试用例,由此可见它的重要性。但是,有许多从业者,对测试用例的设计仍然依靠经验积累,即使知道用例要

持安科技孙维伯:零信任理念下的实战攻防:ISC2023数字小镇演讲

近日,在ISC2023第十一届互联网安全大会上,持安科技联合创始人孙维伯作为零信任办公安全赛道代表,亮相数字小镇New50,并发表《全方位防御:零信任理念下的实战攻防》主题演讲。以下是本次演讲实录:这几年,网络安全已经从监管合规趋向于实战化,网络诈骗、黑产越发猖獗,企业面临的安全挑战愈加严峻。在实战攻防的场景下,攻防双

Nginx 服务器 SSL 证书安装部署

操作场景本文档指导您如何在Nginx服务器中安装SSL证书。说明本文档以证书名称xxx为例。Nginx版本以nginx/1.18.0为例。当前服务器的操作系统为CentOS7,由于操作系统的版本不同,详细操作步骤略有区别。安装SSL证书前,请您在Nginx服务器上开启HTTPS默认端口443,避免证书安装后无法启用HT

2、从“键鼠套装”到“全键盘游戏化”审核

1、风行内容仓的增效之路-前言内容仓成立初期,安全审核组是规模最大的小组,占到部门人数的半壁江山,因此增效工作首先就从安全审核开始。早期安全审核每天的达标值在800条左右,每天的总审核量不到1万,距离业务部门期望的数量差距较大。我找到相关同事,讨论如何提高每天的审核产出,同事反馈说,感觉没有什么方法,部门内部已经做过测

孙宇晨出席米尔肯研究院亚洲峰会:持续推动行业破圈 亚洲将成重要加密中心

9月14日,波场TRON创始人、火币HTX全球顾问委员会成员孙宇晨受邀出席2023米尔肯研究院亚洲峰会(2023MilkenInstituteAsiaSummit),与前美国驻新加坡大使、WagarGlobalAdvisors咨询公司主席KirkWagar就加密行业未来趋势相关问题进行了深度对话。孙宇晨在对谈中表示,稳

DETR 系列 Mask Frozen-DETR: High Quality Instance Segmentation with One GPU 论文阅读笔记

DETR系列MaskFrozen-DETR:HighQualityInstanceSegmentationwithOneGPU论文阅读笔记一、Abstract二、引言三、相关工作目标检测实例分割讨论四、本文的方法4.1Baseline设置结果实验设置4.2图像特征编码器DeformableencoderblockSwi

AI实战营第二期 第九节 《底层视觉与MMEditing》——笔记10

文章目录AI实战营第二期第九节《底层视觉与MMEditing》什么是超分辨率图像分辨率的目标应用方向超分的类型单图超分的解决思路深度学习时代的超分辨率算法SRCNNFastSRCNNSRResNet感知损失VS.均方误差均方误差感知损失对抗生成网络GAN应用于超分辨率如何学习生成器网络对抗训练GAN优化目标DCGANS

基于SpringBoot+Vue的餐饮管理系统设计与实现

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

Spring Cloud 负载平衡的意义什么?

目录一、什么是负载平衡二、为什么需要负载平衡三、SpringCloud如何实现负载平衡四、负载平衡的nginx配置一、什么是负载平衡负载平衡是指将网络流量在多个服务器之间分布,以达到提高系统性能、增强可靠性和提供更好用户体验的目的。在负载平衡的架构中,多个服务器被组织成一个集群,共同处理用户的请求。负载平衡的主要作用有

热文推荐