目录
一、mysql+keeplived实现高可用+LVS负载均衡
一、什么是高可用
二、为什么要用高可用
三、高可用的作用
四、keeplived 是什么?它用在哪里
五、安装mysql以及配置主从
六、keepalived安装
1、配置 单VIP 实现高可用 master上配置
2、backup上的配置
3、LVS配置 实现负载均衡:见下图
二、使用Mysqlrouter搭建MySQL的读写分离功能
1、简介:
2、配置
一、mysql+keeplived实现高可用+LVS负载均衡
一、什么是高可用
就是指系统或功能提供者在经过设计后,该系统或功能能够长时间的保持正常状态运行的能力
二、为什么要用高可用
为了防止单点故障,主要是因为现在IT系统对于稳定性具有较高的要求,一旦系统出现故障,将会影响到业务的正常运行,甚至会导致数据丢失,出现严重损失,所以确保系统能够稳定运行,保证了业务的连续与数据的可靠性。
三、高可用的作用
1、提高系统的稳定性
2、提高业务的可靠性
3、改善用户体验
4、降低维护成本
四、keeplived 是什么?它用在哪里
官网:Keepalived for Linux
keeplived是开源软件,提供了一个简单而高效的方式来实现负载均衡和故障转移。
主要用户一下几个方面:
1、实现负载均衡:它使用不通的算法,例如轮询、加权轮询、最少连接数等,将客户端请求平均分到多个后端服务器上,达到负载均衡
2、提高系统的可用性:可以对堕胎服务器进行监视,并自动切换到另一个可用的节点来避免单点故障。
3、构建高可用性架构:通过配合虚拟IP、虚拟路由(VRRP)等,可以构建高可用性架构,保证服务的连续性和稳定性。
五、安装mysql以及配置主从
安装和配置信息详见:十、MySQL主从架构配置-CSDN博客
六、keepalived安装
keepalived 的详细安装在这里不在详解,会单独写一篇文章详解其参数。
[root@mysqlrouter-1 mysqlrouter]# yum install keepalived -y
然后修改配置文件
1、配置 单VIP 实现高可用 master上配置
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_DEVEL
# vrrp_strict # 这一行需要注释:原因是因为会在iptables里添加一条规则,会阻止网络通信,导致出现脑裂现象
}
vrrp_instance VI_1 { # 定义一个vrrp协议的实例 名字是VI_1 表示第一个vrrp实例
state MASTER # 做master角色
interface ens33 # 指定监听网络的接口,其实就是vip绑定到那个网络接口上
virtual_router_id 199 # 虚拟路由器ID 199表示的是编号,MASTER 和 BACKUP 必须是一致的。
priority 160 # 优先级 数字越大就越容易成为master
advert_int 1 # 宣告消息的时间间隔 为1s
authentication {
auth_type PASS # 密码认证 password
auth_pass 1111 # 具体密码 可以不用修改
}
virtual_ipaddress { # vip 虚拟ip地址 可以配置多个
192.168.134.199 # 配置的vip
}
}
2、backup上的配置
cat keepalived.conf
global_defs {
router_id LVS_DEVEL
# vrrp_strict # 这一行需要注释:原因是因为会在iptables里添加一条规则,会阻止网络通信,导致出现脑裂现象
}
vrrp_instance VI_1 { # 定义一个vrrp协议的实例 名字是VI_1 表示第一个vrrp实例
state BACKUP # 做backup角色
interface ens33 # 指定监听网络的接口,其实就是vip绑定到那个网络接口上
virtual_router_id 199 # 虚拟路由器ID 81表示的是编号,MASTER 和 BACKUP 必须是一致的。
priority 100 # 优先级 数字越大就越容易成为master
advert_int 1 # 宣告消息的时间间隔 为1s
authentication {
auth_type PASS # 密码认证 password
auth_pass 1111 # 具体密码 可以不用修改
}
virtual_ipaddress { # vip 虚拟ip地址 可以配置多个
192.168.134.199 # 配置的vip 必须与master配置的vip是一样的
}
}
3、LVS配置 实现负载均衡:见下图
参数详解:
virtual_server 192.168.134.199 3306{:表示将我的请求发送到哪几台机器
delay_loop:设置健康检查的时间间隔,单位是秒
lb_algo:设置负载均衡的算法。可用的有rr、wrr、lc、wlc、等。此设置为wrr
lb_kind:设置LVS实现负载均衡的机制。有NAT、TUN、DR三个模式可选
nat_mask:255.255.255.0
protocol:TCP 转发协议,有TCP和UDP两种
real_server 192.168.134.132 3306{ //表示接受的节点,IP和端口用空格隔开,就是把199这个读的请求 发送到这个机器上
weight 1 :用来配置real_server节点权值,数字越大 权值越高
inhibit_on_failure:表示在检测到real server 节点失效后,把它的weight 值设置为 0,而不是从IPVS 中删除。
TCP_CHECK {:健康检查,常见的 有 HTTP_GET、SSL_GET、TCP_CHECK
connect_timeout 3 :表示无响应超时时间,单位是秒,这里是3秒超时
nb_get_retry 3 :表示重试次数,这里是3次。
delay_before_retry 3 :表示重试间隔,这里是间隔3秒。
connect_port 3306 :健康检查的端口,如果无指定,默认是real_server 指定的端口。
}
}
real_server 192.168.134.133 3306{ //表示接受的节点,IP和端口用空格隔开,就是把199这个读的请求 发送到这个机器上
weight 1 :用来配置real_server节点权值,数字越大 权值越高
inhibit_on_failure:表示在检测到real server 节点失效后,把它的weight 值设置为 0,而不是从IPVS 中删除。
TCP_CHECK {:健康检查,常见的 有 HTTP_GET、SSL_GET、TCP_CHECK
connect_timeout 3 :表示无响应超时时间,单位是秒,这里是3秒超时
nb_get_retry 3 :表示重试次数,这里是3次。
delay_before_retry 3 :表示重试间隔,这里是间隔3秒。
connect_port 3306 :健康检查的端口,如果无指定,默认是real_server 指定的端口。
}
}
}
其他健康检查方式,我的环境是TCP,仅供参考
HTTP_GET |SSL_GET {
url { :
path /index.html
digest e6c271eb5f017f280cf97ec2f51b02d3
status_code 200
}
connect_port 80
bindto 192.168.12.80
connect_timeout 3
nb_get_retry 3
delay_before_retry 2
}
启动
ip add 就可以查看虚拟IP
如果转发不成功,就需要在每台转发的 real_server 上边还要做一个配置
vim /etc/init.d/realserver.sh
#!/bin/bash
SNS_VIP=192.168.134.199
NET_MASK=255.255.255.255
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask $NET_MASK broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit
改完之后 切记 需要start下
/etc/init.d/realserver.sh start
二、使用Mysqlrouter搭建MySQL的读写分离功能
1、简介:
MySQL Router的前提是后端实现了MySQL的主从复制,它必须能够分析来自前面客户端的SQL请求是写请求还是读请求,以便决定这个SQL请求是发送给master还是slave,以及发送给哪个master、哪个slave。这样,MySQL Router就实现了MySQL的读写分离,对MySQL请求进行了负载均衡。
官网下载地址:https://downloads.mysql.com/archives/router/
https://downloads.mysql.com/archives/router/
下载完 rpm 安装包 直接安装 rpm -ivh
或者下载tar文件,解压、然后新建一个文件,放MySQL Router.
安装完成
将MySQL Router环境变量配置到/etc/profile文件中:
vim /etc/profile
export PATH=$PATH:/data/mysql/mysql-router-8.0.28/bin
[root@local110 ~]# source /etc/profile
2、配置
[root@local110 ~]# cd /data/mysql/mysql-router-8.0.28
[root@local110 mysql-router-8.0.28]# ls
bin lib LICENSE.router man README.router share
[root@local110 mysql-router-8.0.28]# mkdir data run conf log
[root@local110 mysql-router-8.0.28]# ls
bin conf data lib LICENSE.router log man README.router run share
data:数据持久化目录
run:运行状态目录
conf:配置文件存放目录
log:日志目录
将安装目录下的示例配置文件拷贝到conf目录下:
[root@local110 mysql-router-8.0.28]# cp share/doc/mysqlrouter/sample_mysqlrouter.conf conf/mysqlrouter.conf
更改整个安装包的属主和属组:
[root@local110 ~]# chown -R mysql:mysql /data
[root@local110 ~]# cd /data/mysql/mysql-router-8.0.28/conf
[root@local110 conf]# vim mysqlrouter.conf
......
[DEFAULT]
user = mysql
logging_folder = /data/mysql/mysql-router-8.0.28/log
plugin_folder = /data/mysql/mysql-router-8.0.28/lib/mysqlrouter
runtime_folder = /data/mysql/mysql-router-8.0.28/run
data_folder = /data/mysql/mysql-router-8.0.28/data
[logger]
level = INFO
filename = mysqlrouter.log
[routing:failover] //失败转移
bind_address = 0.0.0.0 //本地IP
bind_port = 7001
max_connections = 1024 //最大连接数
connect_timeoit = 3 //连接超时时间
mode = read-write // 模式:读还是写
destinations = 192.168.134.132:3306,192.168.134.133:3306 // 后端服务器地址
[routing:balancing] //负载均衡
bind_address = 0.0.0.0
bind_port = 7002
max_connections = 1024
mode = read-only
destinations = 192.168.134.132:3306,192.168.134.133:330
参数文件配置完成后,正式启动MySQL Router。
mysqlrouter -c /data/mysql/mysql-router-8.0.28/conf/mysqlrouter.conf
查看日志
tailf /data/mysql/mysql-router-8.0.28/log/mysqlrouter.log
起来之后,登录数据库可以查看 是否均衡