②企业 keepalived 高可用项目实战、MySQL+Keepalived、Haproxy 基础

2024-04-04 12:38

本文主要是介绍②企业 keepalived 高可用项目实战、MySQL+Keepalived、Haproxy 基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • MySQL+Keepalived
    • mysql两个节点均操作
    • 安装keepalived---两台机器都操作
    • keepalived 主备配置文件
    • slave 192.168.246.163 配置
    • 重点测试keepalived 公网漂移
    • 有公网编写脚本
    • 添加模块
    • 两边均启动keepalived
    • Haproxy 基础
    • Haproxy 实现七层负载*
    • 一、Haproxy实施步骤
    • 4.测试主/备(浏览器访问)
    • Keepalived实现调度器HA
    • 检测一下keepalived公网漂移
    • keepalived使用script 添加模块
    • Haproxy 实现四层负载均衡
    • Haproxy负载均衡 MySQL nginx +keepalived高可用

MySQL+Keepalived

Keepalived+mysql 自动切换

项目环境:三台机器
VIP 192.168.246.100
mysql1 192.168.246.162 keepalived-master
mysql2 192.168.246.163 keepalived-slave

一、mysql 主主同步(互为主从)        (不使用共享存储,数据保存本地存储)
二、安装keepalived 
三、keepalived主备配置文件
四、mysql状态检测脚本/root/bin/keepalived_check_mysql.sh
五、测试及诊断

实施步骤:
一、mysql 主主同步 <略> 这里可以不用做 先测试可以漂移吗?

mysql两个节点均操作

[root@mysql-keepalived-master ~]# yum -y install mariadb-server mariadb
[root@mysql-keepalived-master ~]# systemctl start mariadb
[root@mysql-keepalived-master ~]# mysql

节点1创建qf1库名,以便测试
创建一个客户端能够测试连接的用户

MariaDB [(none)]> create database qf1;
创建一个客户端能够测试连接的用户
MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by '123456';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;

节点2创建qf2库名,以便测试

[root@mysql-keepalived-slave ~]# yum -y install mariadb-server mariadb
[root@mysql-keepalived-slave ~]# systemctl start mariadb
[root@mysql-keepalived-slave ~]# mysql
MariaDB [(none)]> create database qf2;
创建一个客户端能够测试连接的用户
MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by '123456';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;

安装keepalived—两台机器都操作

[root@mysql-keepalived-master ~]# yum -y install keepalived
[root@mysql-keepalived-slave ~]# yum -y install keepalived

keepalived 主备配置文件

192.168.246.162 master配置

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak   #备份

vim /etc/keepalived/keepalived.conf 原文件备份

! Configuration File for keepalivedglobal_defs {router_id master
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 89priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.246.18/24}
}

slave 192.168.246.163 配置

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak   #备份

vim /etc/keepalived/keepalived.conf 原文件备份

! Configuration File for keepalivedglobal_defs {router_id backup
}
vrrp_instance VI_1 {state BACKUPnopreemptinterface ens33virtual_router_id 89priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.246.18/24}
}

重点测试keepalived 公网漂移

总结一下,如果没有公网,先把keepalived.conf 里面的模块注释掉 重启一下,这里是提前添加的
在这里插入图片描述
脚本软件
在这里插入图片描述
这里我讲一下为什么不一下直接添加模块 还有脚本文件,因为我在做的时候,我全部都配置完成拉,发现公网不能漂移,我测试了一下午,又换机器开始做,
ip a 测试 先看看公网是不是在 主节点上面
在这里插入图片描述
systemctl stop keepalived.service 停掉 高可用 或者是mysql 公网都会飘到slave

在这里插入图片描述

有公网编写脚本

vim /etc/keepalived/keepalived_chech_mysql.sh

第一种脚本,方法这个我使用的有问题,我用的第二个

