首页 > 编程知识 正文

docker集群搭建,mysql高可用架构

时间:2023-05-03 05:57:07 阅读:20606 作者:2916

数据库用于存储数据。 数据的重要性是毋庸置疑的,但将数据仅存储在一个数据库中是非常危险的。 例如,如果此数据库或部署此数据库的服务器崩溃,则这段时间的系统崩溃可能会降低用户体验并降低经济效益。

因此,我们是这样想的。 如果多个数据库提供服务支持,即使一个数据库崩溃,只要其他数据库工作,不就完了吗? 确实,这几个数据库共同构成一个集群,称为数据库集群。 这包括两个常见的结构。 一主多从,多主多从; 如下所示。

主从复制的原理也非常简单,简单来说,对主服务器进行写入操作后,主服务器会将自己的操作记录在二进制日志文件中,并有来自服务器的心跳机制,定期进行主服务器的日志记录

那么,这个概念形成了。 然后正式开始构建。 首先,在构建之前需要可以在linux系统上使用的mysql。 例如,我的mysql路径是这个:

因为这里只有一台本地服务器,所以要在这一台服务器上创建多个数据库实例。 这与实际生产环境中的多个服务器相同,其中一台服务器有一个数据库。 首先,让我们看看mysql的目录结构。

在其中的data目录下,使用命令mkdir创建了四个数据库实例3307、3308、3309和3310进行测试。

然后,导航到wxdjmg目录,初始化四个数据库实例。

使用命令:

./mysqld-- initialize-insecure-- basedir=/usr/local/MySQL-5.7.18-- datadir=/usr/local/MySQL-5

./mysqld-- initialize-insecure-- basedir=/usr/local/MySQL-5.7.18-- datadir=/usr/local/MySQL-5

./mysqld-- initialize-insecure-- basedir=/usr/local/MySQL-5.7.18-- datadir=/usr/local/MySQL-5

./mysqld-- initialize-insecure-- basedir=/usr/local/MySQL-5.7.18-- datadir=/usr/local/MySQL-5

其中initialize-insecure不为MySQL数据库的根用户生成随机密码,即根密码为空。 )

因此,数据库初始化文件将显示在data目录的3310、3310、3310和3310中,如下所示:

然后使用命令touch在/data/3307、/data/3308、/data/3309和/data/3310目录中创建my.cnf配置式,并在配置式中设置以下信息:

[客户端] port=3307 socket=/usr/local/MySQL-5.7.18/data/3307/MySQL.sock default-character-set=utf 8 data/3307 log-error=/usr/local/MySQL-5.5 MySQL-5.7.18/data/3307/MySQL.PID character-set-server=urver

然后导航到wxdjmg目录,使用mysql_safe命令指定配置文件,并启动mysql服务,如下所示:

./mysqld _ safe-- defaults-file=/usr/local/MySQL-5.7.18/data/3307/my.cn f

./mysqld _ safe-- defaults-file=/usr/local/MySQL-5.7.18/data/3308/my.cn f

./mysqld _ safe-- defaults-file=/usr/local/MySQL-5.7.18/data/3309/my.cn f

./mysqld _ safe-- defaults-file=/usr/local/MySQL-5.7.18/data/3310 /

my.cnf &

在wxdjmg目录下登录mysql,使用命令 ./mysql -uroot -p -P3307 -h127.0.0.1

 然后使用命令 alter user 'root'@'localhost' identified by '123456';  修改密码为123456,并使用

grant all privileges on *.* to root@'%' identified by '123456';  命令授予远程访问,其中root指的是用户名;

并使用命令 flush privileges;  刷新权限;

此时记得关闭防火墙:查看防火墙命令systemctl status firewalld ,关闭防火墙命令systemctl stop firewalld ;

 然后使用客户端工具连接数据库,如下:

如上操作在3308,3309和3310实例上同样操作一次。此时,我们四个数据库已准备好了。

当然,如果想要关闭这四个数据库实例的话,在wxdjmg目录下使用命令 ./mysqladmin -uroot -p -P3307 -h127.0.0.1 shutdown 进行关闭。 (注意:这是关闭端口号为3307的数据库实例)

到这里,数据库实例已准备好,接下来就是设置这四个数据库的关系,即为一主多从或者多主多从。

一主多从

在四个实例中的/data/3307等的my.cnf配置文件中添加如下配置信息:

主(3307)里面加入log-wxdjmg=mysql-wxdjmg   #表示启用二进制日志server-id=3307    #表示server编号,编号要唯一从(3308)里面加入server-id=3308 #表示server编号,编号要唯一从(3309)里面加入server-id=3309 #表示server编号,编号要唯一从(3310)里面加入server-id=3310 #表示server编号,编号要唯一

