注意事项
1.数据库主从配置
重置二进制日志文件
2.tomact服务器脚本
线上部署命令 日志命令 linux脚本
3.数据库代理
mycat实现读写分离
mycat实现高可用
4.redis说明: 安装 配置 入门命令
1. 实现数据库主从配置
1.1 配置主库
1.1.1 开启主库二进制文件
1).修改主库核心配置文件 my.cnf
vim /etc/my.cnf
2).添加2行配置(不同数据库的编号不同)
server-id=1
log-bin=mysql-bin
1.1.2 重启mysql数据库
说明:当修改好my.cnf文件之后,需要重启数据库,使得二进制文件生效,并检查二进制日志文件是否存在.
可以看到:000001,代表数据库重启的次数为一次。
1.2 配置从库
说明:步骤同上,注意server-id的号不能重复。
1.3 实现主从的挂载(配置主从关系)
1.3.1 挂载分析
主库: 192.168.126.129 master
从库: 192.168.126.130 slave
1.3.2 检查主库状态信息(选中执行)
File:二进制文件名。
Position:从上一次读取数据的位置(不可能是从头读)。
1.3.3 实现主从挂载(在130挂载)
注意:
(1) 1 ,2, 3这几步分开执行,不要选中完后一块执行,若出现错误执行4,5。
(2) 这是在从库当中进行写的。
/*1.实现主从的挂载 主库:ip 用户名 密码 二进日文件 位置*/
CHANGE MASTER TO MASTER_HOST="192.168.126.129",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=245
/*2.启动主从服务*/
START SLAVE
/*3.主从同步的校验*/
SHOW SLAVE STATUS
/*4.如果报错 则重新配置*/
STOP SLAVE
/*5.重新搭建主从将上述命令重新执行一遍*/
效果:
出现yes代表成功.
1.3.4 主从同步测试
修改主库中的数据,检查从库数据是否同步即可。
解释,因为此时只配置了主从同步,现在修改的是主库可以看到从库的数据也跟着变化,说明配置成功。
1.3.5 关于重置二进制日志文件的说明
注意:二进制文件多没有关系。
问题描述: 有时重启多次主机之后,会生成多个二进制文件信息.如图所示
解决方案: 删除多余的二进制日志文件,之后重启数据库,然后先导入导出sql文件保证2个数据库的数据相同,最后重新挂在即可。
2. 作业
现在是一台主机里面有3台tomact服务器,连接一个主库,一个从库。下面这些是为了负载均衡更加明显。可以不配置。
1.实现linux项目部署
129: 8081 8082 8083
130: 8081 8082 8083
要求所有的tomact服务器都连接主库 注意ip地址(因为现在有2个linux系统,即2个ip地址,如果都写localhost则没办法连接主机,所以都改为连接主库的ip(129))
2.部署2台从数据库 129主机 130/131 从 一主二从的结构
3.有bug 关于图片的 暂时忽略 思考为什么会产生这个现象。
3 关于tomcat服务器脚本
3.1 问题说明
如果通过命令: java -jar xxx.war
的方式启动服务器时,如果远程的终端关闭之后,那么tomcat服务器也会随之关闭.影响用户的使用. (上述的命令表示前台运行).
3.2 线上部署的命令
说明: 一般在Linux系统中部署服务器一般采用后端运行的方式(终端即使关闭,程序也不会关闭掉):启动tomcat服务器,并且指定日志文件输出.
命令: nohup java -jar 8081.war -> 8081.log &
解释:执行项目8081.war,并把日志文件指定写到8081.log日志文件,如果有后续操作在写上 &.(之前的普通写法,日志直接输出来了,这样会占用终端。)
3.3 关于日志命令的说明
cat: 输出文件所有的内容(小文件检索都可以用,大文件最好不要用cat,因为太大都加载到内存,可能会导致电脑卡死)
more :输出文档所有的内容,分页输出,空格浏览下一屏,q退出
less: 用法和more相同,只是通过PgUp、PgOn键来控制 q退出(比如: less 8081.log)
tail :用于显示文件后几号,使用频繁
tail -10 nginx.conf:查看nginx.conf的最后10行
tail –f nginx.conf: 动态查看日志,方便查看日志新增的信息
ctrl+c :结束查看
例如:
3.4 Linux 脚本说明
说明: Linux中的"脚本"(外挂-荒野行动)的后缀为.sh
。(window里面叫.bat
)
需求:想要同时启动多台tomact服务器。
1).创建文件: vim start.sh
(start是个名字随便写,后缀必须为sh)
2).编译脚本
3).执行脚本:
4 数据库代理说明
4.1 数据库结构的优化
说明:由于需要用户同时链接2台甚至多台数据库时需要引入代理,所以有如下的部署.
注意事项: 用户连接代理服务器端口号一般:8066
端口(约定俗成的代理服务器端口号)
解释:一般用户是读数据比较多,可以把写用于主数据库,读数据用从库,将来布置多个从库就可以降低数据库的压力。但是数据库连接只能连接一台服务器,解决:改为连接代理服务器进行分发(即:用户连代理,代理连接真实的服务器)。
4.2 Mycat介绍
阿里写的。
我们这里用的是数据库的分离功能。
4.3 实现数据库读写分离机制
4.3.1 上传mycat安装包
注意:课前资料的是linux版本。
步骤:
1.)上传—解压:tar -zxvf Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz
2). 把安装包移动到指定目录统一管理。
4.3.2 检查JDK是否安装
说明:它是阿里巴巴底层用java语言写的,所以启动需要安装jdk ,我们这里主库安装了jdk所以上传到主库。
检查:java -version
4.3.3 编辑配置文件-server.xml
说明一:bak文件不重要,删了都没事。
说明二:在server.xml配置文件中定义用户名和密码及操作的数据库信息,必须与YML配置文件一致.
<property name="serverPort">8066</property>
<!--用户标签 连接服务器代理的用户名和密码-->
<user name="root">
<property name="password">root</property>
<!--与schema.xml中的配置相同 注意数据库的大小写 表示用户将来可以看到的数据库有哪些 管理多个就用','分割-->
<property name="schemas">jtdb</property>
</user>
<!--只读操作-->
<user name="user">
<property name="password">user</property>
<property name="schemas">jtdb</property>
<property name="readOnly">true</property>
</user>
2).修改 YML配置文件,现在连接的是代理服务器。
4.3.4 编辑schema配置文件
说明:schemas文件主要的作用就是配置数据库读写的策略.
注意:先把高可用配置注释掉。(因为这里还没讲到)
<!--写数据库1-->
<writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
<!--读数据库1-->
<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
<!--读数据库2-->
<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
</writeHost>
4.3.5 替换配置文件
说明:先把conf目录下的2个文件删掉(选中点击叉号删除),然后把改好的2个xml文件替换掉主库里面的文件 .
4.3.6 启动mycat服务测试
说明:
1)进入到mycat–>bin目录执行命令:./mycat
2)绿色为脚本文件,有后缀就用.sh 无后缀就用./
启动:./mycat start
(根据提示可以选择不同的命令)
查看启动的状态看是否启动:./mycat status
(等5秒后多启动几次每次说明成功。数据库5秒连接不成功会报错。)
测试:因为用linux还需要重新打包发布项目,所以暂时用windows系统测试。
url:localhost:8081
4.4 Mysql实现高可用
4.4.1 高可用说明(HA)
说明:根据规则当服务器发生宕机现象时,可以自动的实现程度的故障的迁移称之为高可用.
问题描述:主库宕机,数据读写都用了从库,主库修好以后再继续备份时,从库比主库的数据还多,此时io会挂掉在同步数据,写的操作在主库库读的操作在从库,这样会导致主库数据越来越多无法保持一致,这个高可用也没有作用了,如何解决呢??? 双主机模式
4.4.2 数据库双主模式说明
说明:在工作中一般采用双主模式来实现数据库高可用. 本质上来讲2台数据库都是主机.只是人为的进行了主从的划分,2台数据库数据互为同步。
4.4.3 实现数据库双向绑定.
上午配置: 由主库129 将数据同步给从库130
下午配置: 由库130 将数据同步给主库129
注意:这里是在主库中进行挂载。
1).检查主库的状态(这里把130当做主库)
2).实现主从的搭建(在129里面进行挂载)
/*实现主从的挂载 日志文件,端口号写你查询出主库里面的是啥就写什么*/
CHANGE MASTER TO MASTER_HOST="192.168.126.130",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=477
/*启动主从服务 */
START SLAVE
/*检查主从状态*/
SHOW SLAVE STATUS;
4.4.4 Mycat实现数据库高可用配置
1).把配置文件之前的注释配置放开。
2).关闭mycat服务,并上传修改后的配置文件(先把原来的删除)
3).重启mycat配置
4.4.5 数据库高可用测试
说明: 一般数据库的端口号就是3306 tomact默认的就是8080 数据库代理服务器默认8066
注意: 暂时用windows测试即可,因为改了代码linux还需要重新发布打包太麻烦。
测试步骤:
1.关闭主数据库,之后检索数据,检查用户的访问是否受限.
此时主数据库关闭了,查询只能从从库查寻数据。页面回显正确说明数据可以重从库查询。
2.修改数据库记录,检查用户的操作是否正常. (操作的是从库)
此时修改数据修改的是从库数据。
3.重启主数据库 之后检查从库的数据是否同步.
可以看到重启后的129数据库的数据也跟着变化,说明配置正确。
5 关于服务缓存说明
5.1 还原程序(还原为Windows系统)
5.1.1 修改YML配置文件
5.1.2 修改images.properties文件图片路径
5.1.3 修改Nginx配置文件
5.1.4 修改hosts文件
5.2 关于缓存机制的说明
说明:使用缓存可以有效的降低用户访问物理设备的频次.快速从内存中获取数据,之后返回给用户,同时需要保证内存中的数据就是数据库数据.
思考如果开发缓存需要从那些方向考虑呢???
1.缓存的运行环境应该在内存中.(快)
2.使用C语言开发缓存
3.缓存应该使用什么样的数据结构呢--------K-V结构 一般采用String类型居多 key必须唯一 . v:JSON格式
4.内存环境断电即擦除,所以应该将内存数据持久化(执行写盘操作)
5.如果没有维护内存的大小,则容易导致 内存数据溢出. 采用LRU算法优化!!!
5.3 Redis介绍
官网:redis.io
中文网:redis.cn
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
面试题: Redis支持5种数据类型.
速度快: 读 11.2万次/秒 写 8.6万次/秒 平均大约10万次/秒
原子性说明: Redis的操作是单进程单线程操作,所以没有线程并发性的安全问题. 采用队列的方式一个一个操作.
Redis常见用法:
1.Redis可以当做缓存使用
2.Redis可以当做数据库使用 验证码(比如手机发送验证码,验证码就存在Redis中)
3.Redis可以消息中间件使用 银行转账等
Redis默认端口号:6379
名词解释:
redis当做数据库是非关系型数据库:一维表,行和列都是一样的。
mysql是关系型数据库:二维表,有行有列。
消息中间件:
数据库连接最多1000个,现在有2000个数据需要操作。数据库只能1000个1000个的处理,但是一般超过5秒没有处理掉的话就会报超时而且用户在处理的过程中不能干其它事情。所以为了解决后端服务器所带来的问题就引入了中间件,可以当做队列使用,队列作用2端开口,先把数据存入队列,用户可以通过服务端异步的操作执行一些操作。然后队列中的数据一个一个的处理,后台服务器处理完之后会返还给客户一个消息的确认,一般都是ACk.客户端看到返还后的ACK就表示程序处理完了,然后携带正确的数据客户端进行下一步的操作。
注意这是后端的异步和Ajax的异步不一样。优势是可以有效地保护后端服务器。
5.4 Redis安装
5.4.1 上传安装包
.tar.gz可以看出放在linux系统。
5.4.2 解压Redis
1).解压 redis文件
2).移动文件
5.4.3 安装Redis
要求:在redis的根目录中执行。
命令1: make
执行完效果。
命令2: make install
5.4.4 修改Redis配置文件
命令: vim redis.conf
;
显示行号::set nu
, 通过方向键上下移动.
修改1): 将IP绑定注释,即这个Redis服务器只允许本机访问,所以注释掉。
(c语言用#注释。)
修改2):关闭保护模式 (类似于数据库的访问权限) ,6379 redis的默认端口号。
修改3):开启后台运行。
5.4.5 关于Redis命令
1).启动命令: redis-server redis.conf
2).校验服务是否运行正常 :万能的检索命令 ,只需要把后面的名字换掉 如mycat(ps -ef | grep redis
)
3).进入客户端命令: redis-cli -p 6379
解释:
-p是连接的客户端.
因为默认的端口号是6379 ,所以可以直接写: redis-cli
.
存数据:set k v
(存取值是 k–v结构)
取数据:get k
(根据k获取v)
跳出客户端 :ctrl +c、 exit、quit
关闭Redis命令:先退出客户端。
方式1:先查询进程号,在杀死。
方式2. redis-cli -p 6379 shutdown
(同理:redis-cli shutdown)
里面的命令 资料里 也可以在官网中查询更全的.