写这篇文章,写完了之后发现没保存上。差点没气死。然后又重写了一遍,吐血。
Redis
- Redis是Wmware开发的开源免费的KV型NoSQL缓存产品
- Redis具有很好的性能,最多可以提供10万次/秒的读写
- 目前新浪微博团队组建了世界上最大规模的Redis集群
Redis高速缓存
- 高速缓存利用内存保存数据,读写速度远超硬盘
- 高速缓存可以减少I/O操作,降低I/O压力
RedisCluster
- Redis目前的集群方案分为以下几种:
- 1.RedisCluster:官方推荐,没有中心节点
- 2.Codis:中间件产品,存在中心节点
- 3.Twemproxy:中间件产品,存在中心节点
- RedisCluster
- 无中心节点,客户端与redis节点直连,不需要中间代理层
- 数据可以被分片存储(切分存储)
- 管理方便,后续可自行增加或摘除节点
- 主从同步
- Redis集群中的数据库复制是通过主从同步来实现的
- 主节点(Master)把数据分发给从节点(Slave)
- 主从同步的好处在于高可用,Redis节点有冗余设计
- 高可用
- Redis集群中应该包含奇数个Master,至少应该有3个Master
- 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
热门评论
这是这几个操作和配置文件
老师,今天顺着这个手记实践到keepalived和nginx实现双机热备,在nginx容器上安装keepalived后退出容器,在宿主机上ping 虚拟ip一直不成功。keepalived的配置文件中,真实ip已经改为宿主机ip, n1 和 n2 可以正常访问服务,就是虚拟ip在宿主机一直ping不通,这个步骤还需要其他什么药注意的么