手记

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人推荐
随时随地看视频
慕课网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不通,这个步骤还需要其他什么药注意的么

查看全部评论