1. 前言
之前的程序架构可能是这样的一种形式:
当程序体量扩大后,我们进行扩展,可能会扩展多个后台服务实例,但数据库还是只有一个,所以系统的瓶颈还是在数据库上面,所以这次的主要任务就是对数据库进行扩展,主要形式为:扩展多台数据库实例,实现读写分离,对于一些写的任务分配到主数据库,对于读的任务使用子数据库进行读取。从而提高系统性能。
修改后的架构如下所示:
2. 环境预搭建
这次使用docker来进行这个环境的搭建,使用MySQL版本为5.7.13。
docker pull mysql:5.7.13
整体结构为:
- 1个master主节点,作为写的节点。
- 2个slave从节点,作为读的节点。
先分别将这几个节点启动,映射到不同的端口。在本机使用数据库连接工具连接,测试是否正常启动且正常连接。
docker run -p 3307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13 docker run -p 3308:3306 --name mysql-slave1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13 docker run -p 3309:3306 --name mysql-slave2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13
我这里分别将主节点(mysql-master)映射为3307
端口,两个从节点(mysql-slave1,2)分别为3308
和3309
端口。然后设置MySQL的root密码为123456
。
然后可以使用navicat
等工具连接测试MySQL。
分别进入这几个节点,编辑配置文件。
docker exec -it mysql-master /bin/bash
我使用的是name来进入容器,也可以根据id来选择,即docker exec -it 对应容器的id /bin/bash
。
由于没有预先安装vi
和vim
程序,然后要下载时需要执行apt update
命令,这时会从国外源进行下载。由于众所周知的原因,速度很慢。我就将下载源更改为国内源。
进入到/etc/apt
文件夹中,首先将原有的文件进行备份:
mv sources.list sources.list.bak
然后使用如下命令新建文件并输入内容:
echo deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse > sources.list
然后我们再执行apt update
等操作,最后安装vim
即可。
3. 进行主从配置
主节点(master)配置
进入主节点容器后,进入/etc/mysql
文件夹中,会有一个my.cnf
文件,主要对它进行修改。
编辑这个文件,找到[mysqld]
,在这个下面添加如下命令:
[mysqld] ... ... ## 唯一的编号 server-id=101 ## 这个是关键配置项 log-bin=mysql-bin
配置完成后,需要重启MySQL服务使配置生效。使用service mysql restart
命令进行重启,重启完成后会关闭MySQL的容器,我们还要重启容器docker restart mysql-master
。
从节点(slave)配置
同主节点一样,编辑/etc/mysql/my.cnf
文件
[mysqld] ... ... ## 唯一的编号 server-id=103 ## 选,如果需要将该节点作为其他节点的主节点则需要添加 # log-bin=mysql-bin
链接主节点和从节点
主节点
在主节点容器中进入MySQLmysql -u root -p
,密码就是启动容器时设置的123456
。
进入MySQL后执行show master status;
:
从这里我们得到两个信息File
和Position
的值,我这里分别是mysql-bin.000001
和154
。
从节点
进入MySQL,执行如下的命令:
change master to master_host='***', master_port=3306, master_user='root', master_password='123456', master_log_file='****', master_log_pos= ***;
分别解释一下这几个参数代表的意思:
master_host:主节点的ip地址,可以在本机使用中如下命令来查看容器的ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
master_port:mysql的端口号,不是对外映射的端口号
master_user:mysql中的用户,要有权限,我直接使用了root,也可以新建用户来使用
master_password:用于同步的mysql帐户密码
master_log_file:用于同步的文件,就是从主节点查询到的文件,我这里是mysql-bin.000001
master_log_pos:binlog文件开始同步的位置, 就是从主节点查询到的位置,我这里是154
执行刚刚的命令后在MySQL终端执行show slave status \G;
来查看主从同步状态。
我们可以从这里查看配置的信息来进行核查,然后可以看到两个属性slave_io_running
和slave_sql_running
都是no,也就是关闭状态。
我们可以执行start slave
来开启主从复制,执行后再次执行show slave status \G;
命令可以看到两个属性都变成了yes
,则说明主从复制已经开启。
如果启动未成功,我们可以检查网络是否连通,同步用到的mysql密码是否正确,还有就是同步文件名称和位置是否正确!
测试
我们可以在主库中新建一个数据库,到从库中如果看到这个库的存在就表示主从同步完成。
4. 级联配置
我想再加一个备份节点,并且这个节点是从slave1节点进行备份的,也就是slave1节点作为backup节点的主节点。这就构成了master->slave->backup这样一个级联关系。
我本来是按照上面的步骤,先在slave的my.cnf
中添加了
log-bin=mysql-slave-bin #为了区分,我对文件名进行了修改
接着在backup节点执行的
change master to master_host='***', master_user='root', master_password='123456', master_port=3306, master_log_file='****', master_log_pos= ***;
命令换成对应slave节点的ip等属性。结果发现不行。在主节点有更改后,备份节点并没有变更!
于是我开始了排查,发现在slave节点中的binlog文件并没有更改信息的记录,而backup节点相当于监听这个文件变更,这个文件没有变更所以backup节点也就不会有更改。这里延伸一点,mysql的binlog记录了我们所有更改的操作,所以理论上我们可以通过binlog来恢复任一时间刻的数据库内容。
于是问题就转变成,主节点变更后如何让从节点的binlog日志有记录。
我们可以在编辑my.cnf
文件时再添加一行:log_slave_updates=1
即可,让slave在接到master同步后也将二进制日志写到自己的binlog中。
这样就可以完成,主节点进行更改后,从节点和备份节点都会进行变更,备份节点的数据是从从节点备份过去的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]