Centos7下采用haproxy+keepalived搭建mysql高可用负载均衡 |
您所在的位置:网站首页 › 炉石外网账号注册不了 › 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、安装haproxysudo yum install -y haproxy 2、配置haproxy.cfgsudo 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、测试haproxyhttp://192.168.7.82:5000/haproxy http://192.168.7.83:5000/haproxy 五、安装keepalived 1、安装keepalivedsudo yum install -y keepalived 2、配置keepalivedsudo 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负载均衡 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |