(5.19)Mysql+Keepalived+HAproxy读负载均衡

【0】项目架构

相关概念参考:(5.17)mysql集群技术概述(LVS、Keepalived、HAproxy)

Keepalived,只需要在负载均衡机器上配置

而HAproxy需要在所有的4台机器上配置

OS:CentOS7.5

MySQL:5.7.26

Keepalived:1.4.5

描述  IP 主机名
HAproxy+Keepalived:主服务器1 192.168.1.201 db
HAproxy+Keepalived:从服务器2 192.168.1.202 db1
HAproxy+Keepalived的虚拟地址IP(VIP) 192.168.1.210 db/db1来回切换
Mysql:从服务器1 192.168.1.203 db2
Mysql:从服务器2 192.168.1.204 db3

【1】keepalived 安装配置

【1.1】前置环境配置(允许IP非本地绑定支持、防火墙、路由转发)

复制代码
#(1)添加非本机IP绑定支持
echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.conf
sysctl -p

#(2)配置iptables,添加VRRP通讯支持
-A INPUT -d 224.0.0.18 -j ACCEPT #允许组播地址访问本机,组播地址用于keepalived互相检测心跳
-A INPUT -s 192.168.1.0/24 -d 224.0.0.18 -j ACCEPT #允许组播地址通信
-A INPUT -s 192.168.1.0/24 -p vrrp -j ACCEPT #允许VRRP(虚拟路由器冗余协议)通信
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCPET #开发mysql3306端口

#(3)开启路由转发功能
#临时
echo "1">/proc/sys/net/ipv4/ip_forward

#永久
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
复制代码

【1.2】下载安装 Keepalived

复制代码
#(1)下载
官网:https://www.keepalived.org/download.html
wget https://www.keepalived.org/software/keepalived-1.4.5.tar.gz

#(2)安装前置依赖包
mount /dev/cdrom /mnt #加载本地源,有网络直接配置也可(参考:yum源配置、epel源配置)
yum install kernel-devel openssl-devel popt-devel -y

#(3)安装
cd /soft/
tar -zxvf keepalived-1.3.3.tar.gz
cd keepalived-1.3.4
./configure --prefix=/usr/local/keepalived/
make && make install

#(4)设置keepalived开机自启
systemctl enable keepalived

#默认日志在 /var/log/messages
------------下面(5)(6)可以忽略------------------------ #(5)如果不设置自定义目录,默认目录如下 #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ #mkdir /etc/keepalived #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ #cp /usr/local/sbin/keepalived /usr/sbin/ #(5)构建keepalived 配置文件目录与文件 mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ #(6)基本配置文件复制 cp usr/local/keepalived/sbin/keepalived /usr/sbin/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
复制代码

【1.3】修改默认日志位置

复制代码
#默认错误日志位置:/var/log/messages
#(1)修改keepalived的文件
vim /usr/local/keepalived/etc/sysconfig/keepalived

#左边改成右边
KEEPALIVED_OPTIONS="-D" =》 KEEPALIVED_OPTIONS="-D -d -S 0"   

# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
# --dump-conf         -d    Dump the configuration data.
# --log-detail        -D    Detailed log messages.
# --log-facility      -S    0-7 Set local syslog facility (default=LOG_DAEMON)

#(2)修改日志级别参数文件
vi /etc/rsyslog.conf

#在最后一行加上
local0.* /var/log/keepalived.log

#(3)重启日志服务
systemctl daemon-reload systemctl restart rsyslog

【1.4】编辑配置文件 keepalived.conf

mkdir /etc/keepalived
vim /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
复制代码
######### template 192.168.1.200

global_defs 
{#全局定义
   router_id LVS-HA #全局Keepaliveed ID表示,同一个集群需要相同
  notification_email 
  {
     [email protected]
   }
  notification_email_from [email protected]
  smtp_server stmp.qq.com
  smtp_connect_timeout 30
} 

vrrp_script check_run 
{#VRRP自定义脚本,check_run自定义名称
  script "/etc/keepalived/mysql_check.sh" #调用的脚本文件URL
  interval 60 #运行间隔,单位为秒
}

