在使用阿里云服务的过程中,针对TCP负载均衡场景,会出现这样的问题:如果一个应用的客户端镜像和服务器镜像都部署在同一个节点(ECS)上,由于SLB的限制,应用的客户端无法通过SLB访
在使用阿里云服务的过程中,针对TCP负载均衡场景,会出现这样的问题:如果一个应用的客户端镜像和服务器镜像都部署在同一个节点(ECS)上,由于SLB的限制,应用的客户端无法通过SLB访问本地服务器。本文试图以基于TCP协议的常用redis为例,一步步解决这个问题,同时向大家展示容器服务的概念。
解决方案1:通过调度容器,可以防止客户机和服务器容器部署在同一个节点上。
示例应用程序模板(使用lb标签,使用swarm fileter函数)
redis-master:端口:
–6379:6379/tcp图像:‘雷迪斯:阿尔卑斯’
标签:
aliyun . lb . port _ 6379:TCP://proxy _ test:6379 redis-client:image:‘雷迪斯:阿尔卑斯’
链接:
–redis-主环境:
–‘亲和力:aliyun.lb.port_6379!= TCP://proxy _ test:6379 ’
命令:redis-CLI-h 120.25.131.64
stdin_open: true tty: true
注意事项:
如果发现调度不生效,进入服务列表,选择你需要调度的服务,选择重新调度,选择强制重新调度强制重新调度会丢弃已有容器的volume,请做好相应的备份迁移工作
解决方案2:容器集群内部的客户端使用link访问服务器,集群外部使用SLB。
示例模板(使用lb标签)
redis-master:端口:
–6379:6379/tcp图像:‘雷迪斯:阿尔卑斯’
标签:
aliyun . lb . port _ 6379:TCP://proxy _ test:6379 redis-client:image:‘雷迪斯:阿尔卑斯’
链接:
–redis-master命令:redis-CLI-h redis-master stdin _ open:true tty:true
解决方案3:容器集群内部的客户端使用自定义路由(基于HAProxy)作为代理访问服务器,而集群外部的客户端使用SLB。
示例模板应用(使用lb标签,自定义路由镜像)
lb:图片:registry.aliyuncs.com/acs/proxy:0.5
端口:
–‘6379:6379/TCP ’
重新启动:总是标签:
# addon使代理镜像能够订阅注册表并动态加载服务的路由。
aliyun . custom _ addon:“代理”
#为每个虚拟机部署该映像的容器。
aliyun . global:“真”
#前端装订Slb,使用lb标签
aliyun . lb . port _ 6379:TCP://proxy _ test:6379
#告诉系统自定义路由需要等待主从启动后才能启动,并且依赖于主从。
aliyun.depends: redis-master,redis-slave环境:
#支持装载路线的后端集装箱的范围,”*”代表整个集群,默认为应用内服务ADDITIONAL _ SERVICES:“*”
EXTRA _ DEFAULT _ SETTINGS:“log rsyslog local0,log global,option httplog & # 8221
#配置HAProxy在tcp mode模式下工作:“tcp & # 8221
链接:
–rsyslog:rsyslogrsyslog:image:registry . cn-Hangzhou . aliyuncs . com/linhuatest/rsyslog:latestredis-master:ports:
–6379/tcp图像:‘雷迪斯:阿尔卑斯’
标签:
#告诉自定义路由暴露端口6379。
aliyun . proxy . TCP _ PORTS:“6379”
#告诉系统需要将此服务的路由添加到自定义路由服务中。
aliyun . proxy . required:“真”redis从属:端口:
–6379/tcp图像:‘雷迪斯:阿尔卑斯’
链接:
–redis-主标签:
#告诉自定义路由暴露端口6379。
aliyun . proxy . TCP _ PORTS:“6379”
#告诉系统需要将此服务的路由添加到自定义路由服务中。
aliyun . proxy . required:“真”
#告诉系统slave需要等待master启动后才能启动,它依赖于master。
aliyun.depends: redis-master命令:redis-server –slave of redis-master 6379 redis-client:image:‘雷迪斯:阿尔卑斯’
链接:
–lb:www.example.com标签:
aliyun.depends: lb命令:redis-CLI-h www.example.com stdin _ open:true tty:true
该方案实现了redis的主从架构,同时通过自定义路由镜像进行负载均衡,在一定程度上实现了高可用性。