Mysql+mycat+keepalive+haproxy高可用集群搭建(一主三从)

91 阅读7分钟

Mysql+mycat+keepalive+haproxy高可用集群搭建

Mysql部署高可用-一主三从


Mysql集群地址规划

IP地址主机名职责备注
192.168.1.150mysql-150-mastermysql主从节点为:192.168.1.152:3307、192.168.1.153:3307、192.168.1.154:3307
192.168.1.151mysql-151-mastermysql主从节点为:192.168.1.152:3308、192.168.1.153:3308、192.168.1.154:3308
192.168.1.152mysql-152-slavemysql从需要安装两个实例端口分别为3307,3308
192.168.1.153mysql-153-slavemysql从需要安装两个实例端口分别为3307,3308
192.168.1.154mysql-154-slavemysql从需要安装两个实例端口分别为3307,3308

在上一节( 2.mysql部署高可用-mysql安装.md )中已经安装好5个节点的数据库,其中每个从节点有2个实例.本节主要是搭建一主三从

一主三从架构图

image-20210301163035773

一主三从地址规划

节点端口职责
192.168.1.1503306主节点
192.168.1.1523307从节点
192.168.1.1533307从节点
192.168.1.1543307从节点
节点端口职责
192.168.1.1513306主节点
192.168.1.1523308从节点
192.168.1.1533308从节点
192.168.1.1543308从节点

主节点配置

192.168.1.150节点上执行,修改3306.cnf配置文件,如果之前已经启动了mysql服务需要关闭,在修改操作

#在MySQL主服务器(3306)配置文件3306.cnf里面加入
#表示启用二进制日志
log-bin=mysql-bin
#表示server编号,编号要唯一,切记这个id不能是字符串例如:150_3306 只能是整型
server-id=1503306

同上,在192.168.1.151节点上执行,修改3306.cnf配置文件

#表示启用二进制日志
log-bin=mysql-bin
#表示server编号,编号要唯一,切记这个id不能是字符串例如:150_3306 只能是整型
server-id=1513306

启动主节点192.168.1.150192.168.1.151

###启动主库150
[root@mysql-150-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3306.cnf &


###启动主库151
[root@mysql-151-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3306.cnf &

从节点配置

192.168.1.152节点上执行,修改3307.cnf3308.cnf

###在192.168.1.152从服务器(3307)配置文件3307.cnf里面加入
#表示server编号,编号要唯一
server-id=1523307

###在192.168.1.152从服务器(3308)配置文件3308.cnf里面加入
#表示server编号,编号要唯一
server-id=1523308

同上,在192.168.1.153节点上执行,修改3307.cnf3308.cnf

###在192.168.1.153从服务器(3307)配置文件3307.cnf里面加入
#表示server编号,编号要唯一
server-id=1533307

###在192.168.1.153从服务器(3308)配置文件3308.cnf里面加入
#表示server编号,编号要唯一
server-id=1533308

同上,在192.168.1.154节点上执行,修改3307.cnf3308.cnf

###在192.168.1.154从服务器(3307)配置文件3307.cnf里面加入
#表示server编号,编号要唯一
server-id=1543307

###在192.168.1.154从服务器(3308)配置文件3308.cnf里面加入
#表示server编号,编号要唯一
server-id=1533308

启动主从数据库

启动主库

###启动主库150
[root@mysql-150-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3306.cnf &


###启动主库151
[root@mysql-151-master mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3306.cnf &

启动从库

### 启动从库152:3307
[root@mysql-152-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3307.cnf &
[root@mysql-152-slave mysql]# ps -ef|grep mysql
root     17974 17711  0 22:24 pts/2    00:00:00 /bin/sh /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3307.cnf
mysql    18148 17974  4 22:24 pts/2    00:00:00 /home/mysql/mysql-5.7.22/bin/mysqld --defaults-file=/home/mysql/3307.cnf --basedir=/home/mysql/mysql-5.7.22 --datadir=/home/mysql/data/3307 --plugin-dir=/home/mysql/mysql-5.7.22/lib/plugin --user=mysql --log-error=/home/mysql/data/3307/error.log --pid-file=/home/mysql/data/3307/mysql.pid --socket=/home/mysql/data/3307/mysql.sock --port=3307
root     18177 17711  0 22:24 pts/2    00:00:00 grep --color=auto mysql

### 启动从库152:3308
[root@mysql-152-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysqld_safe --defaults-file=/home/mysql/3308.cnf &
### 启动从库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 &
### 启动从库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 &

主库复制账号

需要在两个主库192.168.1.150192.168.1.151,上创建数据复制的账号并授权

登录192.168.1.150

grant replication slave on *.* to 'copy'@'%' identified by 'ruanjie@0511';

注意:该语句可完成授权、创建用户、修改密码操作

[root@mysql-150-master mysql]# /home/mysql/mysql-5.7.22/bin/mysql -uroot -h 127.0.0.1 -p

mysql> grant replication slave on *.* to 'copy'@'%' identified by 'ruanjie@0511';
Query OK, 0 rows affected, 1 warning (0.01 sec)

查看192.168.1.150master节点状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      437 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

登录192.168.1.151

[root@mysql-151-master mysql]# /home/mysql/mysql-5.7.22/bin/mysql -uroot -h 127.0.0.1 -p

mysql> grant replication slave on *.* to 'copy'@'%' identified by 'ruanjie@0511';
Query OK, 0 rows affected, 1 warning (0.01 sec)

查看192.168.1.151master节点状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      437 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

从库(3307,3308)设置

登录192.168.1.152:3307

[root@mysql-152-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysql -uroot -h 127.0.0.1 -p -P3307
#查看从库状态,是否为初始状态
mysql> show slave status;
Empty set (0.01 sec)

从节点3307设置master配置

master_host:主节点地址

master_port:主节点端口(非字符类型)

master_user:允许登录到主节点的账号

master_password:允许登录的密码

master_log_file:主节点bin-log名称

master_log_pos:主节点日志起始地址

mysql> change master to master_host='192.168.1.150',master_port=3306,master_user='copy',master_password='ruanjie@0511',master_log_file='mysql-bin.000001',master_log_pos=437;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

启动从节点复制

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

登录192.168.1.152:3308

同上,先连接3308数据库,在更新从节点配置,最后启动从节点

注意3308的主节点是 192.168.1.151

[root@mysql-152-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysql -uroot -h 127.0.0.1 -p -P3308

mysql> change master to master_host='192.168.1.151',master_port=3306,master_user='copy',master_password='ruanjie@0511',master_log_file='mysql-bin.000001',master_log_pos=437;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

登录192.168.1.153:3307

[root@mysql-153-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysql -uroot -h 127.0.0.1 -p -P3307

mysql> change master to master_host='192.168.1.150',master_port=3306,master_user='copy',master_password='ruanjie@0511',master_log_file='mysql-bin.000001',master_log_pos=437;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;

登录192.168.1.153:3308

[root@mysql-153-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysql -uroot -h 127.0.0.1 -p -P3308

mysql> change master to master_host='192.168.1.151',master_port=3306,master_user='copy',master_password='ruanjie@0511',master_log_file='mysql-bin.000001',master_log_pos=437;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;

登录192.168.1.154:3307

[root@mysql-154-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysql -uroot -h 127.0.0.1 -p -P3307

mysql> change master to master_host='192.168.1.150',master_port=3306,master_user='copy',master_password='ruanjie@0511',master_log_file='mysql-bin.000001',master_log_pos=437;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> start slave;

登录192.168.1.154:3308

[root@mysql-154-slave mysql]# /home/mysql/mysql-5.7.22/bin/mysql -uroot -h 127.0.0.1 -p -P3308

mysql> change master to master_host='192.168.1.151',master_port=3306,master_user='copy',master_password='ruanjie@0511',master_log_file='mysql-bin.000001',master_log_pos=437;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;

至此一个一主多从搭建完成

从库复制功能状态

主从复制虽然搭完成,但是还没有检查确认是否成功。

在从库节点上,连上mysql从库,执行show slave status \G;

只有 Slave_IO_Running: Yes Slave_SQL_Running: Yes 同时为yes,从复制才是正确开启的

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.150
                  Master_User: copy
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 437
               Relay_Log_File: mysql-152-slave-relay-bin.000003
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes