1.逻辑部署架构
2.系统优化、安装软件及优化
2.1 8台服务器的系统优化
2.1.1编辑文件/etc/sysctl.conf,将2.1.1.2系统内核参数调优添加项添加到sysctl.conf文件中。
[root@V_wangshenweb01 ~]# vi /etc/sysctl.conf
2.1.1.1系统默认参数配置的含义
#禁用包过滤功能
net.ipv4.ip_forward = 0
#启用源路由核查功能
net.ipv4.conf.default.rp_filter = 1
#禁用所有IP源路由
net.ipv4.conf.default.accept_source_route = 0
#使用sysrq组合键是了解系统目前运行情况,为安全起见设为0,表示关闭
kernel.sysrq = 0
#控制core文件的文件名是否添加pid作为扩张
kernel.core_uses_pid = 1
#开启SYN Cookies,当出现SYN等待队列溢出时,启用coookies来处理
net.ipv4.tcp_syncookies = 1
#禁用网桥上的netfilter
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
#每个消息队列的大小(单位:字节)限制
kernel.msgmnb = 65536
#整个系统最大消息队列数量限制
kernel.msgmax = 65536
#单个共享内存段的大小(单位:字节)限制,计算公式64G*1024*1024*1024(字节)
kernel.shmmax = 68719476736
#所有内存大小(单位:页,1页=4kb),计算公式64G*1024*1024*1024/4KB(页)
kernel.shmall = 4294967296
2.1.1.2系统内核参数调优添加项
#additional
#记录的那些尚未收到客户端确认信息的连接请求的最大值,对于超过128M内存的系统,缺省值为1024,低于128M小内存的系统则为128
net.ipv4.tcp_max_syn_backlog = 16384
#每个网络口接受数据包的速率比内核处理这些包的速率快,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 20000
#调整系统同时发起并发TCP连接数,可能需要提高连接的储备值,以应对大量突发入局连接请求的情况。
net.core.somaxconn = 2048
#该参数指定了发送套接字缓冲区大小的缺省值(以字节为单位)
net.core.wmem_default = 262144
#该参数指定了接收套接字缓冲区大小的缺省值(以字节为单位)
net.core.rmem_default = 262144
#该参数指定了接收套接字缓冲区大小的缺省值(以字节为单位)
net.core.rmem_max = 16777216
#该参数指定了发送套接字缓冲区大小的缺省值(以字节为单位)
net.core.wmem_max = 16777216
#tcp_mem有三个INTEGER变量:low,pressure,high
Low:TCP使用了低于该值的内存页面数时,TCP没有内存压力,TCP不会考虑释放内存
Pressure:TCP使用超过该值的内存页面时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure模式
High:允许所有TCP Sockets用于排队缓冲数据报的页面量
net.ipv4.tcp_mem = 786432 2097152 3145728
#TCP读buffer
net.ipv4.tcp_rmem = 4096 4096 16777216
#TCP写buffer
net.ipv4.tcp_wmem = 4096 4096 16777216
#表示开启TCP连接中TIME-WAIT Scokets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
#表示开启重用,允许将TIME-WAIT Scokets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
#如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也会有因为大量的死套字而内存溢出的风险,FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5k内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 15
#系统所能处理不属于任何进程的TCP sockets 最大数量
net.ipv4.tcp_max_orphans = 131072
#将系统对本地端口范围限制设置为1024-65535之间
net.ipv4.ip_local_port_range = 1024 65535
#表示文件句柄的最大数量
fs.file-max = 209708
#内核允许超量使用内存知道用完为止,默认值为0,表示当用户请求更多的内存时,内核尝试估算出剩余可用的内存。当这个参数设为2时,内核会使用一个绝不过量使用内存的算法,即使整个系统内存地址空间不能超过swap+50%的RAM值,50%参数的设定实在overcommit_ratio中设定。
vm.overcommit_memory=1
2.2 8台服务器的最大句柄数设置
[root@jdap01 ~# vi /etc/security/limits.conf
添加以下内容,如果有,则修改为以下内容
* soft nofile 209870
* hard nofile 209870
[root@V_wangshenweb01 ~]# etc/security/limits.d/90-nproc.conf
把nproc也要改成209870,不用是默认的1024.
2.3 在195.203.1.6~9服务器上安装jdk1.7.0_79、ftp以及tomcat7.0(每台服务器的安装方式一样)
2.3.1安装JDK1.7.0_49
1创建java目录,把压缩包放到java目录下
[root@V_wangshenweb01 ~]# mkdir /usr/java
2 解压jdk-7u79-linux-x64.tar.gz
[root@V_wangshenweb01 java]# tar -zxvf jdk-7u79-linux-x64.tar.gz
3 修改/etc/profile文件
[root@V_wangshenweb01 ~]# vi /etc/profile
在最下边添加以下内容
JAVA_HOME=/usr/java/jdk1.7.0_79
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$PATH
4 重新刷新profile文件,使修改生效
[root@V_wangshenweb01 ~]# source /etc/profile
5 输入java -version测试jdk是否安装成功
[root@V_wangshenweb01 ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
出现以上内容,则表示安装JDK成功。
2.3.2安装ftp
- 下载ftp安装包vsftpd-2.0.5-16.e15_4.1.x86_64.rpm安装服务端
用命令查看是否安装过rpm的ftp
[root@V_wangshenweb01 ~]# rpm -qa |grep vsftpd
- 没有,用rpm安装
[root@V_wangshenweb01 ~]# rpm -ivh vsftpd-2.0.5-16.e15_4.1.x86_64.rpm
3.编辑vsftpd.conf文件,查看dirmessage_enable=yes,如果为no,改为yes
[root@V_wangshenweb01 ~]# vi /etc/vsftpd/vsftpd.conf
- 查看vsftpd状态
[root@V_wangshenweb01 ~]# chkconfig --list|grep vsftpd
如果为以下状态
vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
则开启状态
[root@V_wangshenweb01 ~]# chkconfig vsftpd on
5.启动vsftpd服务
[root@V_wangshenweb01 ~]# service vsftpd start
6.下载ftp安装包ftp-0.17-54.e16.x86_64.rpm安装客户端
[root@V_wangshenweb01 ~]# rpm -Uvh ftp-0.17-54.e16.x86_64.rpm
- 安装完成,输入ftp命令,进入ftp
[root@V_wangshenweb01 ~]# ftp
ftp>
安装ftp成功!!!
2.3.3安装tomcat7.0
1.通过xftp把apache-tomcat-7.0.64.tar.gz放到/usr/local目录下
(1)解压apache-tomcat-7.0.64.tar.gz
[root@V_wangshenweb01 local]# tar -zxvf apache-tomcat-7.0.64.tar.gz
(2)修改解压完的目录为tomcat7
[root@V_wangshenweb01 local]# mv apache-tomcat-7.0.64 tomcat7
(3) 进入/tomcat7/conf下,修改server.xml文件,调整最大线程数, URLEncoding 改为UTF-8, NIO 替换BIO(此步骤为优化tomcat服务)
[root@V_wangshenweb01 conf]# vi server.xml
把原有的:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8453" maxThreads="5000-8000" acceptCount="1000" URLEncoding="UTF-8" />
退出并保存(:wq)或(ZZ)
5.测试tomcat是否安装成功
[root@V_wangshenweb01 bin]# ./startup.sh
[root@V_wangshenweb01 bin]# curl http://localhost:8080
出现以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Tomcat/7.0.57</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
..............
说明安装成功!!
2.3.4安装tomcat的jsvc守护进程(此步骤为优化tomcat服务)
1.添加tomcat用户及用户组
[root@V_wangshenweb01 ~]# groupadd tomcat
[root@V_wangshenweb01 ~]# useradd -g tomcat tomcat
2.改变tomcat的用户及用户组
[root@V_wangshenweb01 ~]# chown -R tomcat /usr/local/tomcat
[root@V_wangshenweb01 ~]# chgrp -R tomcat /usr/local/tomcat
3.切换用户为tomcat
[root@V_wangshenweb01 ~]# su tomcat
4.进入tomcat下的bin目录,解压 commons-daemon-native.tar.gz
[tomcat@V_wangshenweb01 bin]# cd /usr/local/tomcat7.0.57/bin/
[tomcat@V_wangshenweb01 bin]# tar -zxvf commons-daemon-native.tar.gz
5.得到文件commons-daemon-1.0.15-native-src,进入nuix目录
[tomcat@V_wangshenweb01 bin]# cd commons-daemon-1.0.15-native-src/unix/
6.发现configure配置文件并编译,做如下操作
[tomcat@V_wangshenweb01 unix]# chmod 777 configure
[tomcat@V_wangshenweb01 unix]# ./configure
[tomcat@V_wangshenweb01 unix]# make
7.编译完成后出现jsvc文件夹 复制到/usr/local/tomcat7.0.57/bin
[tomcat@V_wangshenweb01 unix]# cp jsvc /usr/local/tomcat7.0.57/bin
8.把bin目录下的daemon.sh复制到/etc/init.d/tomcat
注:此时要把用户切换为root,否则会提示权限不够
[root@V_wangshenweb01 bin]# cp ./daemon.sh /etc/init.d/tomcat
9.修改/etc/init.d/tomcat
[root@V_wangshenweb01 bin]# vi etc/init.d/tomcat
在#!/bin/sh下添加以下内容
# chkconfig:2334 90 15
# description Tomcat-en Manager
在# resolve links - $0 may be a softlink下添加以下内容
#jdk的位置
JAVA_HOME=/usr/java/jdk1.7.0_79
#tomcat的位置
CATALINA_HOME=/usr/local/tomcat
DAEMON_HOME=$CATALINA_HOME/bin
#使用tomcat身份启动
TOMCAT_USER=tomcat
CATALINA_BASE=$CATALINA_HOME
CATALINA_OPTS="-server -XX:MaxPermSize=512m -XX:MaxNewSize=512m -Xmx2048m"
保存并退出(:wq)
10.更改tomcat权限
[root@V_wangshenweb01 bin]# chmod 777 /etc/init.d/tomcat
11.添加tomcat服务
[root@V_wangshenweb01 bin]# chkconfig --add tomcat
12.查看服务
[root@V_wangshenweb01 bin]# chkconfig --list|grep tomcat
tomcat 0:off 1:off 2:on 3:on 4:on 5:off 6:off
13.启动tomcat
[tomcat@V_wangshenweb01 bin]# service tomcat start
[tomcat@V_wangshenweb01 bin]# service tomcat stop
2.4 在服务器上安装 nginx及配置nginx和tomcat的负载均衡
2.4.1安装nginx
1.添加nginx用户及用户组
[root@V_wangshenweb01 ~]# groupadd nginx
[root@V_wangshenweb01 ~]# useradd -g nginx nginx
2.把nginx-1.10.2.tar.gz压缩包拷贝到/usr/local/目录下并解压
[root@V_wangshenweb01 local]# tar -zxvf nginx-1.10.2.tar.gz
3.给解压好的文件nginx-1.10.2重命名为nginx
[root@V_wangshenweb01 local]#mv nginx-1.10.2 nginx
4.进入conf目录下将nginx.conf移动到nginx目录下然后对其进行修改
[root@V_wangshenweb01 nginx]#cd conf
[root@V_wangshenweb01 conf]#cp nginx.conf /usr/local/nginx
[root@V_wangshenweb01 nginx]#vi nginx.conf
#修改内容如下:
user nginx nginx;
worker_processses 2;
error_log /usr/local/nginx/logs/nginx_error.log;
pid /usr/local/nginx/logs/nginx.pid;
events{
worker_connections 65535;
}
5.进行初始化设置并编译(安装了很多的第三方模块,需要相应第三方模块的压缩包)
[root@V_wangshenweb01 nginx]#./configure --prefix=/etc/nginx/ --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_flv_module --with-http_mp4_module --with-http_ssl_module --with-pcre --with-luajit --add-module=../ngx_cache_purge-2.3/ --add-module=../nginx_upstream_check_module-0.3.0/ -j2 --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-file-aio --with-http_v2_module
——————————安装参数详解————————————-
--prefix=<path> nigix安装的根路径,所有其他路径都要依赖该选项
--sbin-path=<path> 指定nginx二进制文件的路径,没指定的话,这个路径依赖--prefix选项
--conf-path=<path> 如果在命令行未指定配置文件,那么将会通过这里指定的路径,nginx将会去那里查找它的配置文件
--error-log-path=<path> 错误文件路径,nginx写入错误文件的地址,除非有其他配置
--pid-path=<path> nginx master进程pid写入的文件位置,通常在/var/run下
--lock-path=<path> 共享存储器互斥锁文件夹
--user=<user> worker进程运行的用户
--group=<group> worker进程运行的组
--with-file-alo 为freeBSD4.3+和linux2.6.22+系统启动io
--with-debug 启动测试日志,生产环境不推荐
--with-http_flv_module 允许ngx_http_flv_module模块(mod_flvx),这个模块支持对FLV(flash)文件的拖动播放
--with-http_mp4_module 支持H。264/AAC文件为伪流媒体
--with-http_ssl_module 如果需要对流量加密,可使用此选项,在urls中开始部分将会是https(需要openssl库)
--with-pcre 设置PCRE库的源码路径如果使用yum方式安装,使用--with-pcre自动找到库文件,使用--with-pcre=path,需要从PCRE网站下载pcre库的源码并解压
--add-module=../ngx_cache_purge-2.3/ 添加第三方外部模块ngx_cache_purge-2.3
--add-module=../nginx_upstream_check_module-0.3.0/ 添加第三方外部模块nginx_upstream_check_module-0.3.0/
--with-http_realip_module 允许ngx_http_reallp_module(mod_rpaf),此模块支持显示真实来源IP地址,主要用于NGINX做前端负载均衡服务器使用,如果你的nginx在七层负载均衡器或者其他设备之后,它们将Http头中的客户端Ip地址传递,这时需要启用此模块,在多个客户处于一个Ip地址的情况下使用
--with-http_addition_module 作为一个输出过滤器,使你能够在请求经过一个location前或后时在该location本身添加内容
--with-http_sub_module 允许ngx_http_sub_module模块,这个模块可以能够在nginx的应答中搜索并替换文本
-with-http_gzip_static_module 允许ngx_http_gzip_static_module(mod_dflate)模块,这个模块子啊一个预压缩文件传送到开启Gzip压缩的客户端之前检查是否已经存在以".gz"结尾的压缩文件,这样可以防止文件被重复压缩
--with-http_random_index_module 允许ngx_random_index_module 模块(mod_autoindex),从目录中选择一个随机主页
--with-http_secure_link_module 该模块提供一种机制,它会将一个哈希值链接到一个url中,因此只有那些使用正确的密码能够计算链接
--with-http_stub_status_module 这个模块可以取得一些nginx的运行状态,如果是工业状况,可以直接取消,输出的状态信息可使用RRDtool或者类似的工具绘制成图
-with-http_v2_module 这个模块在https上速度比http还要快
———————————————-安装参数解释完毕——————————————-
[root@V_wangshenweb01 nginx]#make
[root@V_wangshenweb01 nginx]#make install
6.进入nginx/sbin目录,启动nginx
[root@V_wangshenweb01 sbin]#./nginx
可能遇到以下问题
./nginx:error while loading shared libraries:libpre.so.1 accnot open shared object file :No such file or directory
解决方法如下:
建立软链接:ln -s /usr/local/lib/libpre.so.1 /lib64/
7.再次启动nginx并测试curl http://localhost:80/
[root@V_wangshenweb01 sbin]#./nginx
[root@V_wangshenweb01 sbin]#.curl http://localhost:80/
安装nginx成功!!!
2.4.2配置nginx和tomcat负载均衡
- 修改nginx目录下的nginx.conf文件
[root@V_wangshenweb01 nginx]#vi nginx.conf
在http的大括号里面的access_log下面加上以下内容:
upstream tomcats{
server 195.203.1.6:8080;
server 195.203.1.7:8080;
server 195.203.1.8:8080;
server 195.203.1.9:8080;
}
然后在location /{}里加入以下内容:
root html;
index index.html index.htm;
proxy_pass http://tomcats;
proxy_redirect default;
2.保存并退出nginx.conf(:wq)
3.此时将四台服务器的tomcat都开启,然后开启两台nginx,然后在nginx服务器上面分别访问curl http://localhost:8080就可以随机访问四台tomcat的欢迎页面了。
配置成功!!!
2.5 在1服务器上安装mysql、mysql的主从配置以及mysql的参数优化
2.5.1在安装mysql
1.将安装包mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz拷贝到/usr/local/下(建议此目录),然后解压
[root@jdap01 local]# tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
2.解压后重命名
[root@jdap01 local]# mv mysql-5.7.18-linux-glibc2.5-x86_64 mysql
3.新建用户和用户组,并授权
[root@jdap01 local]# groupadd mysql
[root@jdap01 local]# useradd msyql -g mysql
[root@jdap01 local]# chown mysql -R ./mysql/
[root@jdap01 local]# chgrp mysql -R ./mysql/
4.修改/usr/local/mysql/support-files目录下的mysql.server文件
设置值如下:
basedir= /usr/local/mysql
datadir= /usr/local/mysql/data
5.执行mysqld 脚本,初始化表空间
[root@jdap01 local]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir= /usr/local/mysql --datadir= /usr/local/mysql/data --character-set-server=utf8
如果报错,显示剩余空间不足,则将命令改为:
【报错内容如下:
2017-04-14T07:29:15.992800Z 0 [ERROR] InnoDB: Error number 28 means 'No space left on device'
2017-04-14T07:29:15.992830Z 0 [ERROR] InnoDB: Could not set the file size of './ibdata1'. Probably out of disk space
2017-04-14T07:29:15.992851Z 0 [ERROR] InnoDB: InnoDB Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.
2017-04-14T07:29:16.594143Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2017-04-14T07:29:16.594212Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2017-04-14T07:29:16.594226Z 0 [ERROR] Failed to initialize plugins.
2017-04-14T07:29:16.594233Z 0 [ERROR] Aborting】
将命令修改为:
[root@jdap01 local]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir= /usr/local/mysql --datadir= /var/data --character-set-server=utf8
这里将会生成mysql数据库root用户的初始密码,注意保存!
然后回去修改/usr/local/mysql/support-files目录下的mysql.server文件
设置值如下:
basedir= /usr/local/mysql
datadir= /var/data
6.执行/usr/local/mysql/bin目录下的mysqld_safe脚本(注:删除系统自动生成的/etc/my.cnf文件,用我们给的my.cnf文件)
[root@jdap01 local]#rm -rf /etc/my.cnf
[root@jdap01 local]# /usr/local/mysql/bin/mysqld_safe --user=mysql
[root@V_wangshenweb01 support-files]# ./mysql.server start
7.启动mysql客户端:
[root@jdap01 local]# ./mysql/bin/mysql -uroot -p
Enter password:(输入上面保存的密码)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.18
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
安装成功!!
8.修改mysql的密码,命令如下:
mysql> SET PASSWORD FOR'root'@'localhost'=PASSWORD('mysql1234');
即为把密码修改为mysql1234开始使用mysql.
9.输入命令:
mysql> show databases;
显示:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
2.5.2 mysql添加系统配置服务
1.把mysql下的mysql.server配置文件复制到/etc/init.d/mysql
[root@jdap01 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
2.修改mysql服务控制器脚本执行权限
[root@jdap01 ~]# chmod +x /etc/init.d/mysql
3.添加mysql服务加入到系统服务器
[root@jdap01 ~]# chkconfig --add mysql
4.查看服务是否开启(2,3,4,5为on,表示服务开启,如果为off,执行命令chkconfig mysql on)
[root@jdap01 ~]# chkconfig --list|grep mysql
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
5.将mysql的bin目录路径加入到PATH环境变量中
#在最后添加以下内容:
PATH=$PATH:/usr/local/mysql/bin
export PATH
6.执行以下命令,使修改生效
[root@jdap01 ~]# source /etc/profile
7.service启动mysql
[root@jdap01 ~]# service mysql start
Starting MySQL.. [ OK ]
8.进入mysql
[root@jdap01 ~]# mysql -uroot -p
输入密码后,进入mysql,mysql添加系统配置服务成功!!!
2.6配置服务器上mysql的优化
2.6.1修改my.cnf文件,在[mysqld]下添加以下文件,优化mysql
[root@jdap01 ~]# vi /etc/mysql/my.cnf
[mysqld]
#添加以下内容
#统一编码格式为utf-8
character-set-server=utf8
#mysql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接的数量越多,介于mysql会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当的调整该值,不能盲目的提高设值。可以通过‘conn%’通配符查看当前状态的连接数量,以夺定该值的大小
max_connections=2000
#对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行FLUSH HOST.
max_connect_errors = 1000000
#慢查询时间,超过2秒则为慢查询
long_query_time=2
#记录每条mysql执行时间超过long_query_time秒的语句
slow_query_log=on
#慢查询日志文件路径
slow_query_log_file=/home/db/mysqldata/slow.log
#未使用索引的查询也被记录到慢查询日志中(可选),尽量少使用
log_queries-not-using-indexes = 1
#超过15天的binlog删除
expire_logs_days = 15
#禁止Mysql对外部的连接进行DNS解析,使这一选项可以消除Mysql进行DNS解析的时间。但需要注意,如果该选项开启,则所有的远程主机连接授权都要使用ip地址的方式,否则Mysql无法正常处理请求
skip-name-resolve = 1
#mysql选项以避免外部锁定。该选项默认开启
skip_external_locking = 1
#mysql会根据innodb_io_capacity 的值来判断更新的速度能不能再可控的范围之内,如果innodb_io_capacity 设置过大,则会造成mysql高估了磁盘的能力,导致脏页堆积,如果设置过低,则会出现mysql低估了磁盘的能力,使得数据库能够单位时间内提交的事务数降低
innodb_io_capacity = 500
#这个参数控制着innodb数据文件及redo log的打开、刷写模式,有三个值
Fdatasync(默认):写数据时,write这一步并不需要真正的写到磁盘才算完成(可能写到操作系统buffer中就会返回完成),真正完成flush操作,buffer交给操作系统区flush,并且文件的元数据信息也都需要更新到磁盘。
O_DSYNC模式:写日志操作是在write这步完成,而数据文件的写入是在flush这步通过sync完成
O_DIRECT模式:数据文件的写入操作是直接从mysql innodb buffer到磁盘,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲
innodb_flush_method = O_DIRECT
#Innodb事务在被回滚之前可以等待一个锁定的超时秒数。Innodb在它自己的锁定表中自动检测事务死锁并且回滚事务。Innodb用LOCK TABLES 语句注意到锁定设置。默认为50秒
innodb_lock_wait_timeout = 5
#此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。Mysql开发人员建议设置为1-8M之间
innodb_log_buffer_size = 8388608
#开启状态时,所有的deadlocks都会保存在error_log日志中
innodb_print_all_deadlocks = on
#0:如果innodb-flush-log-at-trx-commit的值为0,logbuffer每秒就会被刷日志文件到磁盘,提交事务的时候不做任何的操作(执行是由mysql的master thread线程来执行操作的)
主线程每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否提交,默认的日志文件时ib_logfile0,ib_logfile1
1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。
2:如果设置为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
默认值是1是为了保证完整的ACID。当然,你也可以将这个配置项设置为1以外的值来换取更高的性能,但在系统崩溃的时候将会丢失1秒的数据
设为0的话,mysql进程崩溃的时候,就将会丢失1秒的事务,设为2时,只有在操作系统崩溃的时候或者断电的时候才会丢失1秒的数据。Innodb在做恢复的时候就会忽略这个值
总结:
设为1当然最为安全,但性能也是最差的,如果对数据一致性和完整性要求不高,完全可以设为2,如果只要求性能,例如高并发写的日志服务器,设为0来获得更高性能
innodb_flush_log_at_trx_commit = 2
#带有autoextend属性的表空间文件每次加大64字节,这个属性不涉及具体的数据表文件,那些文件的增大速度相对是比较小的。
innodb_autoextend_increment = 64
#默认设置为0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
innodb_thread_concurrency = 0
#是在访问到sublist of old blocks里面数据的时候控制数据不立即转移到sublist of new blocks区域,而是在1000微妙之后才会真正的进入到new区域,这也是为了防止new区域里的数据不会被立即踢出
innodb_old_blocks_time = 1000
#innodb_buffer_pool_instances 可以开启多个缓冲池,把最需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写
innodb_buffer_pool_instances 参数显著地影响着测试结果,特别是非常高的I/O负载时。
实验环境下,innodb_buffer_pool_instances =8在很小的buffer_poo大小时有很大的不同,而使用的buffer_pool时,innodb_buffer_pool_instances =1 的表现最棒
innodb_buffer_pool_instances = 8
#默认值是1024,控制LRU算法的一个参数,它会影响page cleaner线程每次刷脏页的数量,控制buffer pool后台进程page cleaner刷新脏页的位置。
innodb_lru_scan_depth = 512
#默认值为1,在SSD存储上应设置为0(禁用),因为使用顺序IO没有任何性能收益,在使用RAID的某些硬件上也应该禁用此类装置,因为逻辑上连续的块在物理磁盘上并不能保证也是连续的。
innodb_flush_neighbors = 1
#checksum算法由参数innodb_checksum_algorithm 来控制,默认为crc32算法,还有一种老的算法innodb,这种算法兼容了老版本的mysql,crc32算法无法兼容老版本,
innodb_checksum_algorithm = crc32
#配置的innodb如何保留当前的缓冲池的状态,以避免在服务器冲在重新启动后,还要经历一个漫长的暖机时间,在正常关闭实例时做一次缓存。
innodb_buffer_pool_dump_at_shutdown = on
#指定此参数启动,数据库重启后会自动暖机,再启动实例时读入转储文件中记录的page
innodb_buffer_pool_load_at_startup = on
#表示转存每个bp上最热的page的百分比。通过设置此参数可以减少转储的page数。
innodb_buffer_pool_dump_pct = 40
#innodb使用后台线程处理数据页面上的读写I/O(输入输出)请求,根据你的CPU核参数来更改,默认是4。注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改后重启mysql服务,允许值的范围从1-64
innodb_read_io_threads = 8
innodb_write_io_threads = 8
#Innodb中的清除操作是一类定期回收无用数据的操作。在之前的版本中,清除操作时主线程的一部分,这意味着运行时它可能会堵塞其他的数据库操作。从mysql5.5.x版本开始,该操作运行独立的线程中,并支持更多的并发数。用户可通过设置innodb-purge-threads配置参数来选择清除操作是否使用单独线程,默认情况下参数设置0(不使用单线程),设置为1时表示使用单独的清除线程。建议为1
innodb_purge_threads = 4
innodb_page_cleaners = 4
#nnodb使用一个缓冲池来保存索引和原始数据,不像MylSAM,这里你设置的值越大,你在存取表里面数据时所需要的磁盘I/O越少。在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%。不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸。注意在32位系统上你每个进程可能被限制在2-3.5G用户层面内限制,所以不要设置太高
innodb_buffer_pool_size = 120000M
#Innodb为独立表空间模式,每个数据库的每个表都会生成一个数据空间
innodb_file_per_table=1
#不区分大小写
lower_case_table_names=1
【注意】:
这里面对性能影响比较主要的是:
#缓冲池,数据和索引缓冲的地方
innodb_buffer_pool_size
#为尚未执行的事物分配内存
innodb_log_buffer_size
#redo日志的大小
innodb_log_file_size
#客户端连接数据库,服务器会解析主机名,并且当DNS很慢时,建立连接也会很慢。因此建议skip-name-resolve选项而不进行DNS查找,唯一的局限是之后GRANT语句中只能使用ip地址了,因此再添加这项设置到一个已有系统中必须要格外的小心
skip-name-resolve
#用于限制缓存表的最大数目
table_open_cache
3.安装mysql的主从配置
3.1主从服务器IP
主服务器(master):195.203.1.200
从服务器(slave):195.203.1.201
主从数据库版本一致,(该项目Mysql版本为5.7.18)
3.2主服务器配置
3.2.1修改MySQL的配置文件my.cnf
[root@jdap01 ~]# vi /etc/mysql/my.cnf
在【mysqld】下加入以下内容:
必须添加:
#server_id是服务器的id
server_id=200
#开启二进制日志
log_bin=mysql_bin
可选择添加:
#不需要备份的数据库
binlog_ignore_db = mysql
#需要备份的数据库
binlog_do_db=test
#存储二进制日志的缓存
binlog_cache_size = 1M
#主从复制的格式(mixed,statement,row,默认为statement)
binlog_format = mixed
#二进制日志自动删除/过期的天数,默认值为0,表示不自动删除
expire_logs_days = 0
特别注意:不能把字母间的 aa_ff 写成 aa-ff
3.2.2重启service
找到mysql.server,重启
[root@jdap01 support-files]# ./mysql.server restart
如果重启失败:说明设置的参数不对(检查大小写,空格和字母间的连接符)
3.2.3注册可以访问主库文件的用户
mysql> grant replication slave,replication client on *.* to mysql@'195.203.1.201' identified by 'mysql1234';
注意:
mysql为用户名;
mysql1234为密码;
195.203.1.201为从库的IP;
3.2.4展示主库日志信息
执行以下命令
mysql> show master status ;
显示例子
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000004 | 154 | test | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
记录下:mysql_bin.000004和154(从库中配置需要用到)
3.3 从服务器配置
3.3.1修改MySQL的配置文件my.cnf
[root@jdap01 ~]# vi /etc/mysql/my.cnf
在【mysqld】下加入以下内容:
必须添加:
#server_id是服务器的id
server_id=201
#开启二进制日志
log_bin=mysql_bin
可选择添加:
#不需要备份的数据库
replicate_ignore_db = mysql
#需要备份的数据库
replicate_do_db=test
注:还有很多配置,这里就不一一介绍了
3.3.2设置同步(之前没配置过,可跳过此步骤,直接执行3.3)
重置同步,清除此前可能存在的同步:
mysql> reset slave;
停止同步,默认同步是开启的:
mysql> stop slave;
3.3.3 配置同步
mysql> change master to master_host='195.203.1.200',master_user='mysql',master_password='mysql1234',master_log_file='mysql_bin.000004',master_log_pos=154;
注:
master_host表示主库的IP
master_user表示主库master上同步的用户(2.3中的用户名)
master_password表示同步的密码(2.3中的密码)
master_log_file表示从哪个binlog文件开始同步
master_log_pos表示从该binlog文件的哪个pos节点位置开始同步
其中master_log_file和master_log_pos就是主库设置2.4中记录的binlog文件名和pos位置节点
3.3.4查看同步状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 195.203.1.200
Master_User: mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.00004
Read_Master_Log_Pos: 154
Relay_Log_File: V_wangshenweb01-relay-bin.000002
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql_bin.00003
Slave_IO_Running:Yes
Slave_SQL_Running: Yes
如果Slave_IO_Running:Yes 和Slave_SQL_Running: Yes 都为Yes,说明配置成功
如果为以下状况
***************** 1. row *****************
Slave_IO_State:
Master_Host: 195.203.1.200
Master_User: mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.00004
Read_Master_Log_Pos: 154
Relay_Log_File: V_wangshenweb01-relay-bin.000002
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql_bin.00003
Slave_IO_Running:No
Slave_SQL_Running: No
运行以下命令开始复制;
mysql> start slave;
执行没有错误,再执行
mysql> show slave status\G;
如果Slave_IO_Running:Slave_SQL_Running都为Yes,说明配置成功
如果出现以下状况:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host:195.203.1.200
Master_User: mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: log_bin.000005
Read_Master_Log_Pos: 154
Relay_Log_File: V_wangshenweb01-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: log_bin.000005
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB: mysql
并且下边报的错为:
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
这个错误是主从的一个日志问题,需要简单的配置一下,步骤如下:
1、停止从库同步
mysql> stop slave;
2、清空主库日志
mysql> flush logs;
3、查看主库状态并记录mysql_bin.000005和154
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000005 | 154 | test | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
4、在从库中重新输入对应的日志文件位置和pos节点
mysql> change master to master_host='195.203.1.200',master_user='mysql',master_password='mysql1234',master_log_file='mysql_bin.000005',master_log_pos=154;
5、启动从库
mysql> start slave;
6、mysql> show slave status\G;
此时如果Slave_IO_Running:Slave_SQL_Running都为Yes,配置成功
注:
Slave_IO_Running:No 说明可能是从库与主库网络不通
Slave_SQL_Running: No 说明可能是从库与主库数据不一致
Slave_IO_Running:Connectiong 这种情况也可能出现
出现以上情况,大致归为以下几点原因:
1、可能是因为防火墙
2、Selinux中SELINUX设置成disabled
3、网络不通
4、Pos不对
4 在服务器上安装redis(2台服务器的安装一样)
4.1安装redis
1.创建redis文件在/usr/local/下
[root@V_wangshenweb01 ~]# mkdir /usr/local/redis
2.将安装包tar -zxvf redis-3.2.5.tar.gz拷贝到/usr/local/redis目录下
3.解压安装包
[root@V_wangshenweb01 redis]# tar -zxvf redis-3.2.5.tar.gz
4.编译redis-3.2.5文件
[root@V_wangshenweb01 redis]# cd redis-3.2.5
[root@V_wangshenweb01 redis-3.2.5]# make
5.编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf。然后拷贝到一个新建的/usr/redis目录下。
[root@V_wangshenweb01 src]# mkdir /usr/redis
[root@V_wangshenweb01 src]# cp redis-server /usr/redis
[root@V_wangshenweb01src ]# cp redis-benchmark /usr/redis
[root@V_wangshenweb01 src]# cp redis-cli /usr/redis
- 切换到redis-3.2.5目录下
[root@V_wangshenweb01 redis-3.2.5]# cp redis.conf /usr/redis
[root@V_wangshenweb01 redis-3.2.5]# cd /usr/redis
使用已经配置完成的redis-6379.conf文件和redis-common.conf文件替换已有文件。(用我们提供的redis-6379.conf文件和redis-common.conf)
启动Redis服务。
[root@V_wangshenweb01 redis]# ./redis-server redis-6379.conf
9.然后用客户端测试一下是否启动成功。
[root@V_wangshenweb01 redis]# ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
安装redis成功!!
备注:
查看6379pid的命令: netstat -ntlp|grep 6379
4.2配置redis主从(方法一)
4.2.1主从服务器的ip
注:配置主从前确定2台机器都已安装好redis
4.2.2从服务器的配置
- 修改从服务器中的redis-6379.conf文件
[root@jdap01 redis]# vi redis-6379.conf
#添加
#195.203.1.19为主服务器的ip
#6379为主服务器的端口
slaveof 195.203.1.19 6379
#如果主服务中有密码,则再添加,没有不添加
Masterauth = 主服务设置的密码
2.启动从服务器
[root@jdap01 redis]# ./redis-server redis-6379.conf
[root@jdap01 redis]# ./redis-cli
- 进入redis中输入info
127.0.0.1:6379> info
# Replication
role:slave
connected_master:195.203.1.19
显示如上图,则从库配置成功!!!
4.2.3主服务器的配置
1.主库中进入redis输入info
127.0.0.1:6379> info
# Replication
role:master
connected_slaves:1
显示如上图,则主从配置成功!!!
- 在主库中存入数据,测试在从库中能否取到
127.0.0.1:6379> set foo bar
OK
- 根据在主库中存的name在从库中提取
127.0.0.1:6379> get foo
"bar"
如果能提取出来,显示如上,则redis配置主从成功!!!
4.2配置redis主从(方法二)
- 可以不改动从库中的redis-6379.conf文件,而是直接进入redis,输入命令
127.0.0.1:6379> slaveof 195.203.1.19 6379
2.之后测试的步骤跟方法一 一样,如果在主库中存取的数据,在从库中能取出来,则redis配置主从成功!!!
5. 服务器之间端口开通情况
注意:同一网段的话是不需要开端口的。