#!/bin/bash
/usr/bin/mysql -uroot -p'QianFeng@2019!' -e "show status" &>/dev/null 
if [ $? -ne 0 ] ;then 
#	service keepalived stopsystemctl stop keepalived
fi

第二个

#!/bin/bash
/usr/bin/mysql  -e "show status" &>/dev/null 
if [ $? -ne 0 ] ;then 
#	service keepalived stopsystemctl stop keepalived
fi

给执行权限

chmod +x /etc/keepalived/keepalived_chech_mysql.sh

添加模块

一个模块
在这里插入图片描述
一个脚本
在这里插入图片描述
完整的配置文件 主 从 俩个都配置都添加

! Configuration File for keepalivedglobal_defs {router_id backup
}
vrrp_script check_run {script "/etc/keepalived/keepalived_chech_mysql.sh"interval 5
}vrrp_instance VI_1 {state BACKUPnopreemptinterface ens33virtual_router_id 89priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.246.18/24}track_script {check_run}
}

两边均启动keepalived

[root@mysql-keepalived-master ~]# systemctl restart keepalived
[root@mysql-keepalived-master ~]# systemctl enable keepalived

注意:在任意一台机器作为客户端。在测试的时候记得检查mysql用户的可不可以远程登录。
用客户端去连接测试

mysql -uroot -p -h 192.168.246.18
Enter password: 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qf1                |
| test               |
+--------------------+
可以看到qf1库

停止节点1的mariadb服务,查看vip是否漂移

[root@mysql-keepalived-master ~]# systemctl stop mariadb

可以看到vip会漂移到节点2上面
再次用客户端去连接测试

mysql -uroot -p -h 192.168.246.18
Enter password: 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qf2                |
| test               |
+--------------------+
可以看到qf2库

Haproxy 基础

在这里插入图片描述
软件:haproxy—主要是做负载均衡的7层,也可以做4层负载均衡
apache也可以做7层负载均衡,但是很麻烦。实际工作中没有人用。
负载均衡是通过OSI协议对应的
7层负载均衡:用的7层http协议,
4层负载均衡:用的是tcp协议加端口号做的负载均衡

ha-proxy概述
ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一件事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。ha-proxy的特点
ha-proxy 作为目前流行的负载均衡软件,必须有其出色的一面。下面介绍一下ha-proxy相对LVS,Nginx等负载均衡软件的优点。•支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
•支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
•性能非常优秀,基于单进程处理模式(和Nginx类似)让其性能卓越。
•拥有一个功能出色的监控页面,实时了解系统的当前状况。
•功能强大的ACL支持,给用户极大的方便。

haproxy算法:

1.roundrobin
轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.
2.static-rr
基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制
3.leastconn
新的连接请求被派发至具有最少连接数目的后端服务器.

Haproxy 实现七层负载*

Keepalived + Haproxy
=================================================================================
/etc/haproxy/haproxy.cfg
global												      //关于进程的全局参数log         		    127.0.0.1 local2 info  #日志服务器pidfile     		    /var/run/haproxy.pid  #pid文件maxconn     	4000     #最大连接数user        		    haproxy   #用户group       	    haproxy      #组daemon			#守护进程方式后台运行nbproc 1		#工作进程数量  cpu内核是几就写几
defaults 段用于为其它配置段提供默认参数
listen是frontend和backend的结合体frontend        虚拟服务VIrtual Server
backend        真实服务器Real Server调度器可以同时为多个站点调度,如果使用frontend、backend的方式:
frontend1 backend1
frontend2 backend2
frontend3 backend3
Keepalived + Haproxy
=================================================================================
拓扑结构[vip: 192.168.246.17][LB1 Haproxy]		[LB2 Haproxy]192.168.246.169	    192.168.246.161[httpd]				      [httpd] 192.168.246.162		         192.168.246.163

一、Haproxy实施步骤

  1. 准备工作(集群中所有主机)
    准备四台机器 配置解析
