部署数据库主从备份1
部署数据库主从备份
(1)配置ChinaSkill-node2实例节点数据库服务
在ChinaSkill-node2实例节点按照2.4部署 MariaDB数据库(1)安装MariaDB 10数据库(2)配置MariaDB数据库中的步骤,部署并启动MariaDB数据库服务。
安装完数据库并启动之后,使用命令查看两个数据库状态,命令如下:
chinaskill-node1节点:
[root@chinaskill-node1 ~]# systemctl status mariadb
- mariadb.service - MariaDB 10.1.47 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/mariadb.service.d
└─migrated-from-my.cnf-settings.conf
Active: active (running) since Tue 2020-10-27 17:26:30 CST; 4min 53s ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 14075 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 14036 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
Process: 14034 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Main PID: 14047 (mysqld)
Status: "Taking your SQL requests now..."
CGroup: /system.slice/mariadb.service
└─14047 /usr/sbin/mysqld
chinaskill-node2节点:
[root@chinaskill-node2 ~]# systemctl status mariadb
- mariadb.service - MariaDB 10.1.47 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/mariadb.service.d
└─migrated-from-my.cnf-settings.conf
Active: active (running) since Tue 2020-10-27 17:26:55 CST; 5min ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 14078 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 14039 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
Process: 14037 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Main PID: 14050 (mysqld)
Status: "Taking your SQL requests now..."
CGroup: /system.slice/mariadb.service
└─14050 /usr/sbin/mysqld
按照2.4部署MariaDB数据库中的步骤,初始化chinaskill-node2节点的数据库,设置密码为Abc@1234。
(2)配置主从数据库服务
在ChinaSkill-node1实例节点和ChinaSkill-node2实例节点配置域名解析,编辑配置文件/etc/hosts文件,配置为如下。
[root@chinaskill-node1 ~]# vi /etc/hosts
192.168.1.13 chinaskill-node1
192.168.1.4 chinaskill-node2
[root@chinaskill-node2 ~]# vi /etc/hosts
192.168.1.13 chinaskill-node1
192.168.1.4 chinaskill-node2
(3)配置chinaskill-node1主节点
修改chinaskill-node1节点的数据库配置文件,在配置文件/etc/my.cnf.d/server.cnf中的[mysqld]增添如下内容。
[root@chinaskill-node1 ~]# cat /etc/my.cnf.d/server.cnf
... ...
[mysqld]
log_bin = mysql-bin #记录操作日志
binlog_ignore_db = mysql #不同步mysql系统数据库
server_id = 13 #数据库集群中的每个节点id都要不同,一般使用IP地址的最后段的数字,例如192.168.1.13,server_id就写13
... ...
重启数据库服务,并进入数据库,命令如下:
[root@chinaskill-node1 ~]# systemctl restart mariadb
[root@chinaskill-node1 ~]# mysql -uroot -pAbc@1234
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.47-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
在chinaskill-node1节点,授权在任何客户端机器上可以以root用户登录到数据库,然后在主节点上创建一个user用户连接节点chinaskill-node2,并赋予从节点同步主节点数据库的权限。命令如下:
MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by "Abc@1234";
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant replication slave on *.* to 'user'@'chinaskill-node2' identified by 'Abc@1234';
Query OK, 0 rows affected (0.00 sec)
(4)配置chinaskill-node2从节点
修改chinaskill-node2节点的数据库配置文件,在配置文件/etc/my.cnf.d/server.cnf中的[mysqld]增添如下内容。
[root@chinaskill-node2 ~]# cat /etc/my.cnf.d/server.cnf
... ...
[mysqld]
log_bin = mysql-bin #记录操作日志
binlog_ignore_db = mysql #不同步mysql系统数据库
server_id = 4 #数据库集群中的每个节点id都要不同,一般使用IP地址的最后段的数字,例如192.168.1.4,server_id就写4
... ...
修改完配置文件后,重启数据库服务,并在从节点chinaskill-node2上登录MariaDB数据库,配置从节点连接主节点的连接信息。master_host为主节点主机名chinaskill-node1,master_user为上一步中创建的用户user,命令如下:
[root@chinaskill-node2 ~]# systemctl restart mariadb
[root@chinaskill-node2 ~]# mysql -uroot -pAbc@1234
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.47-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> change master to master_host='chinaskill-node1',master_user='user',master_password='Abc@1234';
Query OK, 0 rows affected (0.01 sec)
配置完毕主从数据库之间的连接信息之后,开启从节点服务。使用show slave status\G命令,并查看从节点服务状态,如果Slave_IO_Running和Slave_SQL_Running的状态都为YES,则从节点服务开启成功。命令如下:
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: chinaskill-node1
Master_User: user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 705
Relay_Log_File: mysql2-relay-bin.000002
Relay_Log_Pos: 1004
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 705
Relay_Log_Space: 1314
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 12
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Slave_DDL_Groups: 2
Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 0
1 row in set (0.000 sec)
可以看到Slave_IO_Running和Slave_SQL_Running的状态都是Yes,配置数据库主从集群成功。
3.2部署数据库读写分离
(1)创建服务器
在华为云上创建一台服务器,配置使用1核/4G内存/50G硬盘。操作方法参考上面的步骤,这边不再赘述。
(2)修改主机名
使用远程连接工具CRT连接到云主机的公网IP,并修改主机名为mycat,命令如下:
# hostnamectl set-hostname mycat
# logout
[root@mycat ~]# hostnamectl
Static hostname: mycat
Icon name: computer-vm
Chassis: vm
Machine ID: 622ba110a69e24eda2dca57e4d306baa
Boot ID: c9e345d94abb4f0684ce75726c39dbcf
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-862.2.3.el7.x86_64
Architecture: x86-64
(3)安装JDK环境
在mycat节点安装Java JDK环境,具体操作步骤如下:
进行安装Java JDK环境(使用默认的镜像源即可),命令如下:
[root@mycat ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
... ...
安装完之后,可以使用命令查看Java JDK环境,命令如下:
[root@mycat ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
(4)安装Mycat服务
将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中。赋予解压后的Mycat目录权限。
[root@mycat ~]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
[root@mycat ~]# chmod -R 777 /usr/local/mycat/
在/etc/profile系统变量文件中添加Mycat服务的系统变量,并生效变量。
[root@mycat ~]# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile
[root@mycat ~]# source /etc/profile
(5)编辑Mycat的逻辑库配置文件
配置Mycat服务读写分离的schema.xml配置文件在/usr/local/mycat/conf/目录下,可以在文件中定义一个逻辑库,使用户可以通过Mycat服务管理该逻辑库对应的MariaDB数据库。在这里定义一个逻辑库schema,name为wordpress;该逻辑库wordpress对应数据库database为chinaskill-node1数据库节点上的wordpress;设置数据库写入节点为主节点chinaskill-node1;设置数据库读取节点为从节点chinaskill-node2。(可以直接删除原来schema.xml的内容,替换为如下。)
注意:IP需要修改成实际的IP地址。
[root@mycat ~]# cat /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="wordpress" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="localhost1" database="wordpress" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.1.13:3306" user="root" password="Abc@1234">
<readHost host="hostS1" url="192.168.1.4:3306" user="root" password="Abc@1234" />
</writeHost>
</dataHost>
</mycat:schema>
代码说明:
l sqlMaxLimit:配置默认查询数量。
l database:为真实数据库名。
l balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
l balance="1":全部的readHost与stand by writeHost参与select语句的负载均衡,简单来说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2、S1、S2都参与select语句的负载均衡。
l balance="2":所有读操作都随机的在writeHost、readhost上分发。
l balance="3":所有读请求随机地分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3版本没有。
l writeType="0":所有写操作发送到配置的第一个writeHost,第一个挂了需要切换到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件dnindex.properties中。
l writeType="1":所有写操作都随机的发送到配置的writeHost。
(6)修改配置文件权限
修改schema.xml的用户权限,命令如下:
[root@mycat ~]# chown root:root /usr/local/mycat/conf/schema.xml
(7)编辑mycat的访问用户
修改/usr/local/mycat/conf/目录下的server.xml文件,修改root用户的访问密码与数据库,密码设置为Abc@1234,访问Mycat的逻辑库为wordpress,命令如下。
[root@mycat ~]# cat /usr/local/mycat/conf/server.xml
在配置文件的最后部分,
<user name="root">
<property name="password">000000</property>
<property name="schemas">USERDB</property>
然后删除如下几行:
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
保存并退出server.xml配置文件。
(8)启动Mycat服务
通过命令启动Mycat数据库中间件服务,启动后使用netstat -ntpl命令查看虚拟机端口开放情况,如果有开放8066和9066端口,则表示Mycat服务开启成功。端口查询情况如下图所示。
[root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat start
(9)用Mycat服务查询数据库信息
先在Mycat虚拟机上使用Yum安装mariadb-client服务。(参考2.4的操作步骤设置安装数据库的yum源)
[root@mycat ~]# yum install -y MariaDB-client
在Mycat虚拟机上使用mysql命令查看Mycat服务的逻辑库wordpress,因为Mycat的逻辑库wordpress对应chinaskill-node1节点上的数据库wordpress,所以可以查看库中已经创建的表。命令如下。
[root@mycat ~]# mysql -h127.0.0.1 -P8066 -uroot -pAbc@1234
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| wordpress |
+----------+
1 row in set (0.001 sec)
MySQL [(none)]> use wordpress
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MySQL [wordpress]> show tables;
+-----------------------+
| Tables_in_wordpress |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0.02 sec)
(10)验证Mycat服务对数据库读写操作分离
在Mycat虚拟机节点使用mysql命令,通过9066端口查询对数据库读写操作的分离信息。可以看到所有的写入操作WRITE_LOAD数都在mysql1主数据库节点上,所有的读取操作READ_LOAD数都在mysql2主数据库节点上。由此可见,数据库读写操作已经分离到mysql1和mysql2节点上了。命令如下。
[root@mycat ~]# mysql -h127.0.0.1 -P9066 -uroot -p000000 -e 'show @@datasource;'
查询结果如下图所示。
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME | TYPE | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
| dn1 | hostM1 | mysql | 192.168.1.13 | 3306 | W | 0 | 10 | 1000 | 46 | 0 | 0 |
| dn1 | hostS1 | mysql | 192.168.1.4 | 3306 | R | 0 | 6 | 1000 | 44 | 3 | 0 |
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
至此,Mycat读写分离数据库案例完成。
(11)使用读写分离数据库运行wordpress
根据2.5部署wordpress的web服务这一章所描述的内容,在mycat节点安装nginx和php服务,数据库文件使用提供的chinaskill-wordpress.sql文件自行导入至数据库主节点。
修改wp-config.php配置文件的时候,按照如下修改:
[root@mycat ~]# vi /usr/share/nginx/html/wp-config.php
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wordpress');
/** MySQL数据库用户名 */
define('DB_USER', 'root');
/** MySQL数据库密码 */
define('DB_PASSWORD', 'Abc@1234');
/** MySQL主机 */
define('DB_HOST', '127.0.0.1:8066'); //这边是最关键的,要加读写分离数据库端口8066
/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');
/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');
服务安装完、配置修改完之后,通过浏览器去访问mycat节点的公网地址即可。
3.3申请数据库服务并使用
(1)创建云数据库MariaDB
在华为云中选择MySQL的实例列表,选择上海区域,进行创建数据库操作,如下图所示:
按照如下图所示的配置购买数据库服务。
在确认完需要购买的配置后,单击“立即购买”按钮进行购买。
(2)初始化
在创建完成后,单击右侧更多--初始化按钮进行数据库初始化,如下图所示:
单击“初始化”按钮后,会进入初始化操作界面,按照下图的选择进行初始化,设置密码为“Abc@1234”然后单击下方的“确认”按钮完成初始化工作,初始化预计时间为1分钟。
初始化之后,可以看见一台正常运行的云数据库,如下图所示:
单击界面右侧的“登录”按钮,进行登录,账号密码使用root:Abc@1234。登录之后的界面,如下图所示:
(3)新建库操作
选择新建--新建库,进行新建库操作。
单击“新建库”按钮后,如下图所示:
单击“新建数据库”按钮,填写数据库名称为wordpress,如下图所示:
(4)导入数据库
在创建完之后,选择数据管理--数据导入,进行数据的导入,如下图所示:
数据导入的时候,选择提供的chinaskill-wordpress.sql文件,如下图所示:
导入完成后,刷新页面,可以在库管理界面看到wordpress数据库中的表,如下图所示:
至此,云数据库创建与配置完毕。
(5)使用云数据库运行wordpress
在mycat节点,修改wp-config.php配置文件,将连接数据库的地址,修改为云数据库的地址,如下所示:
/** MySQL主机 */
define('DB_HOST', '192.168.0.13');
192.168.0.13是新建的云数据库的地址。
修改完毕后,访问网页即可。
3.4数据库备份
(1)数据库备份
chinaskill-node1节点和chinaskill-node2节点为主从数据库,所以备份数据库的时候只需要备份chinaskill-node1节点的数据库。具体命令如下:
首先创建result目录,然后使用mysqldump命令备份数据库。
[root@chinaskill-node1 ~]# mkdir /result
[root@chinaskill-node1 ~]# mysqldump -uroot -pAbc@1234 wordpress > /result/mysql_bak.sql
[root@chinaskill-node1 ~]# ll /result/
total 404
-rw-r--r-- 1 root root 411345 Oct 28 16:15 mysql_bak.sql
使用命令备份数据库完成。
3.5设置告警
(1)设置告警策略
进入设置告警策略界面,路径为云监控--告警配置--告警策略,如下图所示:
单击“新建”按钮,进行新建告警策略,告警策略填写的内容如下图所示:
在填写完毕后,单击下方的“完成”按钮,完成告警策略的添加。
3.6存储空间扩容
(1)使用云硬盘扩容存储
在云服务器--云硬盘界面,可以查看之前创建的云硬盘,大小为40G,如下图所示:
单击右边导航栏的更多--扩容选项,进行云硬盘扩容,如下图所示:
进入硬盘扩容界面,将目标容量调整为50G,然后单击“下一步”按钮,如下图所示:
在扩容磁盘容量之后,需要扩容文件系统才会生效扩容,单击“开始调整”进行扩容文件系统,如下图所示:
调整完之后,云硬盘的空间变成了50G大小,如下图所示:
使用远程连接工具,连接到chinaskill-node1节点,查看云硬盘大小,如下所示:
[root@chinaskill-node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 41.1M 0 rom
vda 253:0 0 50G 0 disk
└─vda1 253:1 0 50G 0 part /
vdb 253:16 0 50G 0 disk
可以看到硬盘vdb大小为50G,扩容云硬盘成功。
3.7设置弹性伸缩
(1)设置弹性伸缩启动配置
配置弹性伸缩需新建启动配置,使用镜像为自定义镜像chinaskill-node1。首先进入弹性伸缩界面,单击“启动配置”按钮,首先创建启动配置,如下图所示:
根据下图的内容修改启动配置,使用自定义镜像,即使用chinaskill-node1节点的快照。
在完成选择机型--设置主机--确认配置信息后,成功创建启动配置。
(2)新建弹性伸缩组
新建伸缩组。在弹性伸缩界面单击“伸缩组”按钮,进行配置伸缩组的配置,按照下图所示填写内容:
填写后单击“下一步”按钮。
(3)设置伸缩组负载均衡
在选择负载均衡时,选用上面2.7案例配置负载均衡案例,然后单击“完成”按钮即可,如下图所示:
3.8设置阻断IP
(1)设置主机安全阻断ssh连接
左上角云产品中点击云主机安全,点击“入侵检测→密码破解”,选择设置,点击取消。如下图所示:
(2)主机升级专业版
由于阻断功能仅对专业版主机生效,需要升级专业版。如下图所示:
选择要升级的主机,进行升级成专业版,升级之后将自动阻断开关开启。
(3)设置
在升级完专业版之后,单击“设置”按钮,如下图所示:
在设置中,按照如下图所示的要求修改,5分钟内如果10次不成功,即永久阻断,在修改完之后,直接关闭设置按钮,设置自动生效。
至此,设置主机在10次登陆错误后,无法访问该主机成功。
- 点赞
- 收藏
- 关注作者
评论(0)