images\cherry_red.png1 实训二前期LNMP简易架构
      images\cherry_blue.png1.1 php server安装
      images\cherry_blue.png1.2 安装初始化数据库
   images\cherry_red.png2 Mysql数据库
      images\cherry_blue.png2.1 Mysql5.7安装
         images\cherry_orange.png2.1.1 rpm安装
         images\cherry_orange.png2.1.2 yum安装
         images\cherry_orange.png2.1.3 源码安装
         images\cherry_orange.png2.1.4 编译好的非rpm包安装
         images\cherry_orange.png2.1.5 my.cnf常见选项
      images\cherry_blue.png2.2 Mysql基础
         images\cherry_orange.png2.2.1 MySql数据库操作
         images\cherry_orange.png2.2.2 MySql数据类型
            images\cherry_cyan.png2.2.2.1 整型
            images\cherry_cyan.png2.2.2.2 浮点数和定数
            images\cherry_cyan.png2.2.2.3 字符串类型
            images\cherry_cyan.png2.2.2.4 日期和时间类型
            images\cherry_cyan.png2.2.2.5 字段修饰和约束
            images\cherry_cyan.png2.2.2.6 业务建表练习
         images\cherry_orange.png2.2.3 MySql表操作
         images\cherry_orange.png2.2.4 MySql体系结构
         images\cherry_orange.png2.2.5 MySql存储引擎
      images\cherry_blue.png2.3 MySql操作
         images\cherry_orange.png2.3.1 MySql数据操作
         images\cherry_orange.png2.3.2 MySql单表查询
         images\cherry_orange.png2.3.3 MySql多表查询
         images\cherry_orange.png2.3.4 MySql存储过程与函数
      images\cherry_blue.png2.4 MySql操作-2
         images\cherry_orange.png2.4.1 MySql安全机制
         images\cherry_orange.png2.4.2 MySql日志管理
         images\cherry_orange.png2.4.3 MySql复制概述
         images\cherry_orange.png2.4.4 主从同步
      images\cherry_blue.png2.5 最基本sql语句及主从架构
      images\cherry_blue.png2.6 MyCat中间件
         images\cherry_orange.png2.6.1 部署Mycat
         images\cherry_orange.png2.6.2 配置读写分离
            images\cherry_cyan.png2.6.2.1 安全的读写分离
         images\cherry_orange.png2.6.3 XML语法格式
         images\cherry_orange.png2.6.4 mycat 分表分库
      images\cherry_blue.png2.7 Mysql MHA
         images\cherry_orange.png2.7.1 MHA-部署
         images\cherry_orange.png2.7.2 MHA-故障切换VIP透明
            images\cherry_cyan.png2.7.2.1 VIP切换脚本内容
            images\cherry_cyan.png2.7.2.2 VIP-手动在线切换脚本
         images\cherry_orange.png2.7.3 MHA+Mycat高可用Mysql读写分离
         images\cherry_orange.png2.7.4 MHA+VIP+Mycat
         images\cherry_orange.png2.7.5 MHA-故障切换邮件报警
         images\cherry_orange.png2.7.6 自动配置Slave主机
   images\cherry_red.png3 实验
      images\cherry_blue.png3.1 mysql授权问题
      images\cherry_blue.png3.2 1.单节点数据库
      images\cherry_blue.png3.3 2.主从同步
      images\cherry_blue.png3.4 3.实验(高可用)
         images\cherry_orange.png3.4.1 高可用keepalived
            images\cherry_cyan.png3.4.1.1 keepalived install
      images\cherry_blue.png3.5 4.实验(高可用+大并发)
         images\cherry_orange.png3.5.1 HAproxy代理
      images\cherry_blue.png3.6 4.实验(mycat-读写分离)
         images\cherry_orange.png3.6.1 mycat安装部署
         images\cherry_orange.png3.6.2 读写分离高可用
         images\cherry_orange.png3.6.3 mycat管理端口命令
      images\cherry_blue.png3.7 5.双主双从-读写分离-高可用
      images\cherry_blue.png3.8 6.mycat分库操作
      images\cherry_blue.png3.9 7.mycat分表
      images\cherry_blue.png3.10 8.mycat分库分表之下实现读写分离
   images\cherry_red.png4 Shell脚本编程
   images\cherry_red.png5 Zabbix监控
      images\cherry_blue.png5.1 zabbix设置邮件报警--自定义报警媒介
      images\cherry_blue.png5.2 zabbix解决中文界面乱码问题
      images\cherry_blue.png5.3 ziabbix自带的template Linux OS
      images\cherry_blue.png5.4 zabbix-agent自定义收集数据
      images\cherry_blue.png5.5 zabbix监控Nginx性能
      images\cherry_blue.png5.6 综合配置
      images\cherry_blue.png5.7 实验:监控nginx端口实现告警
   images\cherry_red.png6 ELK日志分析
      images\cherry_blue.png6.1 PS
      images\cherry_blue.png6.2 es-head插件安装
      images\cherry_blue.png6.3 安装filebeat nginx日志模板


实际业务中对于书局库的操作往往 读 远大于 写,因此为提高架构性能,可以通过mycat实现读写分离。一般基础架构为主从结构,一主一从或多从、双主多从,主节点负责处理写操作,从节点负责读操作。