cat /etc/hosts
127.0.0.1      	localhost
192.168.246.169	ha-proxy-master
192.168.246.161	ha-proxy-slave
192.168.246.162	test-nginx1 
192.168.246.163	test-nginx2
  1. RS配置
    配置好网站服务器,测试所有RS,所有机器安装nginx
[root@test-nginx1 ~]# yum install -y nginx
[root@test-nginx1 ~]# systemctl start nginx
[root@test-nginx1 ~]# echo "test-nginx1" >> /usr/share/nginx/html/index.html

所有nginx服务器按顺序输入编号,方便区分。

调度器配置Haproxy(主/备)都执行

[root@ha-proxy-master ~]# yum -y install haproxy
[root@ha-proxy-master ~]# cp -rf /etc/haproxy/haproxy.cfg{,.bak} #备份 可以使用mv
[root@ha-proxy-master ~]# sed -i -r '/^[ ]*#/d;/^$/d' /etc/haproxy/haproxy.cfg
解释一下上面这个  删除配置文件里面的 所有空格 #开头的  $开头 的 删除

vim /etc/haproxy/haproxy.cfg 编写配置文件

globallog         127.0.0.1 local2 infopidfile     /var/run/haproxy.pidmaxconn     4000   #最大连接数user        haproxygroup       haproxydaemon               #以后台形式运行ha-proxynbproc 1		    #工作进程数量  cpu内核是几就写几
defaultsmode                    http  #工作模式 http ,tcp 是 4 层,http是 7 层	log                     globalretries                 3   #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查option                  redispatch  #服务不可用后重定向到其他健康服务器。maxconn                 4000  #优先级中contimeout	            5000  #ha服务器与后端服务器连接超时时间,单位毫秒msclitimeout	            50000 #客户端超时srvtimeout	            50000 #后端服务器超时
listen statsbind			*:81stats                   	enablestats uri              	/haproxy  #使用浏览器访问 http://192.168.246.169:81/haproxy,可以看到服务器状态  stats auth           	qianfeng:123  #用户认证,客户端使用elinks浏览器的时候不生效
frontend  webmode                   	http  bind                    	    *:80   #监听哪个ip和什么端口option                  httplog		#日志类别 http 日志格式acl html url_reg  -i  \.html$  #1.访问控制列表名称html。规则要求访问以html结尾的url(可选)use_backend httpservers if  html #2.如果满足acl html规则,则推送给后端服务器httpserversdefault_backend    httpservers   #默认使用的服务器组
backend httpservers    #名字要与上面的名字必须一样balance     roundrobin  #负载均衡的方式server  http1 192.168.246.162:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2server  http2 192.168.246.163:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2

这里上面的,我们只需要 改最后的面的server 改成后端真实服务器

将配置文件拷贝到slave服务器

scp  /etc/haproxy/haproxy.cfg 192.168.246.161:/etc/haproxy/

两台机器启动设置开机启动

systemctl start haproxy
systemctl enable haproxy

4.测试主/备(浏览器访问)

主: 访问 主的真实ip地址,我这里用的我电脑图不用管,你们用你们主节点的ip
http://196.196.196.55:81/haproxy
在这里插入图片描述
http://196.196.196.66:81/haproxy
在这里插入图片描述
页面主要参数解释

Queue
Cur: current queued requests //当前的队列请求数量
Max:max queued requests     //最大的队列请求数量
Limit:           //队列限制数量Errors
Req:request errors             //错误请求
Conn:connection errors          //错误的连接Server列表:
Status:状态,包括up(后端机活动)和down(后端机挂掉)两种状态
LastChk:    持续检查后端服务器的时间
Wght: (weight) : 权重

2.测试访问
通过访问haparoxy的ip地址访问到后端服务器
curl http://192.168.246.169

如果出现bind失败的报错,执行下列命令
setsebool -P haproxy_connect_any=1  #一般都不会出错

Keepalived实现调度器HA

注:主/备调度器均能够实现正常调度

  1. 主/备调度器安装软件
