本篇文章主要介绍如何搭建MySQL主主配置、主从配置、haproxy、keepalived,已经搭建过程中的一些问题。本次运行环境是在docker中,也会介绍一些docker的知识
docker 小知识
创建本机可访问的MySQL容器
1、直接用 docker 拉取别人搭建好的MySQL
2、自己创建 centos 或者其他容器,下载安装MySQL
我是采用的第二种方案
命令: docker run -itd –name mysql_server1 -p 13306:3306 centos:7
13306 是本地的端口,3306是容器的端口。这样本地可以根据端口13306访问容器中的数据库
-i: 交互式操作。
-t: 终端。
-d: 后台运行容器,并返回容器ID;
创建harpoxy、Keepalive 的容器
docker run -itd –privileged=true –name mysql_server1 -p 23396:3306 centos:7 /sbin/init
–privileged=true 和 /sbin/init 加上这两个可以在容器中使用systemctl的命令
然后通过docker exec -it 容器ID 进入
如果没有 systemctl 运行haproxy和Keepalive会遇到一些问题,且不容易找到错误日志
下载MySQL
1、粘贴MySQL社区最新的MySQL rpm包链接,wget下载
2、rpm -ivh mysql.rpm (下载的rpm文件)
3、yum install mysql
4、在 /var/log/mysqld.log 中找到初始化密码,登录,设置密码
MySQL主主配置
我分别在172.17.0.2和172.17.0.4 中安装了MySQL,用于搭建主主配置
172.17.0.2 MySQL 配置
1、编辑 MySQL 配置文件 vim /etc/my.cnf。不知道配置文件在哪的可以执行 mysql –help | grep ‘Default options’ -A 1 这个命令
server-id = 1 # 唯一的不能重复 log-bin = mysql-bin # 开启二进制日志 binlog_format = ROW # 日志格式 max_binlog_size = 100M # 最大日志文件大小 binlog-do-db = itma1 # 支持主从的db
2、老的MySQL版本可能需要配置让主键不同的参数,本次使用环境是MySQL8.0默认不会主键冲突,不需要额外配置
172.17.0.2的配置
server-id = 2 log-bin = mysql-bin binlog_format = ROW max_binlog_size = 100M binlog-do-db = itma1
执行sql命令
# 172.17.0.2 执行命令 # 创建用户 create user slave@"%" IDENTIFIED BY "test123"; # 授予权限 GRANT REPLICATION SLAVE ON *.* TO slave@"%"; show master status/G # 172.17.0.4 执行命令 change master to master_host="gateway",master_port=13306, master_user="slave",master_password="test123",master_log_file="mysql-bin.000001",master_log_pos=157; start slave; show slave status/G
以上是 0.2是主,0.4是从。上边的命令两个机器反过来分别执行一次,即可配置成 0.4主,0.2是从,这样主主配置搭建完成
配置过程中可能会出现一些错误,利用 show slave status/G 可以查看具体错误信息,不过也有可能出现命令操作太快,还未链接成功的情况。本人还遇到过主的账号(slave账号)需要在主的服务器登录一次,从服务器才能链接成功的情况,暂时不确定什么原因,有知道的可以留言,非常感谢
MySQL主从配置
1、从库配置文件,所属主库为 172.17.0.2
server-id = 11 log-bin = mysql-bin binlog_format = ROW log_slave_updates = 1 max_binlog_size = 100M replicate-do-db = itma1 # 从库更新也写binlog
2、执行命令
change master to master_host="gateway",master_port=13306, master_user="slave",master_password="test123",master_log_file="mysql-bin.000001",master_log_pos=157; start slave;
haproxy 配置
新创建centos容器
yum install haproxy # 配置文件 vim /etc/haproxy/haproxy.cfg # 最好先备份一下 systemctl start haproxy systemctl start haproxy
配置如下图,注意:model 需要时tcp,http虽然检测没问题,但是通过本服务器的地址链接不到MySQL服务
配置成功之后,就可以在其他服务器通过该服务器地址链接MySQL了
Keepalived 配置
使用haproxy同样的服务器
yum install keepalived # 配置文件 vim /etc/keepalived/keepalived.conf 最好先备份 systemctl start keepalived systemctl status keepalived
配置如下图
haproxy 和keepalived 可以配置到多个服务器上,keepalived 会根据优先级去判断使用哪台主机,至于这样配置的好处这里就不过多介绍