8台机器安装总结

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

  1. 下载ftp安装包vsftpd-2.0.5-16.e15_4.1.x86_64.rpm安装服务端

用命令查看是否安装过rpm的ftp

[root@V_wangshenweb01 ~]# rpm -qa |grep vsftpd
  1. 没有,用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
  1. 查看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
  1. 安装完成,输入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 支持H264/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负载均衡

  1. 修改nginx目录下的nginx.conf文件
[root@V_wangshenweb01 nginx]#vi nginx.conf

在http的大括号里面的access_log下面加上以下内容:

upstream tomcatsserver 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

  1. 主服务器(master):195.203.1.200

  2. 从服务器(slave):195.203.1.201

  3. 主从数据库版本一致,(该项目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
  1. 切换到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
  1. 使用已经配置完成的redis-6379.conf文件和redis-common.conf文件替换已有文件。(用我们提供的redis-6379.conf文件和redis-common.conf)

  2. 启动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从服务器的配置

  1. 修改从服务器中的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
  1. 进入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

显示如上图,则主从配置成功!!!

  1. 在主库中存入数据,测试在从库中能否取到
127.0.0.1:6379>  set foo bar

OK
  1. 根据在主库中存的name在从库中提取
127.0.0.1:6379>  get foo 

"bar"

如果能提取出来,显示如上,则redis配置主从成功!!!
4.2配置redis主从(方法二)

  1. 可以不改动从库中的redis-6379.conf文件,而是直接进入redis,输入命令
127.0.0.1:6379> slaveof 195.203.1.19 6379

2.之后测试的步骤跟方法一 一样,如果在主库中存取的数据,在从库中能取出来,则redis配置主从成功!!!
5. 服务器之间端口开通情况

注意:同一网段的话是不需要开端口的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值