Centos7下采用haproxy+keepalived搭建mysql高可用负载均衡

 

一、环境

四台centos7虚拟机,mysql版本:Mysql5.7

192.168.7.80 (mysql1)

192.168.7.81 (mysql2)

192.168.7.82 (haproxy+keepalived)

192.168.7.83 (haproxy+keepalived)

192.168.7.78 (vip)

二、设置

1、关闭防火墙和SELINUX(4台虚拟机)

关闭防火墙:systemctl stop firewalld

禁止开机启动:systemctl disable firewalld

查看防火墙状态:firewall-cmd --state或systemctl status firewalld

查看SELinux的状态:getenforce

临时关闭:setenforce 0

永久关闭:vi /etc/selinux/config 

将SELINUX=enforcing改为SELINUX=disabled 重启生效

2、设置yum源(4台虚拟机)

进入yum的文件夹:cd   /etc/yum.repos.d/

删除yum文件夹所有yum源:rm -rf    /etc/yum.repos.d/*.repo

利用wget下载阿里云repo文件:wget  http://mirrors.aliyun.com/repo/Centos-7.repo

执行yum源更新命令:

yum clean all     

yum makecache

yum仓库有多少包:yum repolist

三、安装mysql

1、安装mysql(7.80、7.81)

方法一:(慢,不建议使用)

下载MySQL源安装包

sudo wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

安装MySQL源

sudo yum localinstall mysql57-community-release-el7-8.noarch.r

检查MySQL源是否安装成功

sudo yum repolist enabled | grep "mysql.*-community.*"

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

注意:这一步很重要,不然下面安装mysql-community-common会失败,提示公钥尚未安装,失败的安装

安装MySQL

sudo yum install mysql-community-server

方法二:(快速,建议使用)

参考:https://blog.csdn.net/weixin_39530437/article/details/113334579

官网下载四个安装包:

mysql-community-common-5.7.38-1.el7.x86_64.rpm

mysql-community-libs-5.7.38-1.el7.x86_64.rpm

mysql-community-client-5.7.38-1.el7.x86_64.rpm

mysql-community-server-5.7.38-1.el7.x86_64.rpm

将安装包上传到/root/目录下,运行下列命令

rpm -ivh mysql-community-common-5.7.38-1.el7.x86_64.rpm --force --nodeps

rpm -ivh mysql-community-libs-5.7.38-1.el7.x86_64.rpm --force --nodeps

rpm -ivh mysql-community-client-5.7.38-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-server-5.7.38-1.el7.x86_64.rpm --force --nodeps

2、启动MySQL服务

sudo systemctl start mysqld

查看MySQL的启动状态

sudo systemctl status mysqld或者sudo ps -le | grep mysqld

开机启动mysql

sudo systemctl enable mysqld

sudo systemctl daemon-reload(重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要使新服务的服务程序配置文件生效,需重新加载)

3、修改 MySQL 中 root 本地登录密码

mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过以下命令找到密码:sudo grep 'temporary password' /var/log/mysqld.log

登录MySQL

mysql -u root -p

修改root用户密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lr12345!';

或set password for 'root'@'localhost'=password('Lr12345!');

4、允许远程登录

开启root用户远程连接(任意IP都可以访问)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Lr12345!' WITH GRANT OPTION;

刷新MySQL的系统权限相关表

flush privileges;

5、Mysql主主复制

(1)修改mysql配置文件

在7.80和7.81的MySQL配置文件/etc/my.cnf分别增加下面这一段。

7.80

server-id=80   #任意自然数n,只要保证两台MySQL主机不重复就可以了。

log-bin=mysql-bin   #开启二进制日志

auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n

auto_increment_offset=1   #起始值。一般填第n台主MySQL。此时为第一台主MySQL

replicate-do-db=aa   #要同步的数据库,默认所有库

7.81

server-id=81

log-bin=mysql-bin

auto_increment_increment=2

auto_increment_offset=2

replicate-do-db=aa

保存后,重启mysql服务

sudo systemctl restart mysqld

或sudo service mysqld restart

(2)配置192.168.7.80主从复制,7.80为主,7.81为从

查看主mysql(7.80)二进制日志

mysql> show master status;

在从mysql(7.81)告知二进制文件名与位置

mysql> change master to

    -> master_host='192.168.7.80',

    -> master_user='root',

    ->master_password='Lr12345!',

    ->master_log_file='mysql-bin.000001',

    -> master_log_pos=154;

查看结果

mysql> start slave;

mysql> show slave status\G;

验证主从同步

192.168.7.80主MySQL操作:

            mysql>create database aa;

            mysql>use aa;

            mysql>create table tab1(id int auto_increment,name varchar(10),primary key(id));

            mysql>show databases;

            mysql>show tables;

(3)反过来,配置192.168.7.81主从复制,即7.81为主,7.82为从

与小节2配置192.168.7.80主从复制类似

四、安装haproxy(7.82、7.83)

1、安装haproxy

sudo yum install -y haproxy

2、配置haproxy.cfg

sudo vi /etc/haproxy/haproxy.cfg

内容如下:

global

log 127.0.0.1 local2 #日志定义级别

chroot /var/lib/haproxy #当前工作目录

pidfile /var/run/haproxy.pid #进程id

maxconn 4000 #最大连接数

user haproxy #运行改程序的用户

group haproxy

daemon #后台形式运行

stats socket /var/lib/haproxy/stats

defaults

mode tcp #haproxy运行模式(http | tcp | health)

log global

option dontlognull

option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器

retries 3 #三次连接失败则服务器不用

timeout http-request 10s

timeout queue 1m

timeout connect 10s #连接超时

timeout client 1m #客户端超时

timeout server 1m #服务器超时

timeout http-keep-alive 10s

timeout check 10s #心跳检测

maxconn 600 #最大连接数

listen stats #配置haproxy状态页(用来查看的页面)

mode http

bind :5000

stats enable

stats hide-version #隐藏haproxy版本号

stats uri /haproxy #一会用于打开状态页的uri

stats realm Haproxy\ Statistics #输入账户密码时的提示文字

stats auth admin:admin #用户名:密码

frontend  main

bind 0.0.0.0:3306

default_backend             mysql

backend mysql

balance leastconn #使用最少连接方式调度

server mysql1 192.168.7.80:3306 check port 3306 maxconn 300

server mysql2 192.168.7.81:3306 check port 3306 maxconn 300

3、启动haproxy

启动haproxy服务

sudo service haproxy start

开机启动haproxy

sudo chkconfig haproxy on

4、配置启动日志

sudo vi /etc/rsyslog.conf

去掉注释

$ModLoad imtcp   

$InputTCPServerRun 514 

增加这一行

local2.*      /var/log/haproxy.log  

重启rsyslog

sudo service rsyslog restart

5、测试haproxy

http://192.168.7.82:5000/haproxy

http://192.168.7.83:5000/haproxy

五、安装keepalived

1、安装keepalived

sudo yum install -y keepalived

2、配置keepalived

sudo vi /etc/keepalived/keepalived.conf

7.82内容如下:

! Configuration File for keepalived

#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;

global_defs {

notificationd LVS_DEVEL

}

#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;

vrrp_script chk_haproxy {

script “/etc/keepalived/chk.sh” #具体脚本路径

interval 2 #脚本循环运行间隔

}

#VRRP虚拟路由冗余协议配置

vrrp_instance VI_1 { #VI_1 是自定义的名称;

state BACKUP

#MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】

nopreempt #开启不抢占

interface eth0 #指定VIP需要绑定的物理网卡

virtual_router_id 11

#VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同

priority 130 #定义这台设备的优先级1-254;开启了不抢占,所以此处优先级必须高于另一台

advert_int 1 #生存检测时的组播信息发送间隔,组内一致

authentication { #设置验证信息,组内一致

auth_type PASS #有PASS 和 AH 两种,常用 PASS

auth_pass asd #密码

}

virtual_ipaddress {

192.168.7.78 #指定VIP地址,组内一致,可以设置多个IP

}

track_script { #使用在这个域中使用预先定义的脚本,上面定义的

chk_haproxy

}

notify_backup “/etc/init.d/haproxy restart”

#表示当切换到backup状态时,要执行的脚本

notify_fault “/etc/init.d/haproxy stop” #故障时执行的脚本

}

7.83内容如下:

! Configuration File for keepalived

#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;

global_defs {

notificationd LVS_DEVEL

}

#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;

vrrp_script chk_haproxy {

script “/etc/keepalived/chk.sh” #具体脚本路径

interval 2 #脚本循环运行间隔

}

#VRRP虚拟路由冗余协议配置

vrrp_instance VI_1 { #VI_1 是自定义的名称;

state BACKUP

#MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】

nopreempt #开启不抢占

interface eth0 #指定VIP需要绑定的物理网卡

virtual_router_id 11

#VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同

priority 120 #定义这台设备的优先级

1-254;开启了不抢占,所以此处优先级必须小于另一台

advert_int 1 #生存检测时的组播信息发送间隔,组内一致

authentication { #设置验证信息,组内一致

auth_type PASS #有PASS 和 AH 两种,常用 PASS

auth_pass asd #密码

}

virtual_ipaddress {

192.168.7.78 #指定VIP地址,组内一致,可以设置多个IP

}

track_script { #使用在这个域中使用预先定义的脚本,上面定义的

chk_haproxy

}

notify_backup “/etc/init.d/haproxy restart”

#表示当切换到backup状态时,要执行的脚本

notify_fault “/etc/init.d/haproxy stop” #故障时执行的脚本

}

3、创建chk.sh(7.82、7.83)

sudo vi /etc/keepalived/chk.sh

内容如下:

#!/bin/bash

if [ $(ps -C mysqld --no-header | wc -l) -eq 0 ]; then

service mysqld start

sleep 3

if [ $(ps -C mysqld --no-header | wc -l) -eq 0 ]; then

service keepalived stop

fi

fi

if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then

service haproxy start

sleep 3

if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then

service keepalived stop

fi

fi

给chk.sh授权

sudo chmod +x /etc/keepalived/chk.sh

4、启动keepalived

启动服务keepalived

sudo service keepalived start

开机启动keepalived

sudo chkconfig keepalived on

六、整个环境测试

1、测试同步

找一台192.168.7.*的客户端,用虚拟IP 192.168.7.78  root  Lr12345!去连接数据库。并在数据库aa上去创建表和添加数据。然后在分别连接192.168.7.80和192.168.7.81的数据库查看是否同步。

2、在haproxy后台监控

http://192.168.7.78:5000/haproxy

3、测试高可用

(1)7.80、7.81任意一台断网,测试mysql高可用。

(2)7.82、7.83任意一台断网,测试haproxy、keepalived的高可用。

查看haproxy后台监控:haproxy的PID的变化,以及mysql的状态

查看7.78的MAC地址变化arp -a 192.168.7.78

4、测试mysql负载均衡

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,需要安装和配置HAProxyKeepalived。在CentOS 7上,可以使用以下命令进行安装: ```bash sudo yum install haproxy keepalived ``` 然后,可以按照以下步骤进行配置: 1. 配置HAProxy - 编辑`/etc/haproxy/haproxy.cfg`文件,添加以下内容: ```cfg frontend http-in bind *:80 default_backend app_servers backend app_servers balance roundrobin mode tcp server app1 192.168.1.101:73 check server app2 192.168.1.102:73 check ``` 这里假设有两个应用服务器,分别是192.168.1.101和192.168.1.102,应用服务器的端口是73。HAProxy会将流量均衡到这两个服务器上。 2. 配置Keepalived - 编辑`/etc/keepalived/keepalived.conf`文件,添加以下内容: ```cfg vrrp_script chk_haproxy { script "pidof haproxy" interval 2 } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 101 virtual_ipaddress { 192.168.1.100 } track_script { chk_haproxy } } ``` 这里配置了一个VRRP实例,将虚拟IP地址设置为192.168.1.100,并将HAProxy设置为主服务器。如果HAProxy停止运行,Keepalived会将虚拟IP地址转移到备用服务器上。 3. 启动服务 - 启动HAProxyKeepalived服务: ```bash sudo systemctl start haproxy sudo systemctl start keepalived ``` 现在,后端应用的负载均衡高可用性已经配置完成。可以使用浏览器访问虚拟IP地址192.168.1.100:80,HAProxy会将流量分发到后端应用服务器上。如果主服务器上的HAProxy停止运行,Keepalived会将虚拟IP地址转移到备用服务器上,从而保证服务的高可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值