为了账号安全,请及时绑定邮箱和手机立即绑定

Docker前后端分离实战之搭建Redis集群和前后端分离

写这篇文章,写完了之后发现没保存上。差点没气死。然后又重写了一遍,吐血。

Redis

  • Redis是Wmware开发的开源免费的KV型NoSQL缓存产品
  • Redis具有很好的性能,最多可以提供10万次/秒的读写
  • 目前新浪微博团队组建了世界上最大规模的Redis集群

Redis高速缓存

  • 高速缓存利用内存保存数据,读写速度远超硬盘
  • 高速缓存可以减少I/O操作,降低I/O压力

RedisCluster

  1. Redis目前的集群方案分为以下几种:
    • 1.RedisCluster:官方推荐,没有中心节点
    • 2.Codis:中间件产品,存在中心节点
    • 3.Twemproxy:中间件产品,存在中心节点
  2. RedisCluster
  3. 无中心节点,客户端与redis节点直连,不需要中间代理层
  4. 数据可以被分片存储(切分存储)
  5. 管理方便,后续可自行增加或摘除节点
  6. 主从同步
  7. Redis集群中的数据库复制是通过主从同步来实现的
  8. 主节点(Master)把数据分发给从节点(Slave)
  9. 主从同步的好处在于高可用,Redis节点有冗余设计
  10. 高可用
  11. Redis集群中应该包含奇数个Master,至少应该有3个Master
  12. Redis集群中每个Master都应该有Slave

图片描述

实战

  • 解除docker集群
  • docker swarm leave -f

导入本地Redis镜像文件,运行Redis容器

docker pull yyyyttttwwww/redis
docker run -it -d --name r1 -p 5001:6379 --net=net2 --ip 172190.2 redis bash
docker exec -it r1 BASH

配置Redis文件

AOF是开启日志功能
图片描述

跳转到redis目录,执行
./redis-server ../redis.conf

安装redis-trib.rb

redis-trib是基于Ruby的Redis集群命令行工具

  • cp /usr/redis/src/redis-trib.rb
  • cd /usr/redis/cluster
  • apt-get isntall ruby
  • apt-get isntall rubygems
  • gem install redis

利用redis-trib.rb创建Redis集群

参数表示为每个主节点创建一个从节点

  • ./redis-trib.rb create --replicas 1 172.190.2:6379 172.19.0.3:6379 172.1904:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.07:6379

前后端部署

renren-fast包含了tomcat.jar文件,所以工程打包成JAR文件就能独立运行

  • 修改数据库配置文件(数据源,redis集群 tomcat端口)
  • doker禁止跨网段访问,解决方案是把java所在容器的网络对接到宿主机上,不再专门划分网段
  • 利用Maven打包工程
    • mvn clean install -Dmaven.test.skip=true:代表跳过测试代码
    • clean:表示清除之前的JAR文件;
    • install:意味着打包到本地;
    • Dmaven.test.skip=true:代表跳过测试代码

图片描述

  • 创建j1卷 docker volume create j1
  • 运行Java容器,部署并运行JAR文件
  • docker run -it -d --name j1 -v j1:/home/soft(jar文件所在位置) --net=host java
  • docker exec -it j1 bash
  • nohup java -jar /home/soft/renren-fast.jar

其他节点也是类似过程,不过tomcat端口要递增

  • 创建j2卷 docker volume create j2
  • 运行Java容器,部署并运行JAR文件
  • docker run -it -d --name j2 -v j2:/home/soft(jar文件所在位置) --net=host java
  • docker exec -it j2 bash
  • nohup java -jar /home/soft/renren-fast.jar

负载均衡

Nginx是性能非常出色的反向代理服务器,最大可以支持8万/秒的并发访问

  • docker pull nginx
  • 启动(数据卷只能实现目录与目录之间的映射,不能实现文件与文件之间的映射)
  • docker run -it -d --name n1 -v /home/n1/nginx.conf:/etc/nginx/nginx.conf --net=host --privileged nginx

图片描述

双机热备

图片描述

  • docker exec -it n1 bash
  • apt-get update
  • apt-get install keepalived
  • vi /etc/keepalived/keepalived.conf
  • 网卡填写宿主机的网卡,定义虚拟节点
  • service keepalived start
  • ping 192.168.99.151 测试是否成功
  • docker exec -it n2 bash
  • apt-get update
  • apt-get install keepalived
  • vi /etc/keepalived/keepalived.conf
  • 网卡填写宿主机的网卡,定义虚拟节点(这里real_server要换成n2的端口)
  • service keepalived start
  • ping 192.168.99.151 测试是否成功
    图片描述

前端项目部署

图片描述

docker run -it -d --name fnl -v /home/fnl/nginx.conf:/etc/nginx/nginx.conf -v /home/fnl/renren-vue:/home/fnl/renren-vue --net=host --privileged --net=host nginx

图片描述

图片描述

图片描述

图片描述

双机热备

另一个节点略。
VM虚拟机对keepalive的支持不好(挂起虚拟机有影响,需要重启)

图片描述

课后作业

图片描述

  • docker-machine
  • docker-compose
  • docker-swarm
去中心化设计

图片描述

  • docker swarm init
  • –listen-addr ip:port 管理者节点
  • –advertise-addr ip 广播地址
  • docker warm join-token manager
  • docker swarm join-token worker
  • 添加manager或者worker节点到集群,只要执行对应的命令即可
  • docker node ls 只可以在Manager节点执行该命令
    图片描述
    图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

容器集群

图片描述

图片描述

图片描述

图片描述
图片描述

图片描述

Portaine

图片描述

图片描述
图片描述

图片描述

图片描述

图片描述

点击查看更多内容
6人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
1.6万
获赞与收藏
1807

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消