vrrp_sync_group VG1 
{#vrrp同步组,VG1是自定义名称
  group 
  {#组内成员
    VI_1
  }
}

vrrp_instance VI_1 
{#vrrp虚拟实例
    state BACKUP #备用
    interface ens33 #针对监听的网络接口
    virtual_router_id 210 #唯一路由ID,同一个虚拟组要一致
    priority 100 #权限
    advert_int 5 #广播频率,单位是秒,测试keepalived伙伴存活判定
    nopreempt #非抢占模式
    authentication 
  {#同一组keepalived的验证方式
        auth_type PASS
        auth_pass 123456
  }

  track_script 
  {#定义跟踪使用脚本
    check_run #这里就是我们上面自己定义的脚本
  } 
  virtual_ipaddress 
  { #设置虚拟IP
    192.168.1.210/24 
  } 
}

virtual_server 192.168.1.210 3306 
{#配置虚拟组中的服务,IP+端口,以空格分隔
    delay_loop 2 #运行情况检查,IP+端口是否可用,单位是秒
    lb_algo rr   #设置负载调度算法,这里设置rr,即轮询算法
    lb_kind DR   #设置LVS实现负载均衡机制,有NAT、TUN、DR(直接路由)三个模式可选
    persistence_timeout 0 #会话保持单位时间,单位是秒。比如这里写50,则同一个IP连接在50秒内会被分配到同一台真实服务器
    protocol TCP #指定转发协议类型,有TCP和UDP两种

  #虚拟服务组中的实际转发的主机信息
   real_server 192.168.1.202 3306 {#虚拟服务器对应的实际服务器、端口
     weight 1 #配置服务节点的权值,权值数字越大,权值越高
    TCP_CHECK
    {
       connect_timeout 3 #tcp检测参数,表示3秒无响应超时
        retry 3 #表示最大重试次数
        delay_before_retry 3 #表示重试间隔秒数
      #connect_port 3306 #表示连接检测的端口为3306
    }
  }
   real_server 192.168.1.203 3306 {#虚拟服务器对应的实际服务器、端口
     weight 1 #配置服务节点的权值,权值数字越大,权值越高
    TCP_CHECK
    {
       connect_timeout 3 #tcp检测参数,表示3秒无响应超时
        nb_get_retry 3 #最大重试次数
        delay_before_retry 3 #重试间隔秒数
      connect_port 3306 #健康检测的端口为3306
    }
  }
}

复制代码

【我的实际】直接可用的代码

复制代码
########## master 192.168.1.200
global_defs
{#全局定义
router_id LVS-HA #全局Keepaliveed ID表示,同一个集群需要相同
notification_email
{
[email protected]
}
notification_email_from [email protected]
smtp_server stmp.qq.com
smtp_connect_timeout 30
}

vrrp_script check_run
{#VRRP自定义脚本,check_run自定义名称
script "/etc/keepalived/mysql_check.sh" #调用的脚本文件URL
interval 60 #运行间隔,单位为秒
}

vrrp_sync_group VG1
{#vrrp同步组,VG1是自定义名称
group
{#组内成员
VI_1
}
}

vrrp_instance VI_1
{#vrrp虚拟实例
state BACKUP #备用
interface ens34 #针对监听的网络接口
virtual_router_id 210 #唯一路由ID,同一个虚拟组要一致
priority 100 #权限
advert_int 5 #广播频率,单位是秒,测试keepalived伙伴存活判定
nopreempt #非抢占模式
authentication
{#同一组keepalived的验证方式
auth_type PASS
auth_pass 123456
}

track_script
{#定义跟踪使用脚本
check_run #这里就是我们上面自己定义的脚本
}
virtual_ipaddress
{ #设置虚拟IP
192.168.1.210/24
}
}

virtual_server 192.168.1.210 3306
{#配置虚拟组中的服务,IP+端口,以空格分隔
delay_loop 2 #运行情况检查,IP+端口是否可用,单位是秒
lb_algo rr #设置负载调度算法,这里设置rr,即轮询算法
lb_kind DR #设置LVS实现负载均衡机制,有NAT、TUN、DR(直接路由)三个模式可选
persistence_timeout 0 #会话保持单位时间,单位是秒。比如这里写50,则同一个IP连接在50秒内会被分配到同一台真实服务器
protocol TCP #指定转发协议类型,有TCP和UDP两种

#虚拟服务组中的实际转发的主机信息
real_server 192.168.1.202 3306 {#虚拟服务器对应的实际服务器、端口
weight 1 #配置服务节点的权值,权值数字越大,权值越高
TCP_CHECK
{
connect_timeout 3 #tcp检测参数,表示3秒无响应超时
retry 3 #表示最大重试次数
delay_before_retry 3 #表示重试间隔秒数
#connect_port 3306 #表示连接检测的端口为3306
}
}

real_server 192.168.1.203 3306 {#虚拟服务器对应的实际服务器、端口
weight 1 #配置服务节点的权值,权值数字越大,权值越高
TCP_CHECK
{
connect_timeout 3 #tcp检测参数,表示3秒无响应超时
retry 3 #最大重试次数
delay_before_retry 3 #重试间隔秒数
connect_port 3306 #健康检测的端口为3306
}
}
}


########## slave192.168.1.201
global_defs
{#全局定义
router_id LVS-HA #全局Keepaliveed ID表示,同一个集群需要相同
notification_email
{
[email protected]
}
notification_email_from [email protected]
smtp_server stmp.qq.com
smtp_connect_timeout 30
}

vrrp_script check_run
{#VRRP自定义脚本,check_run自定义名称
script "/etc/keepalived/mysql_check.sh" #调用的脚本文件URL
interval 60 #运行间隔,单位为秒
}

vrrp_sync_group VG1
{#vrrp同步组,VG1是自定义名称
group
{#组内成员
VI_1
}
}

vrrp_instance VI_1
{#vrrp虚拟实例
state BACKUP #备用
interface ens34 #针对监听的网络接口
virtual_router_id 210 #唯一路由ID,同一个虚拟组要一致
priority 90 #权限
advert_int 5 #广播频率,单位是秒,测试keepalived伙伴存活判定
nopreempt #非抢占模式
authentication
{#同一组keepalived的验证方式
auth_type PASS
auth_pass 123456
}

track_script
{#定义跟踪使用脚本
check_run #这里就是我们上面自己定义的脚本
}
virtual_ipaddress
{ #设置虚拟IP
192.168.1.210/24
}
}

virtual_server 192.168.1.210 3306
{#配置虚拟组中的服务,IP+端口,以空格分隔
delay_loop 2 #运行情况检查,IP+端口是否可用,单位是秒
lb_algo rr #设置负载调度算法,这里设置rr,即轮询算法
lb_kind DR #设置LVS实现负载均衡机制,有NAT、TUN、DR(直接路由)三个模式可选
persistence_timeout 0 #会话保持单位时间,单位是秒。比如这里写50,则同一个IP连接在50秒内会被分配到同一台真实服务器
protocol TCP #指定转发协议类型,有TCP和UDP两种

#虚拟服务组中的实际转发的主机信息
real_server 192.168.1.202 3306 {#虚拟服务器对应的实际服务器、端口
weight 1 #配置服务节点的权值,权值数字越大,权值越高
TCP_CHECK
{
connect_timeout 3 #tcp检测参数,表示3秒无响应超时
retry 3 #表示最大重试次数
delay_before_retry 3 #表示重试间隔秒数
#connect_port 3306 #表示连接检测的端口为3306
}
}

real_server 192.168.1.203 3306 {#虚拟服务器对应的实际服务器、端口
weight 1 #配置服务节点的权值,权值数字越大,权值越高
TCP_CHECK
{
connect_timeout 3 #tcp检测参数,表示3秒无响应超时
retry 3 #最大重试次数
delay_before_retry 3 #重试间隔秒数
connect_port 3306 #健康检测的端口为3306
}
}
}
复制代码

【1.5】启动、查看 Keepalived

systemctl daemon-reload #重新装载服务
systemctl start keepalived #启动服务
systemctl enable keepalived #设置服务开机自启
systemctl status keepalived #查看服务状态,有没有报错最快可以看这里
ps -ef|grep keepalived|grep -v "grep" #查看服务进程

猜你喜欢

转载自www.cnblogs.com/gered/p/12643487.html