您的位置:首页 > 运维架构 > Nginx

nginx一些基础知识、搭建和mysql主从复制搭建

2017-02-22 15:30 741 查看
nginx —高性能的http和反向代理的服务器,也是IMAP/POP3/SMTP代理服务器

俄罗斯人 Igor Sysoev 建立

nginx 以事件驱动方式编写,非常高效,适合做集群前端

nginx 具有很高的稳定性,采用分阶段资源分配技术,很大程度上减轻了DOS攻击的影响

nginx 支持热部署,可以7*24小时不间断运行

nginx 采用master-slave模型,充分利用smp的优势,且能够减少工作进程在磁盘I/O的阻塞延迟,

采用select()/poll()调用时,还可以限制每个进程的连接数

强大的UPSteam和filter链 —- 反向代理和管道功能

nginx 主流是以多进程方式工作,一个master进程和多个worker进程,master管理、监控worker进程

worker进程互相独立,worker进程不能处理其他worker的事情,一般设置worker数为机器的CPU核心数

master接收外界的信号,根据信号做不同的事情,

控制nginx使用kill向master发送信号即可,如kill -HUP pid

handler 的编写步骤:—- 世上无难事,只怕有心人

1. 编写模块的基本结构,包括模块的定义,模块上下文结构,模块的配置结构等

2. 实现handler的挂载函数,根据模块的需求选择正确的挂载方式

3. 编写handler的处理函数,模块的功能主要通过这个函数完成

nginx模块分为三大类: handler、filter、upstream

1. 利用handler和filter可以完成单机工作

2. 利用upstream可以跨越单机的限制,完成网络数据的接收、处理、转发

3. 在云模式大行其道的今天,数据转发使nginx有能力构建一个网络应用的关键组件

4. nginx的配置系统提供的层次化、松耦合使得系统有很好的扩展性

5. 严格来说upstream属于handler,只是它自己不产生内容只需要开发若干回调函数,完成构造请求和解析响应等工作

任何upstream模块,简单如memcached,复杂如proxy、fastcgi

负载均衡用于从upstream指令定义的后端主机列表中选取一台主机,

nginx先用负载均衡找到一台主机,再使用upstream模块实现和主机的交互

尝试环境搭建:

1. nginx3机器安装nginx,配置upstream 负载均衡nginx1和nginx2机器, 并开放共享目录 /home/sharedir

2. nginx1机器安装tomcat和php,并使用nginx3机器的共享目录作为工作目录

3. nginx2机器安装tomcat和php,并使用nginx3机器的共享目录作为工作目录

4. nginx1和nginx2的mysql 实现主从配置(待尝试)


搭建环境过程中遇到一些系统设置:

1. 设置静态ip: vim /etc/network/interface

# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.30.162
netmask 255.255.255.0
gateway 192.168.30.2 (网关)

2.修改DNS解析:vim /etc/resolv.conf  nameserver 192.168.30.2

3.重启网卡: sudo /etc/init.d/network restart

4. 参考地址: http://www.cnblogs.com/vincedotnet/p/4013099.html 
5. ubuntu 14.04 更换为阿里云源
1. sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份
2. sudo vim /etc/apt/sources.list #修改

3. sources.list 内容改为
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

4. sudo apt-get update #更新列表

5. 参考地址:http://www.cnblogs.com/littlemonsters/p/5783690.html


使用nginx的upstream 搭建负载均衡环境

1. nginx3机器安装nginx,配置upstream,在http里面添加配置如下

upstream 192.168.30.162 {

#ip_hash;

server 192.168.30.160:8080;

server 192.168.30.161:80;

}

