1 实训二前期LNMP简易架构 1.1 php server安装 |
1.2 安装初始化数据库 |
2 Mysql数据库 |
2.1 Mysql5.7安装 |
2.1.1 rpm安装 |
2.1.2 yum安装 |
2.1.3 源码安装 |
2.1.4 编译好的非rpm包安装 |
2.1.5 my.cnf常见选项 |
2.2 Mysql基础 |
2.2.1 MySql数据库操作 |
2.2.2 MySql数据类型 |
2.2.2.1 整型 |
2.2.2.2 浮点数和定数 |
2.2.2.3 字符串类型 |
2.2.2.4 日期和时间类型 |
2.2.2.5 字段修饰和约束 |
2.2.2.6 业务建表练习 |
2.2.3 MySql表操作 |
2.2.4 MySql体系结构 |
2.2.5 MySql存储引擎 |
2.3 MySql操作 |
2.3.1 MySql数据操作 |
2.3.2 MySql单表查询 |
2.3.3 MySql多表查询 |
2.3.4 MySql存储过程与函数 |
2.4 MySql操作-2 |
2.4.1 MySql安全机制 |
2.4.2 MySql日志管理 |
2.4.3 MySql复制概述 |
2.4.4 主从同步 |
2.5 最基本sql语句及主从架构 |
2.6 MyCat中间件 |
2.6.1 部署Mycat |
2.6.2 配置读写分离 |
2.6.2.1 安全的读写分离 |
2.6.3 XML语法格式 |
2.6.4 mycat 分表分库 |
2.7 Mysql MHA |
2.7.1 MHA-部署 |
2.7.2 MHA-故障切换VIP透明 |
2.7.2.1 VIP切换脚本内容 |
2.7.2.2 VIP-手动在线切换脚本 |
2.7.3 MHA+Mycat高可用Mysql读写分离 |
2.7.4 MHA+VIP+Mycat |
2.7.5 MHA-故障切换邮件报警 |
2.7.6 自动配置Slave主机 |
3 实验 |
3.1 mysql授权问题 |
3.2 1.单节点数据库 |
3.3 2.主从同步 |
3.4 3.实验(高可用) |
3.4.1 高可用keepalived |
3.4.1.1 keepalived install |
3.5 4.实验(高可用+大并发) |
3.5.1 HAproxy代理 |
3.6 4.实验(mycat-读写分离) |
3.6.1 mycat安装部署 |
3.6.2 读写分离高可用 |
3.6.3 mycat管理端口命令 |
3.7 5.双主双从-读写分离-高可用 |
3.8 6.mycat分库操作 |
3.9 7.mycat分表 |
3.10 8.mycat分库分表之下实现读写分离 |
4 Shell脚本编程 |
5 Zabbix监控 |
5.1 zabbix设置邮件报警--自定义报警媒介 |
5.2 zabbix解决中文界面乱码问题 |
5.3 ziabbix自带的template Linux OS |
5.4 zabbix-agent自定义收集数据 |
5.5 zabbix监控Nginx性能 |
5.6 综合配置 |
5.7 实验:监控nginx端口实现告警 |
6 ELK日志分析 |
6.1 PS |
6.2 es-head插件安装 |
6.3 安装filebeat nginx日志模板 |
实际业务中对于书局库的操作往往 读 远大于 写,因此为提高架构性能,可以通过mycat实现读写分离。一般基础架构为主从结构,一主一从或多从、双主多从,主节点负责处理写操作,从节点负责读操作。
一主一从架构下的读写分离:
===============================================================
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)
|