扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容主要讲解“CentOS 6.5上安装MySQL-Cluster 7.3.4的过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CentOS 6.5上安装MySQL-Cluster 7.3.4的过程”吧!
在玉林等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、网站建设 网站设计制作定制网站,公司网站建设,企业网站建设,品牌网站建设,全网整合营销推广,外贸网站建设,玉林网站建设费用合理。
环境说明:CentOS6.5 + MySQL-Cluster 7.3.4(最新GA版本),规划2台机器,一台做控制服务器+负载均衡服务器+数据节点服务器, 另一台做负载均衡服务器+数据节点服务器;
一、下载,这里为了方便安装过程,这里直接使用了RPM包来安装,避开了编译安装的痛苦:
首先先到www.msyql.com下载如下的RPM安装包 (http://dev.mysql.com/downloads/cluster/),记得选择RedHat Enterprise Linux/Oracle Linux下面的 MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar 这个安装包,避免一个接一个下载的痛苦;
二、环境清理以及安装:
1. mysql旧版本清除:
首先使用如下命令来清理之前操作系统自带的mysql安装:yum -y remove mysql
然后使用如下命令:
rpm -qa | grep mysql*
对于找到的2个剩余mysql包,请按照如下的命令格式予以删除:
rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64
2. mysql cluster版本安装准备:将MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar放到某个目录下(譬如/package) 下面,并且执行如下命令解压:
tar -xvf MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar
得到如下文件清单:
MySQL-Cluster-client-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-devel-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-embedded-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-server-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-compat-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-test-gpl-7.3.4-1.el6.x86_64.rpm
3. mysql cluster版本安装:
创建文件夹(分如下3个类来创建对应的文件夹)
存储节点:mkdir /var/lib/mysql/data
管理节点:mkdir /var/lib/mysql-cluster SQL节点:可不用 文件夹授权
进程DIR: mkdir /var/run/mysqld
使用如下的命令来变更权限保证可写入:
chmod -R 1777 /var/lib/mysql
chmod -R 1777 /var/run/mysqld
chmod -R 1777 /var/lib/mysql-cluster
rpm -ivh MySQL-Cluster-server-gpl-7.3.4-1.el6.x86_64.rpm
rpm -ivh MySQL-Cluster-client-gpl-7.3.4-1.el6.x86_64.rpm
特别注意,当安装完毕server gpl包后,将出现如下提示信息,提醒我们整个cluster安装后的初次超级账户密码存在/root/.mysql_secret这个文件当中。
------------------------------------------------------------------------------------------------------
A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !
You will find that password in '/root/.mysql_secret'.
You must change that password on your first connect,
no other statement but 'SET PASSWORD' will be accepted.
See the manual for the semantics of the 'password expired' flag.
Also, the account for the anonymous user has been removed.
In addition, you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test database.
This is strongly recommended for production servers.
-----------------------------------------------------------
4. 配置文件撰写与调整:
cd /var/lib/mysql-cluster
vim config.ini
-----------------------------------------------------------------------------------------------------
[computer]
Id=mgr-server-01
HostName=10.10.0.1
[mgm default]
datadir=/var/lib/mysql-cluster
[mgm]
HostName=10.10.0.1
NodeId=60
ExecuteOnComputer=mgr-server-01
PortNumber=1186
ArbitrationRank=2
[ndbd default]
NoOfReplicas=2
DataMemory=8G
IndexMemory=2G
[ndbd]
HostName=10.10.0.1
DataDir=/var/lib/mysql
NodeId=1
[ndbd]
HostName=10.10.0.2
DataDir=/var/lib/mysql
NodeId=2
[mysqld]
HostName=10.10.0.1
NodeId=81
[mysqld]
HostName=10.10.0.2
NodeId=82
-----------------------------------------------------------------------------------------------------
5. 配置Mysql文件:
vim /etc/my.cnf
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
max_connections=100
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
ndbcluster
ndb-connectstring=10.10.0.1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=10.10.0.1
-----------------------------------------------------------------------------------------------------
三、SQL Cluster初次启动命令以及用户密码更改调整:(请严格按照次序启动)
执行初次启动前请先确认 将两台机器的防火墙关闭(service iptables stop 或者 设定 防火墙端口可通,两个端口即通讯端口1186、数据端口3306 )
初次启动mgt console命令:ndb_mgmd -f /var/lib/mysql-cluster/config.ini
启动均衡节点命令: ndbd --initial
启动数据节点命令:mysqld_safe --defaults-file=/etc/my.cnf --explicit_defaults_for_timestamp &
注意在启动过程中需要监测整个控制台输出,发现有错误信息需要及时解决,根据错误日志内容来解决。
------------------------------------------------------------------------------------------------------
如果一起正常,使用如下命令将Management console开启: ndb_mgm
输入: show
ndb_mgm> show
Cluster Configuration
-----------------------------------------------------------------------------------------------------
[ndbd(NDB)] 2 node(s)
id=1 @10.x.0.1 (mysql-5.6.15 ndb-7.3.4, Nodegroup: 0, *)
id=2 @10.x.0.2 (mysql-5.6.15 ndb-7.3.4, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=60 @10.x.0.1 (mysql-5.6.15 ndb-7.3.4)
[mysqld(API)] 2 node(s)
id=81 @10.x.0.1 (mysql-5.6.15 ndb-7.3.4)
id=82 @10.x.0.2 (mysql-5.6.15 ndb-7.3.4)
-----------------------------------------------------------------------------------------------------
修正密码:
当mysqld 启动完毕正常后(可以使用pgrep mysqld来获取进程ID),我们可以使用如下命令修改:
mysql -u root -p;
随机密码(具体请参见/root/.mysql_secret文件获取),进入后使用如下指令修改密码:
SET PASSWORD = PASSWORD('新密码');
几台装有SQL数据节点的服务器皆需要执行一遍上述命令;
------------------------------------------------------------------------------------------------------
四、Cluster效果测试:
使用mysql -u root -p 密码;
输入对应的密码后登陆到系统,按照如下命令开始新建database;
create database clustertest;
use clustertest;
CREATE TABLE testtable(Count INT) ENGINE=NDBCLUSTER;
特别注意,只有使用了NDBCluster引擎的表才会执行同步操作,因此特别需要在上述表加入这个后缀;
五、关闭Cluster:(需要严格按照次序执行)
关闭数据节点:mysqld stop (SQL节点可以用mysqladmin shutdown或别的方式关闭。)
在管理节点上执行:shell> ndb_mgm -e shutdown
将安全的关闭管理节点和数据节点。
关闭后使用如下的进程检测命令查看一下是否退出来了:
pgrep mysqld
ps aux | grep nbdb
如果没有,找到对应的pid进行kill 操作即可。
六、再次启动Cluster方案:
启动整个cluster的次序:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
ndbd
mysqld_safe --defaults-file=/etc/my.cnf --explicit_defaults_for_timestamp &
-----------------------------------------------------------------------------------------------------
杂记:
防火墙策略调整: iptables -A INPUT -s 192.168.100.0/24 -i eth3 -p tcp -m tcp -j ACCEPT
修改密码方法一:
mysqladmin -u root password root (更改密码) (没有新密码前执行)
mysqladmin -u root -p 'xxxxxx' password 'NewPassword'; (安装完毕后启动mysqld执行)
修改密码方法二:
UPDATE mysql.user SET Password=PASSWORD('Password01!') WHERE User='root';
FLUSH PRIVILEGES;
修改密码方法三:
让mysql以不带安全控制的方式启动:
mysqld_safe --user=mysql --skip-grant-tables --skip-networking;
然后再用前面2种方法修改密码;
注:下文涉及到配置的,如无特别说明,主备机则一致!
一、环境介绍
1、这是我CentOS的版本,CentOS7.1,主备都为该版本
[root@localhost ~]# cat /etc/RedHat-release
CentOS Linux release 7.1.1503 (Core)
[root@localhost ~]# cat /proc/version
Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Fri Mar 6 11:36:42 UTC 2015
2、修改主机名并修改host
[root@localhost ~]# hostnamectl set-hostname node-01
[root@localhost ~]# vi /etc/hosts
127.0.0.1node-01在127后面添加node-01
二、拓扑图的规划:
A)
|------------IP地址-----------------|----------|------软件----------|----------|-状态--|
|172.21.4.51(VIP:172.21.4.44 )|----------|keepalived+nginx|----------|Master |
|172.21.4.52(VIP:172.21.4.44 )|----------|keepalived+nginx|----------|Backup|
|---------172.21.4.91-------------|----------|------IIS------------|----------|-Web1-|
|---------172.21.4.91-------------|----------|------IIS------------|----------|-Web2-|
B)
Internet--
|
=============
| ISP Router|
=============
| |
| |---- Web1 (172.21.4.91)
|-HA-|eth0--> 172.21.4.51 |
| \ /
| \ /
| ===VIP(172.21.4.44)===
| / \
| / \
|-HA-|eth0--> 172.21.4.52 |
|---- Web2 (172.21.4.92)
|
注:在网关上已针对VIP(172.21.4.44)作了80端口映射。
此架构需考虑的问题:
1、Master运行,则Master占有vip且Nginx能够正常服务;
2、Master挂了,则Backup抢占vip且Nginx能够正常服务;
3、任何一台前端nginx服务挂了,则vip资源转移到另一台服务器上,并发送提醒邮件;
4、nginx需要检测后端服务器的健康状态(由于应用是挂在默认网站下的虚拟目录,且无法更改,必须能够对虚拟目录进行健康检查)
5、由于应用需要Session保持,但由于没有做Session共享,实际服务器角色转换时,应用会受到一定的影响。
三、安装前的准备工作
CentOS7环境下,默认是使用FireWallD服务,即使你修改了iptables,重启又被初始化了,需要再
次手动systemctl restart
iptables.service才能使设置的iptables生效,由于FireWallD暂时还没有熟悉使用方法且不知道他比iptables到底有
哪些优势,保险起见,还是换回原先的iptables
1、关闭firewall:
[root@node-01 ~]# systemctl stop firewalld.service
#停止firewall
[root@node-01 ~]# systemctl disable firewalld.service 或 systemctl mask firewalld.service
#禁止firewall开机启动
2、安装iptables防火墙
[root@node-01 ~]# yum install iptables-services -y
[root@node-01 ~]# systemctl enable iptables
3、在进行Keepalived和nginx配置前,务必将集群内的几台主机的通讯相互完全放行(并开放80的Web访问规则),否则很有可能出现脑裂或其他问题,可直接在配置文件内加入以下语句;
[root@node-01 ~]# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.21.4.51 -j ACCEPT
-A INPUT -s 172.21.4.52 -j ACCEPT
-A INPUT -s 172.21.4.91 -j ACCEPT
-A INPUT -s 172.21.4.92 -j ACCEPT
[root@node-01 ~]# systemctl restart iptables.service
四、Keepalived与Nginx的安装
1、安装ipvsadm
[root@node-01 ~]# yum install ipvsadm
[root@node-01 ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
ipvs(IP Virtual Server)是整个负载均衡的基础,如果没有这个基础,故障隔离与失败切换就毫无意义了。ipvs 具体实现是由 ipvsadm 这个程序来完成的。CentOS7.1默认自带安装了。
2、安装keepalived(其实7.1自带了)
[root@node-01 ~]# yum install keepalived
[root@node-01 ~]# keepalived -v
Keepalived v1.2.13 (03/06,2015)
3、安装当前最新稳定版1.8.0
注1:一开始是用yum安装的nginx,结果发现后端服务器Down机或状态不正常时,nginx也照常转发请求,后面yum erase nginx后,进行了手动安装。因为需要额外添加 nginx_upstream_check_module模块。
注2:安装过程会提示类型这样的错误 ./configure: error: the HTTP rewrite module requires the PCRE library.
所以先安装相应的支持库来解决。pcre,正则表达式匹配支持;zlib,用于压缩等等。
[root@node-01 ~]# yum -y install gcc-c++ pcre-devel zlib-devel
1) 为nginx建立一个www组,并建立一个不登录的账户nginx,放入www用户组
[root@node-01 ~]# groupadd -f www
[root@node-01 ~]# useradd -d /var/cache/nginx -s /sbin/nologin -g www nginx
2) 建立目录用于存放nginx日志文件,并赋权限
[root@node-01 ~]# mkdir /var/log/nginx
[root@node-01 ~]# mkdir /usr/local/nginx
[root@node-01 ~]# chown -R nginx.www /var/log/nginx
[root@node-01 ~]# chown -R nginx.www /usr/local/nginx
3) 分别下载nginx、额外模板及安装
[root@node-01 ~]# mkdir /nginx
[root@node-01 ~]# cd /nginx
[root@node-01 nginx]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@node-01 nginx]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip
[root@node-01 nginx]# tar -xvf nginx-1.8.0.tar.gz
[root@node-01 nginx]# unzip master.zip
#在当前目录下解压出nginx_upstream_check_module-master这个目录
[root@node-01 nginx]# cd nginx-1.8.0/
[root@node-01 nginx-1.8.0]# patch -p1 < /nginx/nginx_upstream_check_module-master/check_1.7.5+.patch
#由于安装版1.8.0稳定版,所以选check_1.7.5+.patch这个补丁包,其他版本相应选择即可
#如果提示bash: patch: 未找到命令...应该安装一下patch命令包yum -y install patch
[root@node-01 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx
--user=nginx --group=www --pid-path=/run/nginx.pid
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--add-module=/nginx/nginx_upstream_check_module-master
[root@node-01 nginx-1.8.0]# make && make install
便于以后的操作,进行以下设置并制作自启动文件:
[root@node-01 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
[root@node-01 ~]# vi /usr/lib/systemd/system/nginx.service
#加下以下内容:
#---------Begin------------------------------------
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#---------end--------------------------------------
[root@node-01 /]# systemctl enable nginx.service
系统启动时让nginx.service自启动。
4) keepalived和Nginx最好也设置开机启动
[root@node-01 ~]# systemctl enable keepalived
[root@node-01 ~]# systemctl enable nginx
五、Keepalived配置
在配置keepalived之前,先关闭selinux
A、vi /etc/selinux/config
B、设置 SELINUX=disabled 保存
C、执行 setenforce 0
如果只想临时关闭,直接输入:setenforce 0
[root@node-01 ~]# vi /etc/keepalived/keepalived.conf
#############keepalived配置#############################################################
! Configuration File for keepalived
global_defs {
}
vrrp_script chk_nginx {
#必须放在track代码的上方,否则无效,测试了几次是这个情况
script "killall -0 nginx"
#用shell命令检查nginx服务是否存在
interval 1
#时间间隔为1秒检测一次
weight -15
#当nginx的进程不存在了,就把当前的权重-15
}
vrrp_instance VI_1 {
state MASTER
#主LVS是MASTER,从主机时此项要改为BACKUP,要大写
interface enp4s0
#LVS监控的网络接口
virtual_router_id 51
#同一实例下virtual_router_id必须相同,MASTRE/BACKUP 设置值要一样
priority 100
#定义优先级,数字越大,优先级越高,把此份Conf拷贝到另一台机器上时,设置的priority值要比MASTRE权重值低
advert_int 1
#MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication {
auth_type PASS
auth_pass 376879148
#验证类型和密码,有PASS和AH两种,一般用PASS,据说AH有问题,认证密码主备服务器之间一定要一致,否则出错
}
virtual_ipaddress {
172.21.4.44
#设置虚拟IP,可以有多个地址,每个地址占一行,不需掩码。注意:这个 ip 必须与我们在 lvs 客户端设定的vip相一致
}
track_script {
chk_nginx
#引用上面的vrrp_script定义的脚本名称
}
notify_master "/etc/keepalived/changemail.py master"
notify_backup "/etc/keepalived/changemail.py backup"
notify_fault "/etc/keepalived/changemail.py fault"
#指定当切换到主、备及故障状态时,执行的脚本
}
###################################################################################
六、HA状态切换时的邮件提醒
[root@node-02 ~]# python -V
Python 2.7.5
[root@node-01 ~]# vi /etc/keepalived/changemail.py
########################changemail.py利用Python2.7程序发邮件###########################
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
import socket
import time
from email.MIMEText import MIMEText
from email.Utils import formatdate
from email.Header import Header
import sys
#发送邮件的相关信息,根据实际情况填写
smtpHost = 'smtp.exmail.qq.com'
smtpPort = '25'
sslPort = '465'
fromMail = 'youki@appi.com'
toMail = 'youki@appi.com'
username = 'youki@appi.com'
password = 'xxxxxxx'
#解决中文问题
reload(sys)
sys.setdefaultencoding('utf8')
#邮件标题和内容
subject = socket.gethostname() + " HA status has changed"
body = (time.strftime("%Y-%m-%d %H:%M:%S")) + " vrrp transition, " + socket.gethostname() + " changed to be " + sys.argv[1]
#初始化邮件
encoding = 'utf-8'
mail = MIMEText(body.encode(encoding),'plain',encoding)
mail['Subject'] = Header(subject,encoding)
mail['From'] = fromMail
mail['To'] = toMail
mail['Date'] = formatdate()
try:
#连接smtp服务器,明文/SSL/TLS三种方式,根据你使用的SMTP支持情况选择一种
#普通方式,通信过程不加密
#smtp = smtplib.SMTP(smtpHost,smtpPort)
#smtp.ehlo()
#smtp.login(username,password)
#tls加密方式,通信过程加密,邮件数据安全,使用正常的smtp端口
#smtp = smtplib.SMTP(smtpHost,smtpPort)
#smtp.ehlo()
#smtp.starttls()
#smtp.ehlo()
#smtp.login(username,password)
#纯粹的ssl加密方式,通信过程加密,邮件数据安全
smtp = smtplib.SMTP_SSL(smtpHost,sslPort)
smtp.ehlo()
smtp.login(username,password)
#发送邮件
smtp.sendmail(fromMail,toMail,mail.as_string())
smtp.close()
print 'OK'
except Exception:
print 'Error: unable to send email'
[root@node-01 ~]#
#######################################################################################
1、上面的脚本制作完成后,记得赋权,否则无法执行。
[root@node-01 ~]# chmod +x /etc/keepalived/changemail.py
[root@node-01 ~]#scp /etc/keepalived/keepalived.conf 172.21.4.52:/etc/keepalived
把主机上的配置文件copy到Backup服务器上,现在在两台主机上可以利用 ip addr show命令来查看VIP的获取情况
2、keeplived日志位置指定:
在主从keeplived节点上编译/etc/sysconfig/keepalived文件
[root@node-01 ~]# vi /etc/sysconfig/keepalived
将最后一行KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"
3、修改主从节点日志配置文件/etc/rsyslog.conf
[root@node-01 ~]# vi /etc/rsyslog.conf
加入如下配置:
#keepalived -S 0
local0.*/var/log/keepalived.log
4、重启日志服务
[root@node-01 ~]# systemctl restart rsyslog.service
5、检查/var/log/keepalived.log文件是否存在
注意事项:
1、输出的日志信息: /var/log/messages ,更具体的日志信息输出需要在启动keepalived时加 -d 参数。
2、在都为MASTER且priority一样的情况下,后启的节点(service vrrp start)会取代正在运行的节点变成主用的。
3、一台为MASTER且priority较高的情况下,不受次节点down/up影响,并且其本身再从down变为up时,会抢夺控制权。
4、在都为MASTER且priority一样的情况下,正在运行的主节点down(断网),次节点会自动接管,主节点再起来时不会去抢夺控制权。
#keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
#如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
#如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
#其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
#这里需要注意的是:
#1) 优先级“不会”不断的提高或者降低,当track的对象恢复时,又是一致的
#2) 可以编写多个检测脚本并为每个检测脚本设置不同的weight
#3) 不管提高优先级还是降低优先级,最终优先级的范围是在[1,254],不会出现优先级小于等于0或者优先级大于等于255的情况
#这样可以做到利用脚本检测业务进程的状态,并动态调整优先级从而实现主备切换。
七、nginx配置
[root@node-01 nginx]# vi /usr/local/nginx/conf/nginx.conf
#############nginx配置#############################################################
user nginx www;
worker_processes 2;
#nginx进程数,建议设置为等于CPU总核心数
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#为每个进程分配cpu,将N个进程分配到N个cpu,可以写多个或者将一个进程分配到多个cpu
error_log /var/log/nginx/error.log crit;
#pid /run/nginx.pid;
events {
use epoll;
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以 能
worker_connections 102400;
#最大连接数量,根据硬件调整,理论上每台nginx服务器的最大连接数为worker_processes*s
}
http {
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
server_tokens off;
#nginx隐藏版本号
keepalive_timeout 65;
proxy_intercept_errors on;
#表示使nginx阻止HTTP应答代码为400或者更高的应答
gzip on;
#该指令用于开启或关闭gzip模块(on/off)
gzip_min_length 1k;
#设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_buffers 4 8k;
#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 8k代表以8k为单位,安装原始数据大小以16k为单位的4倍申请内存。
gzip_http_version 1.1;
#识别http的协议版本(1.0/1.1)
gzip_comp_level 3;
#gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
gzip_types text/plain text/css application/json
application/javascript application/x-javascript text/javascript text/xml
application/xml application/xml+rss;
#匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的,经实测对本网站的图片压缩后,积极反而增大,所以取消图片类的压缩。
gzip_vary on;
#和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
upstream MyApp{
ip_hash;
#1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端 除
#2.weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不 况
#3.ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后题
#4.fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配
server 172.21.4.91:80 max_fails=2 fail_timeout=10s;
server 172.21.4.92:80 max_fails=2 fail_timeout=10s;
#max_fails默认为1,fail_timeout默认为10秒,默认情况下后端服务器在10秒内出错1次认为服务器异常将停止转发
check interval=3000 rise=2 fall=2 timeout=1000 type=http;
#对条目中的所有节点,每3秒检测1次,请求2次正常则标记该机状态为UP
check_http_send "GET /appicrm HTTP/1.0\r\n\r\n";
#检测网址子目录,在这里为http://mail.appi.cn/appicrm
}
server
{
listen 80;
server_name mail.appi.cn;
charset utf-8;
location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf|js|css|htm|html)$
{
access_log image.log;
expires 14d;
root /usr/local/nginx/proxy_cache;
proxy_store on;
proxy_temp_path /usr/local/nginx/proxy_cache_image;
if ( !-e $request_filename)
#文件和目录不存在的时候重定向
{proxy_pass http://MyApp;}
#rewrite ^(.*) http://www.test.com/test/$domain/ break;
}
#last:重新将rewrite后的地址在server标签中执行
#break:将rewrite后的地址在当前location标签中执行
location / {
rewrite ^/(.*)$ /appicrm/$1 last;
}
location ~* ^/appicrm/.*$ {
proxy_set_header Host $host;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://MyApp;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location /webstatus {
check_status;
access_log off;
error_log off;
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/htpasswd/test;
#allow IP;
#deny all;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[root@localhost ~]#
###################################################################################
有几个需要注意的问题:
1、如下提示的Pid错误
7月 15 18:11:24 localhost.localdomain systemd[1]: Failed to read PID from file /var/run/nginx.pid: Invalid argument
解
决:注释掉/usr/lib/systemd/system/nginx.service文件内的指定PID路径那一行,后面find nginx
的PID实际存的位置后再修改回正常的,或干脆注释掉,因为我的修改了后面又出错了。nginx安装的时候指定的位置居然不正确,不知道为何!网上有很多
解决方法包括国外网站都说要安装各种支持文件,经测试都是错误答案。
2、Webstatus这个状态查询页面,你肯定不希望所有人都能访问,所以需要加密
[root@node-01 ~] mkdir /usr/local/nginx/conf/htpasswd/
[root@node-01 ~] htpasswd -c /usr/local/nginx/conf/htpasswd/test Youki
New password:
Re-type new password:
Adding password for user auth_user
[root@node-01 ~] vi /usr/local/nginx/conf/nginx.conf
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/htpasswd/test;
将以上两句加入/webstatus节
到此,相信大家对“CentOS 6.5上安装MySQL-Cluster 7.3.4的过程”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流