【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" #查看服务进程