企业架构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'        => '',
    // 是否严格检查字段是否存在
相关推荐
伯牙碎琴1 小时前
十一、SOA(SOA的具体设计模式)
架构
Karoku0669 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
Lill_bin12 小时前
深入理解ElasticSearch集群:架构、高可用性与数据一致性
大数据·分布式·elasticsearch·搜索引擎·zookeeper·架构·全文检索
zyhJhon12 小时前
软考架构-面向服务的架构风格
架构
nbsaas-boot12 小时前
微服务之间的安全通信
安全·微服务·架构
数据运营新视界16 小时前
你知道企业架构中核心的4大架构联系和不同吗?
大数据·架构
Xinan_____16 小时前
Linux——高流量 高并发(访问场景) 高可用(架构要求)
linux·运维·架构
杨诚实16 小时前
20240912软考架构-------软考161-165答案解析
数据库·架构
achirandliu18 小时前
汽车电子电气架构从12V提升至48V,带来那些好处? 包括那些改变?
架构·汽车·汽车电子电气架构·从12v升到48v
huaqianzkh18 小时前
了解MySQL 高可用架构:主从备份
数据库·mysql·架构