四层反向代理集群规划

主机名 角色 IP地址
mfyxw10.mfyxw.com 4层负载均衡(主) 192.168.80.10
mfyxw20.mfyxw.com 4层负载均衡(从) 192.168.80.20

keepalived中的两种模式

(1)master->backup模式
一旦主库宕机,虚拟ip会自动漂移到从库,当主库修复后,keepalived启动后,还会把虚拟ip抢占过来,即使设置了非抢占模式(nopreempt)抢占ip的动作也会发生。
(2)backup->backup模式
当主库宕机后虚拟ip会自动漂移到从库上,当原主库恢复和keepalived服务启动后,并不会抢占新主的虚拟ip,即使是优先级高于从库的优先级别,也不会发生抢占。为了减少ip漂移次数,通常是把修复好的主库当做新的备库。

1.安装Nignx做反向代理

#在mfyxw10主机上安装nginx
[root@mfyxw10 ~]# yum -y install nginx #在mfyxw20主机上安装nginx
[root@mfyxw10 ~]# yum -y install nginx

2.提供反向代理配置

#把如下内容放在/etc/nginx/nginx.conf配置文件的http段外,mfyxw10和mfyxw20主机都需要放
[root@mfyxw10 ~]#cat >> /etc/nginx/nginx.conf << EOF
stream {
upstream kube-apiserver {
server 192.168.80.30:6443 max_fails=3 fail_timeout=30s;
server 192.168.80.40:6443 max_fails=3 fail_timeout=30s;
}
server {
listen 7443;
proxy_connect_timeout 2s;
proxy_timeout 900s;
proxy_pass kube-apiserver;
}
}
EOF

3.检查配置文件是否有误并启动nginx服务

[root@mfyxw10 ~]#nginx -t
[root@mfyxw10 ~]#systemctl enable --now nginx
[root@mfyxw10 ~]#systemctl status nginx [root@mfyxw20 ~]#nginx -t
[root@mfyxw20 ~]#systemctl enable --now nginx
[root@mfyxw20 ~]#systemctl status nginx

4.安装keepalived高可用

#在mfyxw10主机上安装keepalived高可用软件
[root@mfyxw10 ~]#yum -y install keepalived #在mfyxw20主机上安装keepalived高可用软件
[root@mfyxw20 ~]#yum -y install keepalived

5.提供keepalievd监听脚本

在mfyxw10和mfyxw20主机上分别提供keepalived监控端口脚本并赋予可执行权限,截图以mfyxw10主机为例

