Keepalived搭建主从架构、主主架构实例

2023-11-22 01:30

本文主要是介绍Keepalived搭建主从架构、主主架构实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实例拓扑图:

DR1和DR2部署Keepalived和lvs作主从架构或主主架构,RS1和RS2部署nginx搭建web站点。

注意:各节点的时间需要同步(ntpdate ntp1.aliyun.com);关闭firewalld(systemctl stop firewalld.service,systemctl disable firewalld.service),设置selinux为permissive(setenforce 0);同时确保DR1和DR2节点的网卡支持MULTICAST(多播)通信。通过命令ifconfig可以查看到是否开启了MULTICAST:

       

Keepalived的主从架构

搭建RS1:
[root@RS1 ~]# yum -y install nginx   #安装nginx
[root@RS1 ~]# vim /usr/share/nginx/html/index.html   #修改主页<h1> 192.168.4.118 RS1 server </h1>
[root@RS1 ~]# systemctl start nginx.service   #启动nginx服务
[root@RS1 ~]# vim RS.sh   #配置lvs-dr的脚本文件#!/bin/bash#vip=192.168.4.120mask=255.255.255.255case $1 instart)echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announceecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceifconfig lo:0 $vip netmask $mask broadcast $vip uproute add -host $vip dev lo:0;;stop)ifconfig lo:0 downecho 0 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/all/arp_announceecho 0 > /proc/sys/net/ipv4/conf/lo/arp_announce;;*) echo "Usage $(basename $0) start|stop"exit 1;;esac
[root@RS1 ~]# bash RS.sh start
参考RS1的配置搭建RS2。
搭建DR1:
[root@DR1 ~]# yum -y install ipvsadm keepalived   #安装ipvsadm和keepalived
[root@DR1 ~]# vim /etc/keepalived/keepalived.conf   #修改keepalived.conf配置文件global_defs {notification_email {root@localhost}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id 192.168.4.116vrrp_skip_check_adv_addrvrrp_mcast_group4 224.0.0.10}vrrp_instance VIP_1 {state MASTERinterface eno16777736virtual_router_id 1priority 100advert_int 1authentication {auth_type PASSauth_pass %&hhjj99}virtual_ipaddress {192.168.4.120/24 dev eno16777736 label eno16777736:0}}virtual_server 192.168.4.120 80 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.4.118 80 {weight 1HTTP_GET {url {path /index.htmlstatus_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.4.119 80 {weight 1HTTP_GET {url {path /index.htmlstatus_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}}
[root@DR1 ~]# systemctl start keepalived
[root@DR1 ~]# ifconfigeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.116  netmask 255.255.255.0  broadcast 192.168.4.255inet6 fe80::20c:29ff:fe93:270f  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:93:27:0f  txqueuelen 1000  (Ethernet)RX packets 14604  bytes 1376647 (1.3 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 6722  bytes 653961 (638.6 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.120  netmask 255.255.255.0  broadcast 0.0.0.0ether 00:0c:29:93:27:0f  txqueuelen 1000  (Ethernet)
[root@DR1 ~]# ipvsadm -lnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.4.120:80 rr-> 192.168.4.118:80             Route   1      0          0         -> 192.168.4.119:80             Route   1      0          0
DR2的搭建基本同DR1,主要修改一下配置文件中/etc/keepalived/keepalived.conf的state和priority:state BACKUP、priority 90. 同时我们发现作为backup的DR2没有启用eno16777736:0的网口:

客户端进行测试:
[root@client ~]# for i in {1..20};do curl http://192.168.4.120;done   #客户端正常访问
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
<h1> 192.168.4.119 RS2 server</h1>
<h1> 192.168.4.118 RS1 server </h1>
[root@DR1 ~]# systemctl stop keepalived.service #关闭DR1的keepalived服务
[root@DR2 ~]# systemctl status keepalived.service #观察DR2,可以看到DR2已经进入MASTER状态 ● keepalived.service - LVS and VRRP High Availability MonitorLoaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)Active: active (running) since Tue 2018-09-04 11:33:04 CST; 7min agoProcess: 12983 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)Main PID: 12985 (keepalived)CGroup: /system.slice/keepalived.service├─12985 /usr/sbin/keepalived -D├─12988 /usr/sbin/keepalived -D└─12989 /usr/sbin/keepalived -DSep 04 11:37:41 happiness Keepalived_healthcheckers[12988]: SMTP alert successfully sent. Sep 04 11:40:22 happiness Keepalived_vrrp[12989]: VRRP_Instance(VIP_1) Transition to MASTER STATE Sep 04 11:40:23 happiness Keepalived_vrrp[12989]: VRRP_Instance(VIP_1) Entering MASTER STATE Sep 04 11:40:23 happiness Keepalived_vrrp[12989]: VRRP_Instance(VIP_1) setting protocol VIPs. Sep 04 11:40:23 happiness Keepalived_vrrp[12989]: Sending gratuitous ARP on eno16777736 for 192.168.4.120 Sep 04 11:40:23 happiness Keepalived_vrrp[12989]: VRRP_Instance(VIP_1) Sending/queueing gratuitous ARPs on eno16777736 for 192.168.4.120 Sep 04 11:40:23 happiness Keepalived_vrrp[12989]: Sending gratuitous ARP on eno16777736 for 192.168.4.120 Sep 04 11:40:23 happiness Keepalived_vrrp[12989]: Sending gratuitous ARP on eno16777736 for 192.168.4.120 Sep 04 11:40:23 happiness Keepalived_vrrp[12989]: Sending gratuitous ARP on eno16777736 for 192.168.4.120 Sep 04 11:40:23 happiness Keepalived_vrrp[12989]: Sending gratuitous ARP on eno16777736 for 192.168.4.120
[root@client ~]# for i in {1..20};do curl http://192.168.4.120;done #可以看到客户端正常访问 <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1> <h1> 192.168.4.119 RS2 server</h1> <h1> 192.168.4.118 RS1 server </h1>

