【Linux】【Services】【SaaS】Docker+kubernetes(10. 利用反向代理实现服务高可用)
1. 简介
1.1. 由于K8S并没有自己的集群,所以需要借助其他软件来实现,公司的生产环境使用的是Nginx,想要支持TCP转发要额外安装模块,测试环境中我就使用HAPROXY了
1.2. 由于是做实现,我用Nginx又重新实现了一下HAPROXY的TCP转发,都会在本文中介绍
1.3. Haproxy配置参数详解请参考我前面的文章:http://www.cnblogs.com/demonzk/p/6904029.html
2. 环境
2.1. 机器列表
功能与组件 | 机器名 | 服务IP | 管理IP | VIP | Processor Cores | RAM | Storage | 备注 |
HAPROXY | HCTJOSDR01 | 10.30.2.48 | 172.16.0.48 | 172.16.0.148 | ||||
HAPROXY | HCTJOSDR02 | 10.30.2.49 | 172.16.0.49 | 172.16.0.149 |
2.2. 架构图
2.3. 软件版本
haproxy 1.5.18-6.el7
keepalived 1.3.5-1.el7
nginx 1.12.2-1.el7
3. 安装与基础配置
3.1. haproxy
yum安装
yum -y install haproxy
配置haproxy日志,修改/etc/rsyslog.conf
#去掉下面两行的注释
$ModLoad imudp
$UDPServerRun 514
添加一个配置文件/etc/rsyslog.d/haproxy.conf
local2.* /var/log/haproxy.log
修改/etc/sysconfig/rsyslog
#-r是允许接受外部日志
#-c 是说兼容syslog v2
#-m 是说每隔多长时间加一个时间戳,0表示不加
SYSLOGD_OPTIONS="-r -c 2"
修改haproxy配置文件,删掉没用的,添加状态监控页面
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2 chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon # turn on stats unix socket
stats socket /var/lib/haproxy/stats #---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000 #状态监控页面
listen stats 0.0.0.0:9001
stats enable
stats uri /haproxyadmin?stats
stats realm HAProxy\ Statistics
stats auth admin:admin
stats admin if TRUE
启用
systemctl start haproxy && systemctl enable haproxy
3.1. 或者使用Nginx做TCP转发(本次使用Mysql做例子)
安装
yum -y install nginx
在/etc/nginx/nginx.conf中添加下面这段
stream { log_format tcp_proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
include /etc/nginx/tcp.d/*.conf;
}
在/etc/nginx/tcp.d/mysql.hccos.cn.conf中写入如下内容
server {
listen 3306;
proxy_connect_timeout 5s;
proxy_timeout 30s;
proxy_pass mysql;
}
upstream mysql {
server 172.16.0.25:3306 max_fails=3 fail_timeout=10s;
server 172.16.0.26:3306 max_fails=3 fail_timeout=10s;
server 172.16.0.27:3306 max_fails=3 fail_timeout=10s;
}
3.2. keepalived安装
yum安装
yum -y install keepalived
修改/etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
修改/etc/rsyslog.d/keepalived.conf
local0.* /var/log/keepalived.log
在两台机器上修改/etc/keepalived/keepalived.conf
10.30.2.48
global_defs {
notification_email {
eric.zhangtj@homecredit.cn
}
notification_email_from eric.zhangtj@homecredit.cn
smtp_server 10.25.8.2
smtp_connect_timeout 30
router_id LVS_DEVEL
} vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 1
weight 21
} vrrp_script chk_mantaince_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight 2
} vrrp_instance VI_148 {
state MASTER
interface ens192
virtual_router_id 22
garp_master_delay 1
mcast_src_ip 172.16.0.48
lvs_sync_daemon_interface ens192
priority 110
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
ens192
}
virtual_ipaddress {
172.16.0.148/24 dev ens192 label ens192:0
}
track_script {
check_haproxy
chk_mantaince_down
}
} vrrp_instance VI_149 {
state BACKUP
interface ens192
virtual_router_id 23
garp_master_delay 1
mcast_src_ip 172.16.0.49
lvs_sync_daemon_interface ens192
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
ens192
}
virtual_ipaddress {
172.16.0.149/24 dev ens192 label ens192:1
}
track_script {
check_haproxy
chk_mantaince_down
}
}
10.30.2.49
global_defs {
notification_email {
eric.zhangtj@homecredit.cn
}
notification_email_from eric.zhangtj@homecredit.cn
smtp_server 10.25.8.2
smtp_connect_timeout 30
router_id LVS_DEVEL
} vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 1
weight 21
} vrrp_script chk_mantaince_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight 2
} vrrp_instance VI_148 {
state BACKUP
interface ens192
virtual_router_id 22
garp_master_delay 1
mcast_src_ip 172.16.0.48
lvs_sync_daemon_interface ens192
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
ens192
}
virtual_ipaddress {
172.16.0.148/24 dev ens192 label ens192:0
}
track_script {
check_haproxy
chk_mantaince_down
}
} vrrp_instance VI_49 {
state MASTER
interface ens192
virtual_router_id 23
garp_master_delay 1
mcast_src_ip 172.16.0.49
lvs_sync_daemon_interface ens192
priority 110
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
ens192
}
virtual_ipaddress {
172.16.0.149/24 dev ens192 label ens192:1
}
track_script {
check_haproxy
chk_mantaince_down
}
}
启用服务
systemctl start keepalived && systemctl enable keepalived
3.3. 内核参数
修改/etc/sysctl.conf
# Controls IP packet forwarding
# 开启IP转发功能
net.ipv4.ip_forward = 1 # 开启允许绑定非本机的IP
net.ipv4.ip_nonlocal_bind = 1
sysctl -p
【Linux】【Services】【SaaS】Docker+kubernetes(10. 利用反向代理实现服务高可用)的更多相关文章
- Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践
1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...
- docker,构建nginx反向代理tomcat
Nginx实现负载均衡是通过配置nginx.conf来实现的,nginx.conf的全部内容如下: user nginx; worker_processes 1; error_log /var/log ...
- 基于docker+etcd+confd + haproxy构建高可用、自发现的web服务
基于docker+etcd+confd + haproxy构建高可用.自发现的web服务 2016-05-16 15:12 595人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主 ...
- 013.Kubernetes二进制部署worker节点Nginx实现高可用
一 Nginx代理实现kube-apiserver高可用 1.1 Nginx实现高可用 基于 nginx 代理的 kube-apiserver 高可用方案. 控制节点的 kube-controller ...
- 如何利用MongoDB实现高性能,高可用的双活应用架构?
投资界有一句至理名言——“不要把鸡蛋放在同一个篮子里”.说的是投资需要分解风险,以免孤注一掷失败之后造成巨大的损失. 转发来自 如何利用MongoDB实现高性能,高可用的双活应用架构?http://d ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(9. 安装consul实现服务注册发现)
1. 简介 1.1. 官方网站: https://www.consul.io 1.2. Consul的功能: 服务发现:通过DNS或HTTP接口使得消费者发现服务,应用程序可以轻松找到所依赖的服务. ...
- docker配置nginx做反向代理管理tomcat应用
由于业务开始复杂,单一tomcat已经不足以满足业务需求,多tomcat部署起来不方便而且面临域名解析问题,因此开始增加反向代理,由于docker的易用性,便使用docker管理各个应用. docke ...
- 【Asp.net Core】在 Linux 子系统中安装 nginx 并配置反向代理
上一篇鸟文中,老周已经介绍过在 Ubuntu 子系统中安装 dotnet-sdk 的方法,本文老周给大伙伴们说说安装 nginx 服务,并配置反向代理.同样,老周假设你从来没有用过 Linux,所以老 ...
- 在单机Docker上安装 Traefik 反向代理-负载均衡器
一.创建Traefik和容器应用的连接网络 sudo docker network create traefik-net 二.下载Traefik样本配置文件wget https://raw.githu ...
随机推荐
- python实现图片的ROI(region of interest)和泛洪填充
目录: (一)ROI操作 (1)获取感兴趣区域(2)还原操作 (二)泛洪填充floodFill 正文: (一)ROI操作 感兴趣区(Region of Interest,ROIs) 是图像的一部分,它 ...
- Maven 依赖调解源码解析(三):传递依赖,路径最近者优先
本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第三篇,主要介绍依赖调解的第一条原则:传递依赖,路径最近者优先.本篇内容较多,也是开始源码分析的第一篇,请务必仔细阅读,否则后 ...
- [hdu6995]Travel on Tree
问题即查询将其按照dfs序排序后,相邻两点(包括首尾)的距离和 考虑使用莫队+set维护,时间复杂度为$o(n\sqrt{n}\log n)$,无法通过 进一步的,注意到删除是可以用链表实现的,因此考 ...
- [loj3146]路灯
显然,能从$l$到$r$当且仅当$[l,r)$中的灯全部都亮,以下不妨令询问的$r$全部减1 当修改节点$x$时,找到包含$x$的极大的灯(除$x$以外)全部都亮的区间$[l,r]$,即令$l_{0} ...
- [cf1261E]Not Same
问题可以这么理解-- 构造一个$n+1$行$n$列的01矩阵$A$,满足: 1.第$i$列$n+1$个数的和为$a_{i}$ 2.任意两行不完全相同 (对应关系:第$i$行第$j$列为1当且仅当第$i ...
- [atARC119D]Grid Repainting 3
将每一行和每一列分别作为一个点,当第$i$行第$j$列的格子为红色时,将第$i$行与第$j$列连边 此时,考虑选择第$i$行的红色格子并将第$i$行的格子全部改成白色: 关于这一操作的条件,即需要第$ ...
- IDEA修改XML注释风格
作为一个强迫症患者,每次想在xml文件用快捷键注释的时候,它自动生成的注释一直都是这样的:这令我非常难受,于是每次我都要把光标移到前面,然后再Tab以下,让它变成这样可是每次都这样,好麻烦啊,如果自己 ...
- 『与善仁』Appium基础 — 12、Appium的安装详解
目录 (一)Appium server安装 方式一:(桌面方式:推荐) 1.Appium Desktop下载 2.Appium Desktop安装 3.Appium Desktop使用 方式二:(No ...
- Codeforces 840E - In a Trap(树分块+trie)
Codeforces 题面传送门 & 洛谷题面传送门 一道非常精彩,同时也很经典的题目.和这场的 C 一样经典 首先看到这个数据范围先猜正解复杂度:\(n\) 级别大于 \(q\),所以大概是 ...
- Codeforces 704C - Black Widow(dp)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉这种题被评到 *2900 是因为细节太繁琐了,而不是题目本身的难度,所以我切掉这种题根本不能说明什么-- 首先题目中有一个非 ...