Mysql+mycat+keepalive+haproxy高可用集群搭建
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 |
在上一节( 2.mysql部署高可用-mysql安装.md )中已经安装好5个节点的数据库,其中每个从节点有2个实例.本节主要是搭建一主三从
一主三从架构图
一主三从地址规划
| 节点 | 端口 | 职责 |
|---|---|---|
| 192.168.1.150 | 3306 | 主节点 |
| 192.168.1.152 | 3307 | 从节点 |
| 192.168.1.153 | 3307 | 从节点 |
| 192.168.1.154 | 3307 | 从节点 |
| 节点 | 端口 | 职责 |
|---|---|---|
| 192.168.1.151 | 3306 | 主节点 |
| 192.168.1.152 | 3308 | 从节点 |
| 192.168.1.153 | 3308 | 从节点 |
| 192.168.1.154 | 3308 | 从节点 |
主节点配置
在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.150,192.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.cnf,3308.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.cnf,3308.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.cnf,3308.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.150,192.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