如下所示:

 在重新启动四个数据库实例,设定一个主服务器,在主服务器上使用命令 

grant replication slave on *.* to 'copy'@'%' identified by '123456';    创建复制的账号并授权。

并使用命令  reset master;  重置一下主服务器状态。

 此时,我们发现,在3307实例的数据库中的user表中多出了一个copy的用户:

 

 再使用命令  show master status;  获取主服务器二进制wxdjmglog文件名及坐标(二进制文件名和坐标值在后面会用到)。

File即为二进制文件名称,Position即为该文件坐标。

 然后在3308,3309和3310从服务器上使用

stop slave;
reset slave;

重置一下服务器。

然后在从服务器上使用命令:

change master to master_host='192.168.23.130',master_user='copy',
master_port=3307,master_password='123456',
master_log_file='mysql-wxdjmg.000001',master_log_pos=154;

设置主从关系(change master to master_host表示服务器ip,master_user表示服务器用户名,master_port表示端口号,master_password表示密码,master_log_file表示二进制日志文件名称,master_log_pos表示二进制日志文件地址)

然后在从服务器上使用  start slave;  命令开启主从关系。

我们使用命令  show slave status G 查看从服务器功能状态;

可以看到主从服务器的关系。 

以上,一主多从的服务器关系设置完毕,去数据库查看更直观的关系,比方说,我们在主数据库3307中创建一张表,那么3308,3309和3310中会自动创建一张一模一样的表,如果在3307中对表中的数据进行插入,删除,修改操作,那么其他的从库也相应的会自动重现同样的操作。

以上即为一主多从数据库集群的搭建,下面介绍多主多从数据库集群的搭建。

 

多主多从

       对于一主多从服务器,当主服务器挂掉了,那么整个数据库集群系统就全部挂掉了,这显然不是我们希望看到的,那么自然的就想到了使用多个主服务器来提供服务,当其中一个主服务器挂掉了,其他的主服务器还能继续提供服务。这就是多主多从存在的意义。

       假如,我们使3307和3308为主,3309和3310为从,如下:

首先,需要在3308的my.cnf配置文件中添加一个 “log-wxdjmg=mysql-wxdjmg” 配置信息,就像3307的配置文件一样。

 然后,3307主服务器的my.cnf文件增加如下配置:

auto_increment_increment=2auto_increment_offset=1log-slave-updatessync_wxdjmglog=1

3308主服务器增加如下配置:

auto_increment_increment=2auto_increment_offset=2log-slave-updatessync_wxdjmglog=1

配置说明如下:

auto_increment_increment,控制主键自增的自增步长,用于防止Master与Master之间复制出现重复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少; auto_increment_offset=1设置自增起始值,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID 注意auto_increment_offset的设置,不同的master设置不应该一样,否则就容易引起主键冲突,比如master1的offset=1,则master2的offset=2,master3的offset=3 在双主模式中,log-slave-updates 配置项一定要配置,否则在master1(3307)上进行了更新数据,在master2(3308)和slave1(3309)上会更新,但是在slave2(3310)上不会更新 sync_wxdjmglog表示每几次事务提交,MySQL把wxdjmglog缓存刷进日志文件中,默认是0,最安全的是设置为1;

 由于3309和3310服务器之前指向的是3307日志文件和位置,所以先删除掉里面的localhost-relay-wxdjmg.000001和localhost-relay-wxdjmg.index文件:

然后使用如下命令在wxdjmg目录下启动四台服务:

./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3307/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3308/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3309/my.cnf &./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3310/my.cnf &

然后,使用命令   ./mysql -uroot -p -P3307 -h127.0.0.1  和   ./mysql -uroot -p -P3308 -h127.0.0.1  进入3307和3308主机。

然后再以同样的方式启动3309和3310两个从服务器,并且在这四个服务器上使用如下命令重置服务:

stop slave;
reset slave;
reset master;

设置从服务器3308、3309,他们的主均为3307,即在3308和3309上执行如下操作:change master to master_host='192.168.23.130',master_user='copy',master_password='123456',master_port=3307, master_log_file='mysql-wxdjmg.000001',master_log_pos=154; 设置从服务器3307、3310,他们的主均为3308,即在3307和3310上执行如下操作:change master to master_host='192.168.23.130',master_user='copy',master_password='123456',master_port=3308, master_log_file='mysql-wxdjmg.000001',master_log_pos=154;

然后在这四台服务器上mysql命令行执行  start slave;

然后我们使用命令 show slave status G 命令查看各从数据库的主从关系;比方说我们看看3307的:

 这样,就配置好了,在连接数据库,不仅是3307,在3308中建表,插入删除修改数据,其他的库都相应的会同样的改变。

以上即为数据库集群的配置。。。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。