一主一从架构下的读写分离:

images\57-1.png

===============================================================

1.配置 server.xml 指定登陆mycat 用于名,密码 及抽象/逻辑库databases、端口
# vi /usr/local/mycat/conf/server.xml

<property name="serverPort">7306</property> <property name="managerPort">9066</property>

<user name="mycat">
<property name="password">123456</property>
<property name="schemas">mycat_db</property>
</user>




2.配置schemas.xml 关联逻辑库与物理库,以及配置主机节点等
# vi /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="
">http://io.mycat/">

<schema name="mycat_db" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<!--splitTableNames 启用<table name 属性使用逗号分割配置多个表,即多个表使用这个配置-->
</schema>

<dataNode name="dn1" dataHost="localhost1" database="stu_db" />

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
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.182.150:3306" user="admin"
password="Uplooking_123">
<readHost host="hostS1" url="192.168.182.151:3306" user="admin" password="Uplooking_123" />
</writeHost>


<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
</mycat:schema>



===========================================================
<!--

balance目前取值4种:
'0':不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
'1':全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说:"当双主双从模式(M1->S1,
M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。"
'2':所有读操作都随机的在writeHost、readhost上分发。(所有节点负载均衡)
'3':所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力(读负载均衡)

switchType指的是切换的模式,目前的取值也有4种:
switchType='-1' 表示不自动切换
switchType='1' 默认值,表示自动切换
switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
switchType='3' 基于MySQL galary cluster的切换机制(适合集群)心跳语句为 show status like 'wsrep%'

writeType:
该属性涉及节点主机中个物理节点的写负载模式问题。
MyCat目前支持最好或者说推荐的设置值就是0。
writeType=0,所有写操作发送到配置的第一个writeHost,如果第一个writeHost挂了,则切到还生存的第二个writeHost。
重新启动后已切换后的为准,切换记录在配置文件dnindex.properties中。
wirteType=1 所有的写操作 随机的分担到writeHost 主机

-->
==========================================================

3.启动mycat
建议先以 console模式启动mycat查看是否有语法错误,如果没有错误在以start模式启动在后台
# /usr/local/mycat/bin/mycat console

Ctrl+c

# /usr/local/mycat/bin/mycat start
Starting Mycat-server...
# /usr/local/mycat/bin/mycat status
Mycat-server is running (9743).

# netstat -nlpt
tcp6 0 0 :::7306 :::* LISTEN 9745/java -----7306 mycat 数据操作端口 默认端口8066
tcp6 0 0 :::9066 :::* LISTEN 9745/java -----9006 mycat 管理端口


4.登陆mycat测试
>在主服务器建立逻辑库mycat_db对应的物理库 stu_db
mysql150 > create database stu_db;

建info表
mysql150 > create table info(
-> uid int(10) NOT NULL,
-> name varchar(32) NOT NULL,
-> sex enum('男','女') NOT NULL,
-> PRIMARY KEY (uid)
-> )default charset=utf8;

测试写
>通过mycat登陆测试
192.168.182.11 为mycat主机的IP
-umycat -p123456 -P7306 用户、密码、端口都是在mycat server.xml所配置的
mysql -umycat -p123456 -P7306 -h192.168.182.11
mysql(mycat)> show databases;
+----------+
| DATABASE |
+----------+
| mycat_db |
+----------+
1 row in set (0.00 sec)
mysql(mycat)> use mycat_db;
mysql(mycat)> insert into info values(1,"abc",'男');
mysql(mycat)> insert into info values(2,"king",'男');

然后在主150 从151上select查看,如果两台机器都有刚插入的数据,则证明通过mycat将数据按我们的期许写到了 主服务器150中。(为啥?自己根据架构好好想想)
mysql150> select * from info;
+-----+------+-----+
| uid | name | sex |
+-----+------+-----+
| 1 | abc | 男 |
| 2 | king | 男 |
+-----+------+-----+

mysql151> select * from info;
+-----+------+-----+
| uid | name | sex |
+-----+------+-----+
| 1 | abc | 男 |
| 2 | king | 男 |
+-----+------+-----+

==========================================================
测试读:
在从服务器上故意插入一条新纪录,造成主从的数据差异
mysql151> insert into info values(3,"jack",'男');
Query OK, 1 row affected (1.41 sec)

mysql151> select * from info;
+-----+------+-----+
| uid | name | sex |
+-----+------+-----+
| 1 | abc | 男 |
| 2 | king | 男 |
| 3 | jack | 男 |
+-----+------+-----+


mysql150> select * from info;
+-----+------+-----+
| uid | name | sex |
+-----+------+-----+
| 1 | abc | 男 |
| 2 | king | 男 |
+-----+------+-----+


在通过mycat再次查询数据,如果只能看到与从 151相同的数据,则证明读负载在从节点
mysql -umycat -p123456 -P7306 -h192.168.182.11
mysql(mycat)> select * from info;
+-----+------+-----+
| uid | name | sex |
+-----+------+-----+
| 1 | abc | 男 |
| 2 | king | 男 |
| 3 | jack | 男 |
+-----+------+-----+
3 rows in set (0.00 sec)