[root@ha-proxy-master ~]# yum install -y keepalived
[root@ha-proxy-slave ~]# yum install -y keepalived
[root@ha-proxy-master ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id director1
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 80priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.246.17/24}
}

从节点

[root@ha-proxy-slave ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id directory2
}
vrrp_instance VI_1 {state BACKUPinterface ens33nopreemptvirtual_router_id 80priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.246.17/24}
}

检测一下keepalived公网漂移

[root@ha-proxy-master ~]# systemctl start keepalived
[root@ha-proxy-master ~]# systemctl enable keepalived
跟上面一样检测 ,我就省略不写拉

扩展对调度器Haproxy健康检查(可选)
思路:两台机器都做
让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Haproxy失败,则关闭本机的Keepalived a. script

cat /etc/keepalived/check_haproxy_status.sh
#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null   
if [ $? -ne 0 ];then                                                                     
#       /etc/init.d/keepalived stopsystemctl stop keepalived
fi									
chmod +x /etc/keepalived/check_haproxy_status.sh  #给执行权限

完整的配置文件 主 从 俩个都配置都添加

keepalived使用script 添加模块

[root@ha-proxy-master keepalived]# cd /etc/keepalived/
[root@ha-proxy-master keepalived]# vim keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id director1
}
vrrp_script check_haproxy {script "/etc/keepalived/check_haproxy_status.sh"interval 5
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 80priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.246.17/24}track_script {check_haproxy}
}

从机器 vim keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id directory2
}
vrrp_script check_haproxy {script "/etc/keepalived/check_haproxy_status.sh"interval 5
}vrrp_instance VI_1 {state BACKUPinterface ens33nopreemptvirtual_router_id 80priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.246.17/24}track_script {check_haproxy}
}

注:必须先启动haproxy,再启动keepalived

 systemctl restart keepalivedsystemctl restart keepalived

下面可添加,可不添加自选

两台机器都配置haproxy的日志:需要打开注释并添加
[root@ha-proxy-master ~]# vim /etc/rsyslog.conf 
# Provides UDP syslog reception  #由于haproxy的日志是用udp传输的,所以要启用rsyslog的udp监听
$ModLoad imudp
$UDPServerRun 514
找到  #### RULES ####   下面添加
local2.*                       /var/log/haproxy.log
[root@ha-proxy-master ~]# systemctl restart rsyslog
[root@ha-proxy-master ~]# systemctl restart haproxy
[root@ha-proxy-master ~]# tail -f /var/log/haproxy.log

Haproxy 实现四层负载均衡

如果单用haproxy,就可以配置,但是没有高可用

两台haproxy配置文件: 最后面添加这个
cat /etc/haproxy/haproxy.cfg

listen mysqlbind *:3306mode tcpbalance roundrobinserver mysql1 192.168.246.163:3306 weight 1  check inter 1s rise 2 fall 2server mysql2 192.168.246.162:3306 weight 1  check inter 1s rise 2 fall 2

inter表示健康检查的间隔,单位为毫秒 可以用1s等,fall代表健康检查失败2回后放弃检查。rise代表连续健康检查成功2此后将认为服务器可用。默认的,haproxy认为服务时永远可用的,除非加上check让haproxy确认服务是否真的可用。

找一台机器做为客户端去测试,在测试的时候注意mysql的远程登录权限

Haproxy负载均衡 MySQL nginx +keepalived高可用

思路;vim /etc/haproxy/haproxy.cfg
haproxy 配置文件有俩个server 俩个端口
在这里插入图片描述
思路;vim /etc/keepalived/keepalived.conf
高可用文件,里面有俩个模块,俩个脚本
在这里插入图片描述
脚本
在这里插入图片描述
都是上面做过的, 重点 不要直接配置 要一步一步错,尤其是公网ip漂移

这篇关于②企业 keepalived 高可用项目实战、MySQL+Keepalived、Haproxy 基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