使用nginx实现反向代理作用,具备负载均衡的功能。
 
 
接受客户端的请求
|
nginx(宿主机)
|
|-------------------|
web1 web2 (客户机)
 
原理:
与squid原理一样。对于客户端来说,nginx就像一台web服务器,客户端认为自己访问的所有内容都是来自nginx.但是nginx接受到客户端的请求,其实它是理解了请求后,自身产生新的请求,问后端的web节点索取客户端想要的内容,最后把内容返回给客户端。
 
客户端 ----> nginx(客户端的服务端) ------> web节点(做为nginx的服务端)
 
 
nginx
eth0 10.1.1.21
virbr5 192.168.19.1 <--- hostonly
 
web1
eth0 192.168.19.11
 
web2
eth0 192.168.19.12
 
 
www.upl.com ---> 10.1.1.21
 
 
重点掌握: 学会使用nginx实现反向代理的配置
 
配置模板:
 
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
 
server {
location / {
proxy_pass http://backend;
}
}
 
 
 
一、部署nginx,实现代理
 
 
1、安装pcre、nginx
 
 
2、配置nginx
 
 
http{
....
upstream webservs {
server 192.168.19.11 max_fails=3 fail_timeout=30s weight=1;
server 192.168.19.12 max_fails=3 fail_timeout=30s weight=1;
}
 
server {
listen 80;
server_name www.upl.com upl.com;
charset utf8;
access_log logs/upl.com.access.log main;
 
location / {
proxy_pass http://webservs; //把请求调度给webservs定义的节点
proxy_set_header X-Real-IP $remote_addr;// 能够后端节点可以知道客户端IP
}
}
 
...
}
 
 
 
 
二、部署后端节点
 
1、安装web服务以及应用
 
 
2、配置apache,让其记录真正的客户端的IP
 
 
LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 
CustomLog logs/access_log combined <---使用combined格式记录日志
 
 
==============================================================================
 
使用mysql的复制技术实现对mysql架构的调优
 
mysql复制的常见拓扑
 
 
1、简单实现双机热备
 
r/w ro
| |
master -----> slave
slave起到一个在线热备份。
 
 
2、级联模式,进一步分担读压力
 
r/w ro ro
| | |
master ----> slave1 -----> slave2
存在“单点故障”,只要slave1出问题,slave2就无法同步到最新状态
 
 
3、一主多从 ,解决从服务器成为单点故障的问题
/-----> slave1
master --
\-----> slave2
master需要同时给后端两个节点发送日志,IO压力和网络压力都增加。
 
4、互为主从
master1 <------> master2
从mysql复制技术的角度来说,互为主从并不十分合理,一般都是不允许它们同时接受写请求,就算允许,也是哪些允许记录重复的应用数据。
 
 
 
以上的拓扑图,如果其中一个节点出故障,该如何处理?
 
 
 
 
 
 
实验1:
 
1、简单实现双机热备
 
r/w ro
| |
master2 -----> slave1
slave起到一个在线热备份。
 
 
 
master2
node1.upl.com
192.168.19.11
server-id=11
 
slave1
node2.upl.com
192.168.19.12
server-id=12
 
准备:
1、静态IP、FQDN主机名、hosts文件相互绑定
 
2、时间必须同步一致。
 
3、强烈要求mysql-server版本要一样。
 
 
软件:
rhel6u2
mysql-5.1 光盘自带
 
模拟情景:
架构初期,工程师并没有考虑到使用mysql双机热备架构,仅仅使用了一台mysql数据库服务器。
架构运作了一段时间之后,数据库的压力非常大,需要增加一台从数据库,实现双机热备,既可以降低单台数据库的读压力,又可以实现数据热备份。
 
考虑: 尽可能不要去关闭原来的数据库去部署双机热备,尽可能减少对原来的数据库的影响。
前提:必须原来就打开了二进制日志文件记录的功能,否则必须重启数据库
如果数据库的表使用的是innodb的存储引擎,那么一点影响都没有;如果表使用的是MyISAM等非事务类型的存储引擎,那么部署的时候,绝对会影响,至少数据库是不能正常的接受写请求。
 
 
 
 
一、部署master2数据库服务器
 
1、安装数据库,并且建立一些基本数据。
 
1)建立配置文件
注意: 考虑到后面的实验需求,必须打开二进制日志文件记录功能。
[mysqld]
user=mysql
datadir=/data
socket=/data/mysqld.sock
port=3306
 
skip-name-resolve ###
 
server-id=11 ####
log-bin=/data/mysqld-bin ###
log-bin-index=/data/mysqld-bin ###
sync-binlog=1 ###
 
[mysqld_safe]
log-error=/data/mysqld.err
pid-file=/data/mysqld.pid
 
2) 把配置文件涉及的用户、目录建立,保证权限正确
# mkdir /data/
# chown mysql:mysql /data
 
3)初始化数据
# mysql_install_db --datadir=/data --user=mysql
 
 
4)启动并且修改帐号密码等。
# mysqld_safe &
 
# mysqladmin -u root -S /data/mysqld.sock password '123'
 
# mysql -u root -p123 -S /data/mysqld.sock
mysql> update mysql.user set password=password('123')
-> where password='';
mysql> delete from mysql.user where user='';
 
 
5) 存放一些数据,模拟数据库是运行了一段时间
 
mysql> create database upl default charset utf8;
mysql> use upl;
mysql> create table user (
-> id int unsigned not null primary key auto_increment,
-> name varchar(32) );
mysql> insert into user values (NULL,'user1'),(NULL,'user2');
 
 
二、部署master2,为双机热备做好准备
 
前提:确定master2服务器打开了二进制日志记录、固定了server-id
 
1、建立帐号,授权允许进行复制二进制日志文件记录
 
 
mysql> grant replication slave on *.*
-> to slave@'192.168.19.%'
-> identified by '123';
 
2、开始备份数据库
 
备份数据库的手段:
 
热备份:
mysqldump (逻辑备份)
meb (物理备份)
不管使用什么的工具,只要是备份非事务的存储引擎,都是需要锁库,锁表,不允许写。
 
冷备份
关闭数据库,或者锁定数据库,不允许写操作,然后拷贝数据文件等
 
由于本数据库服务器使用的主要是myisam类型的表,所以使用以下参数: --lock-all-tables
# mysqldump -u root -p123 -S /data/mysqld.sock --all-databases --lock-all-tables --master-data=2 > ~/master2.sql
 
如果使用是以innodb类型的表为主
--single-transaction
# mysqldump -u root -p123 -S /data/mysqld.sock --all-databases --single-transaction
--master-data=2 > ~/master2.sql
 
 
--master-date=? 在备份数据库的时候,会把当前数据库的状态对应的二进制日志文件信息记录下来。
1 不会注释change master语句
2 在备份文件中,把change master语句注释起来
 
# vim master2.sql
....
....
-- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000003', MASTER_LOG_POS=998;
《---在备份文件中记录了二进制日志信息
 
 
 
3、这个步骤并不是本次实验必须的步骤,仅仅是为了模拟数据库一直都在工作
 
mysql> insert into upl.user values (NULL,'user3');
 
mysql> select * from upl.user;
+----+-------+
| id | name |
+----+-------+
| 1 | user1 |
| 2 | user2 | <---以上的记录在master2.sql备份文件中都已经有了
| 3 | user3 | <---备份后添加
+----+-------+
 
 
 
 
三、部署slave1从服务器
 
1、安装相同版本的数据库
 
2、建立配置文件、用户、目录等
 
[mysqld]
datadir=/data
socket=/data/mysqld.sock
user=mysql
 
skip-name-resolve
 
server-id=12 # 确保从服务器使用的是一个与其他服务器不同的id
log-bin=/data/mysqld-bin
log-bin-index=/data/mysqld-bin
sync-binlog=1
 
relay-log=/data/relay-log # 记录从master上下载回来的更新操作
relay-log-index=/data/relay-log
 
log-slave-updates # 把下载回来的更新操作同时也记录到自己二进制日志文件中
 
 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
 
# mkdir /data
# chown mysql:mysql /data
 
3、由于使用的是mysqldump备份来恢复,所以需要对服务器初始化数据目录
 
# mysql_install_db --datadir=/data --user=mysql
 
4、启动并且导出数据
# mysqld_safe &
# scp 192.168.19.11:~/master2.sql /tmp/master2.sql
 
导入数据
# mysql -u root -S /data/mysqld.sock < /tmp/master2.sql
 
强烈建议重启数据库
# mysqladmin -u root shutdown -S /data/mysqld.sock
 
 
# service mysqld start
 
5、设定如何连接master2
 
mysql> change master to
-> master_host='192.168.19.11',
-> master_user='slave',
-> master_password='123',
-> master_log_file='mysqld-bin.000003',
-> master_log_pos=998;
 
 
mysql> start slave; # stop slave;
 
mysql> show slave status \G;
*************************** 1. row ***************************
。。。。
Master_Log_File: mysqld-bin.000003
Read_Master_Log_Pos: 1127
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 381
Relay_Master_Log_File: mysqld-bin.000003
Slave_IO_Running: Yes ##
Slave_SQL_Running: Yes ##
。。。
Exec_Master_Log_Pos: 1127
Relay_Log_Space: 530
。。。
Seconds_Behind_Master: 0
。。。
 
遇到故障:
1、找错误日志
2、如果是Slave_IO_Running: No
Slave_IO线程是负责连接主人,下载二进制日志记录。出问题,一般 :
1) slave帐号是否错误了,是否能够连接
2) 日志文件的名字
 
3、如果Slave_SQL_Running: No
一般都是master_log_pos写错
 
 
 

Nginx+Mysql调优的更多相关文章

  1. MySQL 调优/优化的 100 个建议

    MySQL 调优/优化的 100 个建议   MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...

  2. MySQL 调优基础(一) CPU与进程

    一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...

  3. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  4. nginx服务器调优

    nginx服务器调优措施总结: 1.选择合适的网络IO模型 epoll select poll 2.配置合适的启动进程数和每个进程处理请求的工作线程数 3.启用gzip压缩以减小通信量以减少网络IO ...

  5. mysql调优 基础

    MySQL调优可以从几个方面来做: 1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样 ...

  6. mysql调优最大连接数

    一.mysql调优 1.1 报错: Mysql: error 1040: Too many connections 1.2 原因: 1.访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器 ...

  7. Nginx性能调优

    [调优]Nginx性能调优   一.Nginx优化配置 1.主配置文件优化:# vi /usr/local/nginx/conf/nginx.conf------------------------- ...

  8. MySQL调优 —— Using temporary

      DBA发来一个线上慢查询问题. SQL例如以下(为突出重点省略部分内容): select distinct article0_.id, 等字段 from article_table article ...

  9. Nginx 性能调优

    原文地址:http://nginx.com/blog/tuning-nginx/ Tuning NGINX for Performance Nginx 性能调优 NGINX is well known ...

随机推荐

  1. Linux的开机启动流程

    Linux的开机启动流程 1.开机BIOS自检                                             --> 检查CPU,硬盘等硬件信息 2.MBR[Major ...

  2. [LeetCode] 24. Swap Nodes in Pairs 成对交换节点

    Given a linked list, swap every two adjacent nodes and return its head. You may not modify the value ...

  3. WPF CoboxItem控件使用SelectedItem去调System.Windows.Controls.ComboBoxItem: 前缀方法

    textComBox.SelectedItem as ComboBoxItem).Content textConbox: 控件Combobox 的Name 在Combobox控件SelectionCh ...

  4. Helm 常用命令及操作

    Helm 常用命令 查看版本 #helm version 查看当前安装的charts #helm list 查询 charts #helm search redis 安装charts #helm in ...

  5. presto整合hive

    Presto安装   前提条件: hadoop安装好了(并启动了) + hive安装好了        文档网址:http://prestodb.jd.com/docs/current/install ...

  6. Reimage Isilon cluster,结果忘记了修改管理口的netmask,怎么办?

    网页打不开了,正常的SSH也连不上,只能用串口,连接到节点上. 然后使用运行下面的命令来修改netmask: isi network subnets modify groupnet0.subnet0 ...

  7. why’s kafka so fast

    As we all know that Kafka is very fast, much faster than most of its competitors. So what’s the reas ...

  8. pxelinux.0:winboot:网络引导(启动)wim格式的windows PE系统:配置文件写法

    关键:加载wimboot引导模块,并传入参数 todo:通过标准kenerl的append传入启动参数..........todo.todo default menu.c32 label wimboo ...

  9. 我是如何一步步编码完成万仓网ERP系统的(二)前端框架

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  10. MVC下通过jquery的ajax调用webapi

    如题 jquery的应用,不会的自己去补. 创建一个mvc项目,新建控制器.视图如下: 其中data控制器负责向前台提供数据,home控制器是一个简单的访问页控制器. data控制器代码如下: pub ...