Mysql+mycat+keepalive+haproxy高可用集群搭建
Mysql部署高可用---Mysql安装
Mysql集群地址规划
| IP地址 | 主机名 | 职责 | 备注 |
|---|---|---|---|
| 192.168.1.150 | mysql-150-master | mysql主 | 从节点为:192.168.1.152:3307、192.168.1.153:3307、192.168.1.154:3307 |
| 192.168.1.151 | mysql-151-master | mysql主 | 从节点为:192.168.1.152:3308、192.168.1.153:3308、192.168.1.154:3308 |
| 192.168.1.152 | mysql-152-slave | mysql从 | 需要安装两个实例端口分别为3307,3308 |
| 192.168.1.153 | mysql-153-slave | mysql从 | 需要安装两个实例端口分别为3307,3308 |
| 192.168.1.154 | mysql-154-slave | mysql从 | 需要安装两个实例端口分别为3307,3308 |
前期准备:域名设置
mysql-150-master 域名设置
[root@localhost ~]# hostnamectl set-hostname mysql-150-master
[root@localhost ~]# bash
[root@mysql-150-master ~]#
mysql-151-master 域名设置
#设置151主机域名
[root@mysql-150-master ~]# hostnamectl set-hostname mysql-151-master
[root@mysql-150-master ~]# bash
bash
mysql-152-slave 域名设置
#设置152主机域名
[root@localhost ~]# hostnamectl set-hostname mysql-152-slave
[root@localhost ~]# bash
[root@mysql-152-slave ~]#
mysql-153-slave 域名设置
#设置153主机域名
[root@localhost ~]# hostnamectl set-hostname mysql-153-slave
[root@localhost ~]# bash
[root@mysql-153-slave ~]#
mysql-154-slave 域名设置
#设置154主机域名
[root@localhost ~]# hostnamectl set-hostname mysql-154-slave
[root@localhost ~]# bash
bash
[root@mysql-154-slave ~]#
检查是否已经安装mysql 或者mariadb
分别在5个节点上执行,如果有安装需要卸载
#检查是否已经安装过了
[root@mysql-150-master home]# rpm -qa | egrep "mariadb|mysql"
mariadb-libs-5.5.68-1.el7.x86_64
存在安装包,先卸载安装包
[root@mysql-150-master home]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
[root@mysql-150-master home]#
解压mysql.tar.gz
mysql 统一安装到/home路径
[root@mysql-150-master home]# pwd
/home
# 解压mysql安装包
[root@mysql-150-master home]# tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
#解压完成将mysql文件重命名
[root@mysql-150-master home]# mv mysql-5.7.22-linux-glibc2.12-x86_64 mysql-5.7.22
创建mysql用户和用户组
#在150节点上添加mysql用户,用户组
[root@mysql-150-master home]# groupadd mysql
[root@mysql-150-master home]#
[root@mysql-150-master home]# useradd -g mysql mysql
[root@mysql-150-master home]#
#在151节点上添加mysql用户,用户组
[root@mysql-151-master home]# groupadd mysql
[root@mysql-151-master home]#
[root@mysql-151-master home]# useradd -g mysql mysql
[root@mysql-151-master home]#
#在152节点上添加mysql用户,用户组
[root@mysql-152-slave home]# groupadd mysql
[root@mysql-152-slave home]#
[root@mysql-152-slave home]# useradd -g mysql mysql
[root@mysql-152-slave home]#
#在153节点上添加mysql用户,用户组
[root@mysql-153-slave home]# groupadd mysql
[root@mysql-153-slave home]#
[root@mysql-153-slave home]# useradd -g mysql mysql
[root@mysql-153-slave home]#
#在154节点上添加mysql用户,用户组
[root@mysql-154-slave ~]# groupadd mysql
[root@mysql-154-slave ~]#
[root@mysql-154-slave ~]# useradd -g mysql mysql
[root@mysql-154-slave ~]#
#修改mysql用户的密码
[root@mysql-150-master home]# passwd mysql
更改用户 mysql 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@mysql-151-master home]# passwd mysql
更改用户 mysql 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@mysql-151-master home]#
[root@mysql-152-slave home]# passwd mysql
更改用户 mysql 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@mysql-152-slave home]#
[root@mysql-153-slave home]# passwd mysql
更改用户 mysql 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@mysql-153-slave home]#
[root@mysql-154-slave ~]# passwd mysql
更改用户 mysql 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@mysql-154-slave ~]#
Mysql-5.7.22目录赋mysql用户权限
修改mysql-5.7.22 目录为mysql用户权限,新增mysql用户后,centos会在/home路径下创建mysql目录,权限也是mysql
[root@mysql-150-master home]# ll
总用量 0
drwx------. 2 mysql mysql 62 3月 1 14:22 mysql
drwxr-xr-x. 9 root root 129 3月 1 13:51 mysql-5.7.22
#home/mysql-5.7.22/ 给目录赋mysql用户权限
[root@mysql-150-master home]# chown -R mysql:mysql /home/mysql-5.7.22/
### 将mysql-5.7.22移动到mysql目录下
[root@mysql-150-master home]# mv mysql-5.7.22/ mysql
[root@mysql-150-master home]# ll
总用量 0
drwx------. 3 mysql mysql 82 3月 1 14:35 mysql
Mysql路径添加到环境变量
[root@mysql-150-master 3306]# vi /etc/profile
#文件结尾添加MySQL路径
export MYSQL_HOME=/home/mysql/mysql-5.7.22
export PATH=$PATH:$MYSQL_HOME/bin
#立即生效
[root@mysql-150-master 3306]# source /etc/profile
初始化数据库
在192.168.1.150节点上执行
[root@mysql-150-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqld --initialize --user=mysql --basedir=/home/mysql/mysql-5.7.22 --datadir=/home/mysql/data/3306
2021-03-01T07:04:51.142825Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-03-01T07:04:51.532632Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-03-01T07:04:51.599975Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-03-01T07:04:51.658722Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 6b0dedc2-7a5c-11eb-8944-000c291220ce.
2021-03-01T07:04:51.660226Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-03-01T07:04:51.661744Z 1 [Note] A temporary password is generated for root@localhost: *,)pDnUBZ9SN
[root@mysql-150-master mysql]#
==这里创建了mysql的默认数据密码,一定要记住后面有用==
2021-03-01T07:04:51.661744Z 1 [Note] A temporary password is generated for root@localhost: *,)pDnUBZ9SN
创建配置文件
在192.168.1.150节点上执行
## 在/home/mysql下创建mysql 3306.cnf配置文件
### master节点设置端口为3306
### 数据路径为./data/3306
[root@mysql-150-master mysql]# vi 3306.cnf
[client]
port= 3306
socket= /home/mysql/data/3306/mysql.sock
default-character-set=utf8
[mysqld]
port=3306
socket=/home/mysql/data/3306/mysql.sock
datadir=/home/mysql/data/3306
log-error=/home/mysql/data/3306/error.log
pid-file=/home/mysql/data/3306/mysql.pid
character-set-server=utf8
lower_case_table_names=1
autocommit = 1
启动Mysql
在192.168.1.150节点上执行,以后台方式运行
[root@mysql-151-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3306.cnf &
[1] 16512
[root@mysql-151-master mysql]# Logging to '/home/mysql/data/3306/error.log'.
2021-03-01T07:18:50.279274Z mysqld_safe Starting mysqld daemon with databases from /home/mysql/data/3306
登录mysql
这里登录密码在上面,必须立即修改,授权远程访问,刷新权限
[root@mysql-150-master 3306]# mysql -uroot -h 127.0.0.1 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.22
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
####修改MySQL的初始密码 必须立即修改。
mysql> alter user 'root'@'localhost' identified by 'ruanjie@0511';
Query OK, 0 rows affected (0.00 sec)
###授权远程访问(这样远程客户端才能访问)
mysql> grant all privileges on *.* to root@'%' identified by 'ruanjie@0511';
Query OK, 0 rows affected, 1 warning (0.00 sec)
###刷新权限,立即生效修改的配置
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
关闭Mysql服务
在192.168.1.150节点上执行,之前已经启动150节点Msyql,需要关闭Mysql服务,后面拷贝数据库
关闭mysql服务命令(3306端口)
/home/mysql/mysql-5.7.22/bin/mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown
#关闭对应端口的服务
[root@mysql-150-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown
Enter password:
[root@mysql-153-slave mysql]# 2021-03-01T08:59:02.088440Z mysqld_safe mysqld from pid file /home/mysql/data/3308/mysql.pid ended
复制数据库到其他节点
现在192.168.1.150节点已经可以访问了,可以复制/home/mysql/data 下数据到其他节点
复制数据库到192.168.1.151(master)
在192.168.1.150节点上执行,==这里从master节点复制数据到151上的mysql用户==
[root@mysql-150-master mysql]# scp -r /home/mysql/ mysql@192.168.1.151:/home/mysql/
The authenticity of host '192.168.1.151 (192.168.1.151)' can't be established.
ECDSA key fingerprint is SHA256:ffQ6umzMxFoQ9SfpVjJfatIVrYtJqXQV1OkEvd6LlA4.
ECDSA key fingerprint is MD5:7e:dc:aa:ca:83:2a:10:ac:09:d4:5b:50:c6:22:48:f6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.151' (ECDSA) to the list of known hosts.
复制数据库到192.168.1.152(slave)
在192.168.1.150节点上执行
[root@mysql-150-master mysql]# scp -r /home/mysql/ mysql@192.168.1.152:/home/mysql/
###192.168.1.152上的从节点端口为3307 这里需要将3306命名为3307 同时修改配置文件
[root@mysql-152-slave data]# ll
drwxr-x---. 5 mysql mysql 4096 3月 1 19:48 3306
[root@mysql-152-slave data]# pwd
/home/mysql/data
[root@mysql-152-slave data]# mv /home/mysql/data/3306 /home/mysql/data/3307
###/home/mysql 配置文件修改为3307 端口也要修改为3307
-rw-r--r--. 1 mysql mysql 404 3月 1 19:51 3307.cnf
drwxr-x---. 4 mysql mysql 30 3月 1 15:54 data
drwxr-xr-x. 9 mysql mysql 129 3月 1 13:56 mysql-5.7.22
[root@mysql-152-slave mysql]# pwd
/home/mysql
[root@mysql-152-slave mysql]#
###slave节点是有2个实例,需要负责3307 为3308
[root@mysql-152-slave data]# cp -r /home/mysql/data/3307 /home/mysql/data/3308
[root@mysql-152-slave mysql]# ll
-rw-r--r--. 1 mysql mysql 404 3月 1 19:51 3307.cnf
drwxr-x---. 4 mysql mysql 30 3月 1 15:54 data
drwxr-xr-x. 9 mysql mysql 129 3月 1 13:56 mysql-5.7.22
[root@mysql-152-slave mysql]# cp -r 3307.cnf 3308.cnf
复制数据库到192.168.1.153(slave)
在192.168.1.152节点上执行,由于152节点为从节点,153也是从节点,直接使用152的节点数据库
[root@mysql-152-slave mysql]# scp -r /home/mysql/ mysql@192.168.1.153:/home/mysql/
复制数据库到192.168.1.154(slave)
在192.168.1.152节点上执行,由于152节点为从节点,154也是从节点,直接使用152的节点数据库
[root@mysql-152-slave mysql]# scp -r /home/mysql/ mysql@192.168.1.153:/home/mysql/
启动所有节点数据库
启动mysql-150-master
###启动主库
[root@mysql-150-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3306.cnf &
启动mysql-151-master
###启动主库
[root@mysql-151-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3306.cnf &
启动mysql-152-slave
### 启动从库152:3307
[root@mysql-152-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3307.cnf &
### 启动从库152:3308
[root@mysql-152-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3308.cnf &
启动mysql-153-slave
### 启动从库153:3307
[root@mysql-153-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3307.cnf &
### 启动从库153:3308
[root@mysql-153-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3308.cnf &
启动mysql-154-slave
### 启动从库154:3307
[root@mysql-154-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3307.cnf &
### 启动从库154:3308
[root@mysql-154-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3308.cnf &