centos7/redhat7 Mysql搭建主主集群+Keepalived高可用

一、在两台服务器上部署mysql:
1、下载mysql(新版本是5.7.38):
https://downloads.mysql.com/archives/community/
2、安装mysql:
查看是否安装了依赖:rpm –qa | grep libaio
tar xvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.27-linux-glibc2.12-x86_64 mysql
mkdir /data/mysqldata
创建mysql组及mysql用户,并赋权:
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /data/mysqldata
修改mysql配置文件:vi /etc/my.cnf (把原先的my.cnf中的内容都注释掉,再将以下内容copy到my.cnf中)
[mysqld]
basedir=/data/mysql
datadir=/data/mysqldata
port = 3306
socket=/tmp/mysql.sock

symbolic-links=0
log-error=/var/log/mysql/mysqld.log
pid-file=/tmp/mysqld/mysqld.pid
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server_id=1
max_connections=1500
lower_case_table_names=1
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake

创建mysql所需文件:
cd /tmp
touch mysql.sock
chown mysql:mysql mysql.sock
chmod 755 mysql.sock
 
cd /tmp
mkdir mysqld
cd mysqld
touch mysqld.pid
cd ..
chown -R mysql:mysql mysqld
cd mysqld
chmod 755 mysqld.pid
 
mkdir /var/log/mysql
touch /var/log/mysql/mysqld.log
chown -R mysql:mysql /var/log/mysql
cd /var/log/mysql
chmod 755 mysqld.log
初始化数据库:
cd /data/mysql/bin/
./mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysqldata
cd /data/mysql/bin/ 
./mysqld_safe --user=mysql & (启动后过个几秒,按回车即可回到命令行)
查询mysql登录密码:cat /var/log/mysql/mysqld.log | grep -i pass
登录mysql并修改密码、授权远程连接:
cd /data/mysql/bin/
./mysql -uroot -p
set password=password("Mysql#$123");
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Mysql#$123' WITH GRANT OPTION;
ALTER USER 'root'@'%' IDENTIFIED BY 'Mysql#$123';
FLUSH PRIVILEGES;

设置开机自启动:
cp -a /data/mysql/support-files/mysql.server  /etc/init.d/mysql
chkconfig --add mysql
chkconfig --list mysql
添加快捷方式:
ln -s /data/mysql/bin/mysql /usr/bin
mysql服务启动或停止命令:
service mysql start
service mysql stop

二、配置mysql主主集群:
1、将B机器的mysql配置文件my.cnf的server-id设置为2,然后重启mysql服务,mysql –uroot –p进入数据库:
Mysql>show master status;(记住此时的File名称和Position)
2、进入A机器的数据库:
Mysql>show master status;(记住此时的File名称和Position)
在B机器的数据库中运行(如果mysql不是使用的3306端口,则需要加master_port=端口参数,不加的话,默认使用3306端口进行主主集群的配置):
mysql> change master to
     -> master_host='A机器IP',
     -> master_user='root',
     -> master_password='root密码',
     -> master_log_file='A机器File名称',
     -> master_log_pos=A机器Position;
mysql> start  slave;
在A机器的数据库中运行:
mysql> change  master to
     -> master_host='B机器IP',
     -> master_user='root',
     -> master_password='root密码',
     -> master_log_file='B机器File名称',
     -> master_log_pos=B机器Position;
mysql> start  slave;
两台机器都执行:Mysql>show slave status\G(主主同步配置完毕,查看同步状态Slave_IO_Running和Slave_SQL_Running是YES说明主主同步成功)
测试主主同步:两台机器分别创建不同名称的数据库,然后两台进行都运行mysql> show databases;
,查看这两台数据库中是不是都存在这两个刚刚创建的数据库名称,有,则表示均能读写并且做到了数据同步,是成功的表示。

三、配置keepalived:
两台机器都安装:yum -y install keepalived
设置开机自启:systemctl enable keepalived
A机器配置:
vi /etc/keepalived/keepalived.conf
# 清空keepalived.conf 中的内容,copy如下内容 
global_defs {
            #vrrp_strict # 注释或者删除了
        }
        vrrp_instance VI_1 {
            state MASTER         # 初始状态
            interface ens224     # ip a查看网卡名称,选择当前机器服务IP所在的网卡名称
            virtual_router_id 51 # 虚拟路由ID,同集群中ID必须一样,且同集群唯一
            priority 101         # 优先级,值越大优先级越高,BACKUP一定要低于MASTER
            advert_int 1
            nopreempt            #开启非抢占模式
            authentication {
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress {
                192.168.0.10  # 要生成的VIP地址
            }
        }

        virtual_server 192.168.0.10 3306 {    # 虚拟服务的IP和端口
            delay_loop 6
            protocol TCP

            real_server 127.0.0.1 3306 {         # 真实服务的IP和端口
                weight 1
                notify_down "pkill keepalived"   # 真实服务器端口连不上的时候执行的命令,停止keepalived
                TCP_CHECK {                # 健康检查策略,TCP_CHECK,用tcp协议连接端口
                    connect_port 3306      # 健康检查连接的端口
                    connect_timeout 3      # 连接超时时间
                    nb_get_retry 3         # 重试次数
                    delay_before_retry 3   # 健康检查轮询时间间隔
                }
            }
        }


B机器配置:
# 清空keepalived.conf 中的内容,copy如下内容
vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
            state BACKUP         # 初始状态为BACKUP
            interface ens224     # ip a查看网卡名称,选择当前机器服务IP所在的网卡名称
            virtual_router_id 51 # 虚拟路由ID,同集群中ID必须一样,且同集群唯一
            priority 91         # 优先级,值越大优先级越高,BACKUP一定要低于MASTER
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress {
                192.168.0.10  # 要生成的VIP地址
            }
        }

virtual_server 192.168.0.10 3306 {    # 虚拟服务的IP和端口
            delay_loop 6
            protocol TCP

            real_server 127.0.0.1 3306 {         # 真实服务的IP和端口
                weight 1
                notify_down "pkill keepalived"   # 真实服务器端口连不上的时候执行的命令,停止keepalived
                TCP_CHECK {                # 健康检查策略,TCP_CHECK,用tcp协议连接端口
                    connect_port 3306      # 健康检查连接的端口
                    connect_timeout 3      # 连接超时时间
                    nb_get_retry 3         # 重试次数
                    delay_before_retry 3   # 健康检查轮询时间间隔
                }
            }
        }

四、keepalived使用说明:
如果当前VIP所在的A数据库出现故障,VIP会在三秒内转移至B数据库,将由B数据库提供服务,此时A数据库的mysql服务down掉,keepalived服务也会跟着down掉,需要在修复A数据库后,将A机器的keepalived服务重启,VIP将会继续转移至A数据库。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值