一、项目描述
为了提升MySQL的并发能力和实现读写分离功能,构建一个简单的MySQL集群,keepalived实现高可用、mysqlrouter读写分离功能,大大提升MySQL集群的业务处理能力。同时深入学习MySQL的整体的部署和对集群架构的理解
项目架构图
二、项目环境
6台2c/4G的服务器(虚拟机),centos7.9,mysql 5.7.33
mysqlrouter8 ,keepalived
三、项目步骤
部署基于GTID的主从复制
准备三台服务器(1主2从),都开启MYSQL服务(三台服务器的数据库版本一致mysql 5.7.33)
再准备两台机器作为中间件,用来读写分离
master服务器和slave服务器都要开启二进制日志
master服务器和slave服务器的server_id不能相同,必须唯一
master和slave服务器都要关闭防火墙和selinux
Master:
1.创建用来复制二进制日志的用户
2.授权从服务器获取二进制日志
3.创建完全备份
4.完全备份传输到slave1和slave2
5.开启二进制日志并设置server_id
6.重启MySQL服务
slave1和slave2:
1.导入备份
2.开启二进制日志和在slavel配置文件/etc/my.cnf里添加server_id,并刷新MySQL服务
3.在master上查看日志文件和位置号
4.在slave启用并查看master信息
MASTER_USER是先前创建获取二进制日志文件的用户
MASTER_PASSWORD是先前创建获取二进制日志文件的用户的密码
MASTER_PORT端口号
MASTER_LOG_FILE二进制日志文件名
MASTER_LOG_POS位置号
当SQL_Running和IO_Running都为Yes时,说明成功连接上master2
部署基于Gtid的主从复制
1.两台slave关闭slave服务
2.两台slave都要清除master
2。master配置文件信息并重启服务器
3.两台slave配置信息
4.刷新服务
基于Gtid的主从复制完成
读写分离
1.安装mysqlrouter
rpm -ivh +mysqlrouter安装包
2.关闭防火墙
3.两台中间件修改配置文件并刷新服务
4.两台中间件查看端口是否启用
listen为监听状态表示成功
5.在master建立用户
可读可写的用户与仅可读用户
6.测试连接
所连接的是mysqlrouter ,划分权限的依靠用户所被授 予的权限,端口不能限制权限
7.验证权限
读写分离完成
双VIP高可用的实现
2.修改配置文件
中间件1
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
#为master状态
state MASTER
#指定监听网络的接口
interface ens33
#虚拟路由id
virtual_router_id 51
#优先级范围1~255
priority 100
#宣告消息时间间隔
advert_int 1
authentication {
#Y验证类型
auth_type PASS
#密码
auth_pass 1111
}
virtual_ipaddress {
192.168.238.88
}
}
vrrp_instance VI_2 {
#为master状态
state BACKUP
#指定监听网络的接口
interface ens33
#虚拟路由id
virtual_router_id 52
#优先级范围1~255
priority 80
#宣告消息时间间隔
advert_int 1
authentication {
#Y验证类型
auth_type PASS
#密码
auth_pass 1111
}
virtual_ipaddress {
192.168.238.90
}
}
中间件2
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.238.88
}
}
vrrp_instance VI_2 {
#为master状态
state MASTER
#指定监听网络的接口
interface ens33
#虚拟路由id
virtual_router_id 52
#优先级范围1~255
priority 100
#宣告消息时间间隔
advert_int 1
authentication {
#Y验证类型
auth_type PASS
#密码
auth_pass 1111
}
virtual_ipaddress {
192.168.238.90
}
}
关闭防火墙,检验结果:
注意:检结果之前一定先关闭防火墙,防止脑裂
此时双vip已完成
四、项目心得
1.在本次项目的实现过程中,不断加深我对于MySQL高可用集群的理解,MySQL集群应用范围非常广泛,学好这部分就显得尤为重要。
2.明白了在实验中一定要理清思路,注重细节,因为稍有不注意可能导致整个实验不能成功实现。
3.要多从实验中培养自己的troubleshooting能力。