108 正向代理, 反向代理 nginx负载均衡 RDB数据切换AOF数据的操作 redis的主从复制

主要内容:https://www.cnblogs.com/pyyu/p/9468680.html

正向代理和反向代理  https://blog.csdn.net/zt15732625878/article/category/6915912

  a : 正向代理: 正向代理(forward proxy) ,一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标(原始服务器),然后代理向原始服务器转发请求并将获得的内容返回给客户端,客户端才能使用正向代理。我们平时说的代理就是指正向代理。

  简洁的说: A向C借钱,由于一些情况不能直接向C借钱,于是A想了一个办法,他让B去向C借钱,这样B就代替A向C借钱,A就得到了C的钱,C并不知道A的存在,B就充当了A的代理人的角色。 

  b : 反向代理:  代理的是服务器, 

  反向代理(Reverse Proxy),以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求的客户端,此时代理服务器对外表现为一个反向代理服务器。

  简洁的说: 理解起来有些抽象,可以这么说:A向B借钱,B没有拿自己的钱,而是悄悄地向C借钱,拿到钱之后再交给A,A以为是B的钱,他并不知道C的存在。 

  c 反向代理的应用:

        1. 保护内网安全
        2. 负载均衡
        3. 缓存,减少服务器的压力
          Nginx作为最近较火的反向代理服务器,安装在目的主机端,主要用于转发客户机请求,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后台的服务器,决定哪台目标主机来处理当前请求。
2 nginx的负载均衡

  a : 怎样将同一个域名的访问分散到两台或更多的机器上呢?这其实就是另一种负载均衡了,nginx自身就可以做到,只需要做个简单的配置就行。

  b : nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。

  c : nginx 的 upstream目前支持 4 种方式的分配 : 

1)、轮询(默认) 
  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 
2)、weight 
  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 
2)、ip_hash 
  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。  
3)、fair(第三方) 
  按后端服务器的响应时间来分配请求,响应时间短的优先分配。  
4)、url_hash(第三方)

  d : nginx负载均衡配置,主要是proxy_pass,upstream的使用

  e : 使用两台机器, 实现一个简单的反向代理

    在机器一上, 添加参数

server {
       listen 80;
		  server_name  www.s14huoying.com;
		  location / {
		  proxy_pass http://192.168.12.38;  #请求会直接转发给node2节点,也就是http://192.168.12.38; 
}

    在另个机器上, 检测acess.log, 查看请求来源

    xshell的快捷用法:   查看  撰写 撰写栏

  f : 使用三台机器实现负载均衡

    第一步: 环境准备:准备三台机器

        192.168.12.102  nginx的入口node1

        192.168.12.12    应用服务器一

        192.168.12.88    应用服务器二

    第二部: 关闭防火墙:  查看规则  iptables  - L 

              关闭防火墙: systemsct1 stop  firewalld

    第三部: 在node1 节点上配置负载均衡配置

1.修改配置文件nginx.conf ,写入如下配置
			#定义负载均衡池名字叫做s14django
			upstream s14django {  
				#池子中存放2个服务器,默认轮训方式调度服务器
				server 192.168.12.38:8000; 
				server 192.168.12.67:8000; }
			#root参数定义网页的根目录,可以写在虚拟主机内,局部变量
			#如果写在server标签外,就是全局变量
			root html;
			#虚拟主机1
			server {
			   listen 80;
			   server_name  www.s14huoying.com;
			  location / {
			  
			  #当请求发送到www.s14huoying.com的时候,匹配到 /  ,就执行以下代码
			  proxy_pass http://s14django;
			  #包含语法参数,将一个配置文件添加到当前虚拟主机生效,这个文件要手动创建
			  #这个proxy_params文件创建在/opt/nginx1-12/conf底下
			  include proxy_params;
		}}

    第四部:  手动创建这个参数文件:  touch /opt/nginx1-12/conf/proxy_params, 写入一下信息

proxy_set_header Host $http_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

		proxy_connect_timeout 30;
		proxy_send_timeout 60;
		proxy_read_timeout 60;

		proxy_buffering on;
		proxy_buffer_size 32k;
		proxy_buffers 4 128k;

    第五步: 配置服务器一

1.准备一个flask代码,运行  
	pip3 install flask
	2.准备代码  myflask.py 
		from flask import Flask
		app=Flask(__name__)
		@app.route('/')
		def hello():
		return "<h1>我是伟华</h1>"
		if __name__=="__main__":
		app.run(host='0.0.0.0',port=8000)
	3.启动应用服务器
	python3 myflask.py 

    第六步: 配置服务器二

1.准备一个flask代码,运行  
	pip3 install flask
	2.准备代码  myflask.py 
		from flask import Flask
		app=Flask(__name__)
		@app.route('/')
		def hello():
		return "<h1>我是琛琛</h1>"
		if __name__=="__main__":
		app.run(host='0.0.0.0',port=8000)
	3.启动应用服务器
	python3 myflask.py 

  g : 通过访问nginx负载均衡入口, 查看负载均衡 是否正常分配, 默认轮询方式: 访问自己的nginx的负载均衡的ip地址,查看结果

3 redis的持久化

  a : 两种方式:  AOF  和  RDB

  b : RDB:  也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置

在redis.conf中的设置

  dbfilename dbmp.rdb
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存 save 300 10 #300秒内容如超过10个key被修改,则发起快照保存 save 60 10000 save触发redis持久化

   AOF: redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容.

appendonly yes
appendfsync  everysec   #每秒钟记录一次变化

  c : RDB数据切换AOF数据的操作:redis不重启, 通过config set命令,达到不重启redis服务, 将rdb模式切换到aof

         1 准备redis.conf配置文件, 确保开启rdb功能, 配置参数如下

port 6379
	daemonize yes
	pidfile /data/redis.pid 
	loglevel notice 
	logfile "/data/redis.log"
	dir /data/
	dbfilename  dbmp.rdb
	save  900 1
	save 300 10
	save 60  10000

  2 启动redis服务端:redis-server redis.conf

  3 插入redis数据, 通过save命令, 强制写入持久化rdb文件(此时还是使用rdb持久化)

  4 通过命令, 切换aof持久化, 注意此步骤只是临时生效, 写入redis.conf

127.0.0.1:6379> CONFIG set appendonly yes   #开启AOF功能
OK
127.0.0.1:6379> CONFIG SET save ""  #关闭RDB功能
OK

  5 修改配置文件, 添加aof参数(此步重启后,rdb持久化完全切换aof持久化,且数据保持一致)

port 6379
daemonize yes
pidfile /data/redis.pid 
loglevel notice 
logfile "/data/redis.log"
dir /data/
appendonly yes
appendfsync  everysec 

  6重启redis服务

 4 reids的主从同步:  https://www.cnblogs.com/pyyu/p/10012904.html.

  如果在redis的配置文件中写入密码requirepass  密码, 则需要在从库中写入下句命令: masterauth  主库密码.