[root@mfyxw10 ~]#cat > /etc/keepalived/check_port.sh << EOF
#!/bin/bash
#keepalived 监控端口脚本
#使用方法:
#在keepalived的配置文件中
#vrrp_script check_port {#创建一个vrrp_script脚本,检查配置
# script "/etc/keepalived/check_port.sh 6379" #配置监听的端口
# interval 2 #检查脚本的频率,单位(秒)
#}
CHK_PORT=\$1
if [ -n "\$CHK_PORT" ];then
PORT_PROCESS=\`ss -lnt|grep \$CHK_PORT|wc -l\`
if [ \$PORT_PROCESS -eq 0 ];then
echo "Port \$CHK_PORT Is Not Used,End."
exit 1
fi
else
echo "Check Port Cant Be Empty!"
fi
EOF #赋予可执行权限
[root@mfyxw10 ~]#chmod +x /etc/keepalived/check_port.sh

6.提供keepalived配置文件,用于做为主

在mfyxw10主机上提供keepalived配置文件,并设备此机器的keepalived为主

[root@mfyxw10 ~]#cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
router_id 192.168.80.10 } vrrp_script chk_nginx {
script "/etc/keepalived/check_port.sh 7443"
interval 2
weight -20
} vrrp_instance VI_1 {
state BACKUP #经测试设置为MASTER,nopreempt无法生效,设置为BACKUP可生效,但是二台都要设置nopreempt
interface ens33 #此接口要填写你的网卡接口的名称
virtual_router_id 251
priority 100
advert_int 1
mcast_src_ip 192.168.80.10
nopreempt authentication {
auth_type PASS
auth_pass 11111111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.80.100 #此IP是VIP地址
}
}
EOF

温馨提示:

    router_id: 运行keepalived机器的一个标识,一般设置为本地IP地址也行
mcast_src_ip: 发送多播包的地址,如果不设置默认使用绑定网卡的primary ip,一般设置为本机的IP地址
nopreempt:通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候master此时会抢占 VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。所以我们要在配置文件加入nopreempt 非抢 占,但是这个参数只能用于state 为backup,故我们在用HA的时候最好master和backup的state都设置成 backup 让其通过priority来竞争。
state MASTER: 标记该节点是master还是backup
interface 接口名称:配置VIP绑定的网卡,这是使用和外网通信的网卡
virtual_router_id ID号: 取1-255之间的值,主备需要相同,这样才能成为一个组
priority 数字:权重,数值高的主机是master,这是影响主备的关键
nopreempt: 非抢占模式,需要设置state为backup
advert_int 1: 主备之间通讯的间隔秒数,用于判断主节点是否存活
authentication {
auth_type PASS #进行安全认证的方式,PASS或者AH方式,推荐PASS
auth_pass 111 #PASS的密码
}
virtual_ipaddress {
IP地址: 设置VIP地址,最多可以写20个,keepalived启动后会自动配置该处VIP
}

7.提供keepalived配置文件,用于做为备

在mfyxw20主机上提供keepalived配置文件,并设备此机器的keepalived为备

[root@mfyxw20 ~]#cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
global_defs {
router_id 192.168.80.20
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_port.sh 7443"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33 #此接口要填写你的网卡接口的名称
virtual_router_id 251
mcast_src_ip 192.168.80.20
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 11111111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.80.100
}
}
EOF

8.启动keepalived服务并检查

在mfyxw10主机上操作

[root@mfyxw10 ~]# systemctl enable --now keepalived
[root@mfyxw10 ~]# nginx -s reload
[root@mfyxw10 ~]# netstat -luntp | grep 7443
[root@mfyxw10 ~]# ip addr

在mfyxw20主机上操作

[root@mfyxw20 ~]# systemctl enable --now keepalived
[root@mfyxw20 ~]# nginx -s reload
[root@mfyxw20 ~]# netstat -luntp | grep 7443
[root@mfyxw20 ~]# ip addr

9.模拟网络故障

在mfyxw10主机上,把keepalived服务停用,看vip地址是否漂移到备机mfyxw20上

[root@mfyxw10 ~]#systemctl stop keepalived
[root@mfyxw10 ~]#ip addr

在mfyxw20主机上查看vip地址是否已经在此机器上

[root@mfyxw20 ~]#ip addr

模拟mfyxw10主机的keepalived服务已经启动,查看是否从备机mfyxw20上的vip地址漂移回来到主上,那是因为,在keepalived的配置文件中都已经设置了nopreempt并且state都设置为BACKUP

[root@mfyxw10 ~]#systemctl start keepalived
[root@mfyxw10 ~]#ip addr

10.keepalived遇到的问题

1.systemctl无法彻底停掉keepalived

在使用yum安装keepalived(版本为keepalived-1.3.5-16.el7.x86_64)的时候,使用systemctl stop keepalive会出来如何问题,这样会导致无法正常stop掉keepalived进程,再次启动时虽然可以启动,但进程状态里面会提示:Can’t open PID file /var/run/keepalived.pid (yet?) after start

解决方法

vi /lib/systemd/system/keepalived.service
KillMode=process #只杀掉程序的主进程,不管打开的子进程 将此行注释掉即可

Kubernets二进制安装(8)之部署四层反向代理的更多相关文章

  1. Kubernets二进制安装(12)之部署Node节点服务的kube-Proxy

    kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重要组件; kube-proxy负责为Pod创建代理服 ...

  2. Kubernets二进制安装(13)之部署Flannel

    Flannel简介 ​ Flannel是CoreDNS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址 ...

  3. Kubernets二进制安装(7)之部署主控节点服务--apiserver简介

    API Server简介 Kubernetes API Server提供了K8S各类资源对象(如:pod.RC.Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和 ...

  4. Kubernets二进制安装(11)之部署Node节点服务的kubelet

    集群规划 主机名 角色 IP地址 mfyxw30.mfyxw.com kubelet 192.168.80.30 mfyxw40.mfyxw.com kubelet 192.168.80.40 注意: ...

  5. Kubernets二进制安装(9)之部署主控节点控制器controller-manager

    kube-controller-manager运行控制器,它们是处理集群中常规任务的后台线程 Controller Manager就是集群内部的管理控制中心,由负责不同资源的多个Controller构 ...

  6. Kubernets二进制安装(7)之部署主控节点服务--apiserver二进制安装

    kube-apiserver集群规划 主机名 角色 IP地址 mfyxw30.mfxyw.com kube-apiserver主 192.168.80.30 mfyxw40.mfyxw.com kub ...

  7. Kubernets二进制安装(6)之部署主控节点服务--etcd

    Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息. 整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是 网络插件 ...

  8. Kubernets二进制安装(10)之部署主控节点部署调度器服务kube-scheduler

    Kubernetes Scheduler是一个策略丰富.拓扑感知.工作负载特定的功能,调度器显著影响可用性.性能和容量.调度器需要考虑个人和集体的资源要求.服务质量要求.硬件/软件/政策约束.亲和力和 ...

  9. 10、二进制安装K8s之部署CoreDNS 和Dashboard

    二进制安装K8s之部署CoreDNS 和Dashboard CoreDNS 和Dashboard 的yaml文件在 k8s源代码压缩包里面可以找到对应的配置文件,很多人从网上直接下载使用别人的,会导致 ...

随机推荐

  1. Netty学习:ChannelHandler执行顺序详解,附源码分析

    近日学习Netty,在看书和实践的时候对于书上只言片语的那些话不是十分懂,导致尝试写例子的时候遭遇各种不顺,比如decoder和encoder还有HttpObjectAggregator的添加顺序,研 ...

  2. Cookie&Session&Jsp总结

    知识点梳理 Cookie&Session&Jsp 1 会话技术 1.1 会话管理概述 1.1.1 会话技术介绍 会话:浏览器和服务器之间的多次请求和响应 (一次对话) 为了实现一些功能 ...

  3. 【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法

    问题定义 使用Azure应用服务(App Service),部署Java应用,使用Tomcat容器,如何自定义错误页面呢?同时禁用DELETE, PUT方法 解决办法 如何自定义错误页面呢?需要在 J ...

  4. U盘UEFI+GPT模式安装CentOS7.X系统

    1.制作CentOS7安装盘 还是老套路,开局先制作安装盘,UltraISO软碟通,上图   (1) 打开UltraISO软件,选择"文件"-> "打开" ...

  5. 【pytest】(十)fixture参数化-巧用params和ids优雅的创建测试数据

    我们都知道参数化. 比如我要测试一个查询接口/test/get_goods_list,这个接口可以查询到商品的信息. 在请求中,我可以根据请参数goods_status的不同传值,可以查询到对应状态的 ...

  6. 无法获取 vmci 驱动程序版本: 句柄无效。 驱动程序 vmci.sys 版本不正确。请尝试重新安装 VMware Workstation。 打开模块DevicePowerOn电源失败。

    1.别打开电源,然后到虚拟机安装文件夹内.2.找到你的虚拟机系统文件中后缀为vmx的文件,右击用记事本或者Notepad++打开.2.搜索找到vmci0.present='TRUE',字段,把true ...

  7. (06)-Python3之--判断、循环

    1.判断(if) 语法: if 条件(True/False): 条件为真时,执行的代码(要干的事情)[elif 条件: 条件为真时,执行的代码(要干的事情)elif 条件: 条件为真时,执行的代码(要 ...

  8. python_3 装饰器之初次见面

    装饰器 定义:本质是函数,(只不过是用来装饰其他函数而已),就是为其他函数添加附加功能 原则: 1. 不能修改被修饰函数的源代码 2.不能修改被修饰函数的调用方式 实现装饰器的知识储备 1.函数即&q ...

  9. 阿里巴巴微服务与配置中心技术实践之道 配置推送 ConfigurationManagement ConfigDrivenAnyting

    阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08 在面向分布式的微服务系统中,如何通过更高效的配置管理方式,帮助微服务系统架构持续"无痛"的演进 ...

  10. Map转换为格式化的YAML字符串

    yaml与java对象的互转 yaml与java对象的互转有snakeyaml <dependency> <groupId>org.yaml</groupId> & ...