继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

侠客岛的含笑
关注TA
已关注
手记 133
粉丝 1.6万
获赞 1807

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

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

图片描述

图片描述
图片描述

图片描述

图片描述

图片描述

打开App,阅读手记
6人推荐
发表评论
随时随地看视频慕课网APP

热门评论

https://img2.mukewang.com/5bceb98d0001dfb903840096.jpg

https://img4.mukewang.com/5bceb98d000199f406530280.jpg

https://img4.mukewang.com/5bceb98d000178c804680419.jpg

https://img.mukewang.com/5bceb98e0001a30405810619.jpg

这是这几个操作和配置文件https://img2.mukewang.com/5bceb9a90001d90a06150171.jpg


老师,今天顺着这个手记实践到keepalived和nginx实现双机热备,在nginx容器上安装keepalived后退出容器,在宿主机上ping 虚拟ip一直不成功。keepalived的配置文件中,真实ip已经改为宿主机ip, n1 和 n2 可以正常访问服务,就是虚拟ip在宿主机一直ping不通,这个步骤还需要其他什么药注意的么

查看全部评论