server{
listen 80;
server_name 192.168.30.162;
location / {
proxy_pass http://192.168.30.162; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

2. nginx2机器安装nginx、nginx1机器安装tomcat

3. nginx 更改工作目录:vim /etc/nginx/sites-enabled/default; 修改server里面的配置为 root /home/share;
tomcat 更改工作目录:vim /etc/tomcat7/server.xml; 在host里面增加配置
<Context path="" debug="0" docBase="/home/share" reloadable="true" privileged="true"></Context>
tomcat 更改默认访问文件:vim /etc/tomcat7/web.xml; 修改welcome-file-list配置为 <welcome-file>index_tomcat.html</welcome-file>

4. nginx 重启 /usr/sbin/nginx -s reload
tomcat 重启 service tomcat7 restart


搭建mysql主从库

1. 参考地址:http://www.linuxidc.com/Linux/2014-05/101599.htm

https://my.oschina.net/erichsbc/blog/99808

https://my.oschina.net/robortly/blog/674303

2.  nginx1和nginx2的安装mysql: apt-get install mysql-server ;;; nginx1的mysql简称mysql1 nginx2的mysql简称mysql2
3.  vim /etc/mysql/my.cnf   注释掉 bind 127.0.0.1
4.  给mysql1建立一个外网可以访问的账号:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'helloworld' WITH GRANT OPTION;FLUSH PRIVILEGES;

5.  mysql1配置文件设置:
在【mysqld】的模块配置中添加配置:
server-id=1  #设置id
log_bin=/var/log/mysql/mysql-bin.log  #二进制文件目录
binlog_do_db=student  #开启主从复制的数据库
binlog_ignore_db=mysql  #不开启主从复制的数据库
6.  重启mysql1: service mysql restart
连接mysql1: show master status \G;  #数据要用到
mysql> show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000002
Position: 107
Binlog_Do_DB: student
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)

ERROR:
No query specified

7.  mysql1给主从复制新建一个账号: grant replication client,replication slave on *.* to 'repl'@'192.168.%.%' identified by 'repl';FLUSH PRIVILEGES;

8.  mysql2配置文件设置:
server-id=2  #设置id
log_bin=/var/log/mysql/mysql-bin.log
replicate_do_db=student #主从复制的数据库

9.  登录mysql2 设置master
stop slave;

change master to master_host='192.168.30.160' ,master_user='repl',master_password='repl'
,master_log_file='mysql-bin.000002',master_log_pos=107; #数据为mysql1查询出的数据

start slave;

10. 如果设置master失败:
登录mysql2: stop slave; reset slave; 重新设置; start slave 即可

11. 主从复制即可成功,主从复制的数据库为student(可以按需要更改)

12. show slave status\G; 验证是否成功: Slave_IO_Running: Yes   Slave_SQL_Running: Yes


有空研究下 双击异地热备份

参考地址:

https://blog.byneil.com/%E5%AD%A6%E4%B8%80%E7%82%B9-mysql-%E5%8F%8C%E6%9C%BA%E5%BC%82%E5%9C%B0%E7%83%AD%E5%A4%87%E4%BB%BD-mysql%E4%B8%BB%E4%BB%8E%EF%BC%8C%E4%B8%BB%E4%B8%BB%E5%A4%87%E4%BB%BD%E5%8E%9F%E7%90%86%E5%8F%8A/

配置 nginx 的php环境

nginx php php-fpm 环境搭建

首先安装php: apt-get install php5 (php5默认会安装Apache,但是80端口已经被nginx占了,所有Apache会启动失败,不用管)

接着安装php-fpm: apt-get install php5-fpm (php和php-fpm的配置文件都在 /etc/php5/目录下,以后安装php扩展在这个目录下即可)

接着修改nginx的配置文件,在【http】配置项目中添加如下配置信息:

server{

listen 192.168.30.161:80; #所在机器的ip

index index.html index.php;

root /home/share;

location ~ .php$ {

fastcgi_pass unix:/var/run/php5-fpm.sock; #使用的是socket方式

fastcgi_index index.php;

include fastcgi_params;

}

}

然后检查nginx的配置文件信息是否正确: /usr/sbin/nginx -t

然后重启nginx: /usr/sbin/nginx -s reload

然后验证php是否安装成功: 在nginx的工作目录下/home/share 里面建立 test.php 文件: phpinfo();

访问test.php 看看php代码是否正确解析

参考地址: http://blog.csdn.net/koastal/article/details/51055606

3.php-fpm 的使用:

php-fpm 重启:kill -USR2
cat /var/run/php5-fpm.pid


service php5-fpm start
service php5-fpm stop
service php5-fpm restart
service php5-fpm reload

/etc/init.d/php5-fpm start
/etc/init.d/php5-fpm stop
/etc/init.d/php5-fpm restart
/etc/init.d/php5-fpm reload


由于tomcat 对php支持不是很好,前面只是为了测试nginx可以代理不同的web服务器

决定将nginx1的tomcat环境改成nginx环境

复制均衡环境搭建完毕,其中有些设置参数值得测试

测试链接:

1. http://192.168.30.162/ 会平均的访问nginx1和nginx2机器

2. http://192.168.30.162/testshare.html 测试可以访问共享的HTML文件

3. http://192.168.30.162/test.php 测试nginx1和nginx2的php环境正确而且被nginx3反向代理

将nginx php-fpm php mysql的启动加入开机启动项目
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql nginx