Keepalived的主主架构

 修改RS1和RS2,添加新的VIP:
[root@RS1 ~]# cp RS.sh RS_bak.sh
[root@RS1 ~]# vim RS_bak.sh   #添加新的VIP#!/bin/bash#vip=192.168.4.121mask=255.255.255.255case $1 instart)echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announceecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceifconfig lo:1 $vip netmask $mask broadcast $vip uproute add -host $vip dev lo:1;;stop)ifconfig lo:1 downecho 0 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/all/arp_announceecho 0 > /proc/sys/net/ipv4/conf/lo/arp_announce;;*)echo "Usage $(basename $0) start|stop"exit 1;;esac
[root@RS1 ~]# bash RS_bak.sh start
[root@RS1 ~]# ifconfig...lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 192.168.4.120  netmask 255.255.255.255loop  txqueuelen 0  (Local Loopback)lo:1: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 192.168.4.121  netmask 255.255.255.255loop  txqueuelen 0  (Local Loopback) 
[root@RS1 ~]# scp RS_bak.sh root@192.168.4.119:~
root@192.168.4.119's password: 
RS_bak.sh                100%  693     0.7KB/s   00:00[root@RS2 ~]# bash RS_bak.sh   #直接运行脚本添加新的VIP 
[root@RS2 ~]# ifconfig...lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 192.168.4.120  netmask 255.255.255.255loop  txqueuelen 0  (Local Loopback)lo:1: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 192.168.4.121  netmask 255.255.255.255loop  txqueuelen 0  (Local Loopback)
修改DR1和DR2:
[root@DR1 ~]# vim /etc/keepalived/keepalived.conf   #修改DR1的配置文件,添加新的实例,配置服务器组...vrrp_instance VIP_2 {state BACKUPinterface eno16777736virtual_router_id 2priority 90advert_int 1authentication {auth_type PASSauth_pass UU**99^^}virtual_ipaddress {192.168.4.121/24 dev eno16777736 label eno16777736:1}}virtual_server_group ngxsrvs {192.168.4.120 80192.168.4.121 80}virtual_server group ngxsrvs {...}
[root@DR1 ~]# systemctl restart keepalived.service   #重启服务
[root@DR1 ~]# ifconfig   #此时可以看到eno16777736:1,因为DR2还未配置eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.116  netmask 255.255.255.0  broadcast 192.168.4.255inet6 fe80::20c:29ff:fe93:270f  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:93:27:0f  txqueuelen 1000  (Ethernet)RX packets 54318  bytes 5480463 (5.2 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 38301  bytes 3274990 (3.1 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.120  netmask 255.255.255.0  broadcast 0.0.0.0ether 00:0c:29:93:27:0f  txqueuelen 1000  (Ethernet)eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.121  netmask 255.255.255.0  broadcast 0.0.0.0ether 00:0c:29:93:27:0f  txqueuelen 1000  (Ethernet)
[root@DR1 ~]# ipvsadm -lnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.4.120:80 rr-> 192.168.4.118:80             Route   1      0          0         -> 192.168.4.119:80             Route   1      0          0         TCP  192.168.4.121:80 rr-> 192.168.4.118:80             Route   1      0          0         -> 192.168.4.119:80             Route   1      0          0[root@DR2 ~]# vim /etc/keepalived/keepalived.conf   #修改DR2的配置文件,添加实例,配置服务器组...vrrp_instance VIP_2 {state MASTERinterface eno16777736virtual_router_id 2priority 100advert_int 1authentication {auth_type PASSauth_pass UU**99^^}virtual_ipaddress {192.168.4.121/24 dev eno16777736 label eno16777736:1}}virtual_server_group ngxsrvs {192.168.4.120 80192.168.4.121 80}virtual_server group ngxsrvs {...}
[root@DR2 ~]# systemctl restart keepalived.service   #重启服务
[root@DR2 ~]# ifconfigeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.117  netmask 255.255.255.0  broadcast 192.168.4.255inet6 fe80::20c:29ff:fe3d:a31b  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:3d:a3:1b  txqueuelen 1000  (Ethernet)RX packets 67943  bytes 6314537 (6.0 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 23250  bytes 2153847 (2.0 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.4.121  netmask 255.255.255.0  broadcast 0.0.0.0ether 00:0c:29:3d:a3:1b  txqueuelen 1000  (Ethernet)
[root@DR2 ~]# ipvsadm -lnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.4.120:80 rr-> 192.168.4.118:80             Route   1      0          0         -> 192.168.4.119:80             Route   1      0          0         TCP  192.168.4.121:80 rr-> 192.168.4.118:80             Route   1      0          0         -> 192.168.4.119:80             Route   1      0          0 
客户端测试:
[root@client ~]# for i in {1..20};do curl http://192.168.4.120;done<h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1>
[root@client ~]# for i in {1..20};do curl http://192.168.4.121;done<h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1><h1> 192.168.4.119 RS2 server</h1><h1> 192.168.4.118 RS1 server </h1>

 

转载于:https://www.cnblogs.com/walk1314/p/9578468.html

这篇关于Keepalived搭建主从架构、主主架构实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406499

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者