Linux云计算-就业第十二周作业

本文详细介绍了Linux云计算环境下的数据库主从复制与主主复制,包括配置与实现步骤。同时讲解了xtrabackup在全量、增量和binlog恢复库中的应用。此外,探讨了MyCAT实现MySQL读写分离的原理和方法。最后,深入探讨了Ansible常用模块,如ping、Command、Shell、Copy等,展示了它们在自动化运维中的作用和使用示例。

目录

1、主从复制及主主复制的实现

1.1主从复制

1.2主主复制

2、xtrabackup实现全量+增量+binlog恢复库

2.1.全量恢复

 2.2.增量恢复

2.3 binlog日志恢复

3、MyCAT实现MySQL读写分离

3.1.读写分离概述

3.2. MyCat概述

 3.3 MyCat读写分离

4、ansible常用模块介绍

4.1 ​ping模块​

4.2  Command模块​

 4.3 ​Shell模块​

 ​4.4 Script模块

4.5 Copy模块

 ​4.6 Fetch模块​

 4.7​Get_url模块​

4.8 ​File模块​

4.9 ​stat模块​

4.10 unarchive模块​

4.11 Hostname模块​

4.12 Cron模块​

​编辑​编辑pause 模块

4.13 Yum和Apt模块​

 ​4.14 Service模块​

 4.15​User模块​

4.16 ​Group模块​

4.17Lineinfile模块​

​编辑​编辑4.18Replace模块​

4.19 ​reboot模块​


​​​​​​​1、主从复制及主主复制的实现

1.1主从复制

编辑my.cnf配置文件,开启主库上的binlog日志文件,生产中建议将主节点的二进制日志保存路径与默认路径相分离

vim 
[mysqld]
log_bin = /data/mysql/mysql_m-bin
server-id=1
log-basename=master

重启数据库,查看主节点当前的二进制文件名及位置

/etc/init.d/mysqld restart

ll /data/mysql/mysql_m-bin.*

在主机点上创建有复制权限的用户账号 :

CREATE USER 'repluser'@'192.168.103.%' IDENTIFIED BY 'replpass';

GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.103.%';

配置从服务器,从节点slave登录数据库后,根据master创建的账号、密*码、二进制日志位置等信息来复制主节点数据,同时执行​ start slave; ​命令开启IO线程和SQL线程保持主从同步。从节点建议开启read-only项

mysql -uroot

CHANGE MASTER TO   MASTER_HOST='192.168.103.114',   MASTER_USER='repluser',   MASTER_PASSWORD='replpass',   MASTER_PORT=3306,   MASTER_LOG_FILE='master-bin.000003',   MASTER_LOG_POS=447,   MASTER_CONNECT_RETRY=10;

start slave;

1.2主主复制

主节点配置文件

[mysqld]
server-id=1    #为当前节点设置一个全局惟的ID号(不能和主节点一
log-bin    #启用二进制
auto_increment_offset=1	#开始点
auto_increment_increment=2	#增长幅度

从节点配置文件:

[mysqld]
server-id=2
log-bin
auto_increment_offset=2 #开始点
auto_increment_increment=2      #增长幅度

配置连接master的相关信息

CREATE USER 'repluser'@'192.168.103.%' IDENTIFIED BY 'replpass';

GRANT REPLICATION SLAVE ON *.* TO

change master to MASTER_HOST='192.168.0.117',
MASTER_USER='repluser',
MASTER_PASSWORD='testdb',
MASTER_PORT=3306,
MASTER_LOG_FILE=' mariadb-bin.000001',
MASTER_LOG_POS=330;

start slave;
mysql -uroot
CREATE USER 'repluser'@'192.168.103.%' IDENTIFIED BY 'replpass';
GRANT REPLICATION SLAVE ON *.* TO 
CHANGE MASTER TO
  MASTER_HOST='192.168.103.113',
  MASTER_USER='repluser',
  MASTER_PASSWORD='replpass',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysqld-bin.000001',
  MASTER_LOG_POS=657,
  MASTER_CONNECT_RETRY=10;

start slave;


 


2、xtrabackup实现全量+增量+binlog恢复库

MySQL自带的mysqldump备份方式采用的是逻辑备份,需要正常登录数据库使用source命令恢复,无需登录数据库的非交互式恢复。其最大的缺陷是备份和恢复的速度比较慢

通过日志文件进行回放,然后将提交的事务信息及变更应用到数据库或表空间,同时回滚未提交的事务,最终实现数据的一致

2.1.全量恢复

1)下载并安装xtrabackup包 

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.23/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm

 2)在主机做完全备份到/backup目录(备份目录为一级目录时可自动创建目录)。由于未设置密*码,所以直接使用root账号进行备份即可,同时备份的/backup目录会自动创建

 xtrabackup --defaults-file=/etc/my.cnf -uroot --backup --target-dir=/backup

 3)在目标主机上还原mysql

 把备份文件直接scp至目标主机进行还原

scp -r /backup root@192.168.0.116:/

预准备可以确保数据一致,提交完成的事务,回滚未完成的事务。

xtrabackup --prepare --target-dir=/backup

 要保证目标主机的数据库目录为空,同时数据库状态是关闭的,执行​ xtrabackup --copy-back --target-dir=/backup/base​ 命令进行将xtrabackup主机数据库中的数据复制到本机的MySQL中

xtrabackup --copy-back --target-dir=/backup

 此时在destination主机上查看/var/lib/mysql目录,已将数据进行还原,但是所有者和所属组是root,因此还要改成mysql​​

chown -R mysql:mysql /var/lib/mysql

 destination主机开启mysql服务,登录数据库后,查看现有的数据库,内容与xtrabackup主机数据库中内容相同,已经完成了完全备份

 2.2.增量恢复

要进行增量备份,必须先进行完全备份。与上面的完全备份并还原不同,在增量备份中,完全备份的数据还原过程是不能进行回滚操作的,因为在完全备份的时间点上,如果有事务正在进行,而又进行了回滚的操作,会导致复制还原的数据不全。同理,如果是做了多次的增量备份,除了最后一次的增量备份数据还原需执行回滚操作,中间节点的增量备份还原也不能进行回滚。

主机将数据库所有数据备份到/backup目录下。

 ​xtrabackup --defaults-file=/etc/my.cnf -uroot --backup --target-dir=/backup/base

 假设在完全备份后,我们在hellodb数据库中的students表中添加了三条学生信息​​
此时我们要进行增量备份,执行 ​

xtrabackup -uroot --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base

​命令,即我们是基于/backup/base这个完全备份来进行的增量备份,同时增量备份是放在/backup/inc1目录下
在完成第一次增量备份操作后,假设现在又要对hellodb数据库中的students表进行表动,再添加两条学生信息​
此时我们进行增量备份时不能是基于完全备份,应是基于第一次增量备份来进行的,即在/backup/inc1的基础上做的新增量备份,我们可以按次序放在/backup/inc2目录下​​

​​​​​​​xtrabackup -uroot --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1

与完全备份部分的操作相同,将整个/backup文件夹复制到destination主机上

scp -r /backup root@192.168.0.116:/

预准备完全备份,需加上--apply-log-only选项来阻止回滚未完成的事务,否则在生产中可能会导致一些事务不全​

xtrabackup --prepare --apply-log-only --target-dir=/backup/base

如果中间有多个增量备份,除了最后一次的增量备份还原,都不能有回滚操作,笔者这边模拟的比较简单,只有两次增量备份的数据还原,因此第二次还原时是要进行回滚,即取消--apply-log-only选项​​

xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup1/inc1

xtrabackup --prepare --target-dir=/backup/base --incrementaldir=/backup1/inc2

因为上面的数据还原过程,已经将第一次和第二次的增量备份整合到了完全备份中,此时即可将所有数据复制到数据库中

xtrabackup --copy-back --target-dir=/backup/base

由于/var/lib/mysql目录下的文件所有者和所属组是root,还需改成mysql​​

chown -R mysql.mysql /var/lib/mysql

destination主机开启mysql服务,登录hellodb数据库后,查看students表,显示的信息与xtrabackup主机hellodb数据库中的相同,从而实现了增量备份​​

2.3 binlog日志恢复

 在完全备份和增量备份的基础上,如果xtrabackup主机的数据库再发生数据更新,继续用增量备份的话可能会导致目标主机数据库中的部分事务不全,此时可以使用binlog来进行数据还原。

    假设我们现在又对hellodb数据库中的students表进行了内容添加​​

 由于destination主机上的数据在进行第二次增量备份的还原时有回滚操作,可能会有事务不全,此时我们应该通过destination主机查看第二次增量备份整合到完全备份后的二进制日志位置

 其他的事务都是在第二次增量备份整合到完全备份之后发生的,因此要将mysql-bin.000006二进制文件156节点后的所有数据进行还原,需要xtrabackup主机将mysql-bin.000006和之后的二进制日志文件都发送到destination主机上

 将完全备份+增量备份还原数据后新增的数据添加到binlog.sql文件中,登录数据库后先关闭二进制日志,然后通过source来读取生成的SQL文件数据

mysqlbinlog /backup/mysql-bin.000006 --start-position=156 > /backup/binlog.sql 

set sql_log_bin=0;

source /backup/binlog.sql

 读取完SQL文件数据,可以重新开启二进制日志,此时查看hellodb数据库中的students表,在完全备份+增量备份之后添加的两条学生信息也已经还原到destination主机数据库中​​

 


3、MyCAT实现MySQL读写分离

3.1.读写分离概述

1)工作原理

  读写分离是让主数据库处理事务性增删改操作(insert、delete、update),让从数据库处理查询查询操作(select)。

2)作用

  1.分担负载
        2.主从只负责各自的写和读,极大的缓解X锁和S锁争用
        3.从库可配置MyISAM引擎,提升查询性能以及节约系统开销
        4.增加冗余,提高可用性

3)实现方法

一、应用程序和网站程序的实现。指的是在应用程序内部及连接器中实现读写分离。

  优点:1.应用程序内部实现读写分离,安装就可以使用;2. 减少一定部署难度;3.访问压力在一定级别以下,性能很好。
        缺点:1.架构一旦调整,代码要跟着变;2.难以实现高级应用,如自动分库,分表;3.无法适用大型应用场景。

二、中间件实现。指的是在外部中间件程序实现读写分离。

  优点:1.架构设计更灵活;2.可以在程序上实现一些高级控制,如:透明化水平拆分,failover,监控;3.可以依靠些技术手段提高mysql性能;4.对业务代码的影响小,同时也安全
        缺点:需要一定的开发运维团队的支持。

3.2. MyCat概述

Mycat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理​​(类似于Mysql Proxy)​​,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。Mycat适用的场景比较多,例如读写分离、分表分开、多租户应用、报表系统、替代Hbase分析大数据等

​Mycat可从官网进行下载​​(下载选择界面:http://dl.mycat.org.cn/)​​,同时创建一个目录来进行解压​​

Mycat是基于Java来实现的,因此还需下载java,CentOS中默认安装的是openjdk

 查看解压后生成的/apps/mycat/bin目录,里面有一个mycat,即Mycat的启动程序,为了不用在每次启动时都写全路径,可生成PATH变量保存到配置文件中,同时执行source命令生效​​

 在启动前,建议先查看一下内存,如果太小可能会导致服务无法启动,确认内存够用的情况下,执行 ​mycat start ​命令启动Mycat,启动后需等待一会,可以通过/apps/mycat/logs/wrapper.log文件或者状态查看是否启动成功​

 用户使用Mycat默认的8066端口进行连接时并不是很方便,不符合连接数据库时的习惯,因此可以考虑将端口改为3306。打开/apps/mycat/conf/server.xml文件后,找到<property name="serverPort">一行,将8066改为3306,同时要取消前后的注释内容

  同时默认的登录密*码为123456,过于简单,生产中建议修改,虚拟数据库名称是否修改看个人。

 3.3 MyCat读写分离

打开/apps/mycat/conf/schema.xml文件,清空所有内容,填写如下图信息,当然在修改前建议先将源文件进行备份。策略中要注意填写可供用户使用的数据库名称,balance设为1表示开启读写分离,同时要填写读操作和写操作对应的主机ip,读写操作部分的用户root不是自带的root,而是要另外创建的。修改完毕,重新启动Mycat服务。

根据mycat服务器端在schema.xml文件中的设定,我们需创建root账号及设定指定密*码,同时要进行授权,让mycat服务器端能使用这个账号和密*码来进行登录。因为是主从复制架构,所以从节点无需再创建root账号​​ 

 登录mycat后,可以正常使用TESTDB虚拟数据库,且这个数据库就是主从复制数据库中的hellodb数据库​​

 客户端登录数据库后执行 ​select @@server_id;​ 命令,这是一个读操作,返回的结果是从节点slave设置的156,说明读的操作时发生在从节点服务器上的。

  客户端对teachers表进行修改,将TID为1的老师年龄改为server-id的值,这是一个写操作,执行后,返回的结果是155,这与主节点服务器上设置的server-id一直,说明写操作是发生在主节点服务器上的​​


4、ansible常用模块介绍

4.1 ​ping模块​

ping模块的功能是探测ansible主机是否能够远程连接被控制端的主机,如果返回的结果是绿色的,即视为可达,ansible主机发出ping的动作,被控制端如果可达会返回一个pong​​

4.2  Command模块​

Command模块的功能是在远程主机执行命令,此为默认模块,可忽略 -m 选项,例如我们可以在ansible主机查看远程主机名称、创建或删除文件​​

– creates:一个文件名,当该文件存在,则该命令不执行

– free_form:要执行的linux指令

– chdir:在执行指令之前,先切换到该目录

– removes:一个文件名,当该文件不存在,则该选项不执行

– executable:更改用于执行命令的shell(bash,sh),该执行路径必须是一个绝对路径

 Command模块支持先切换文件夹再查看,也支持我们根据文件夹的存在与否来进行创建,如果不存在则创建,如果已经存在,会提示已存在而不去创建​​

 Command模块虽然能在远程主机执行命令,但不支持各种符号,如管道和重定向等,例如我们希望通过ansible主机将hello这个单词写入到远程主机的/data/test2.log中,但是执行后,只是将echo之后的语句显示出来,并不是执行我们想要的操作​​

 4.3 ​Shell模块​

Shell模块的功能和Command模块相似,用shell执行命令,支持各种符号,比如:*,$, >,可以认为Shell模块是增强版的Command模块。例如我们可以利用Shell模块来执行Command模块中向远程主机的/data/test2.log文件中写入hello这个单词的操作,执行命令后可以生成test2.log文件,查看内容显示的是hello

 ​4.4 Script模块

​Script模块的功能是在远程主机上运行ansible主机上的脚本,并且无需执行权限。

-m script -a "/PATH/TO/SCRIPT_FILE";

例如笔者这边创建了一个简单的脚本,就是显示dbsrvs分组中的主机名称,利用Script模块执行脚本后会将分组中的主机名称显示出来​​

4.5 Copy模块

Copy模块的功能是从ansible主机复制文件到远程主机上,例如笔者这边希望将ansible主机上的ansible_test.txt文件复制到websrvs分组中的远程主机上,在复制过程中,我们可以修改文件的名称、所有者、所属组、权限和保存路径等

在远程主机执行复制操作文件。 

– src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。 

– content:用于替代”src”,可以直接设定指定文件的值 

– dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录 

– remote_src:<布尔值,Choices: yes | no >,影响 src 是否需要转移或已经远程存在。如果no,它将src在ansible 本地控制服务器上搜索,如果yes它将src在托管(远程)节点上搜索。

– directory_mode:递归的设定目录的权限,默认为系统默认权限 

– force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

 ​4.6 Fetch模块​

Fetch模块的功能是从远程主机提取文件至ansible主机端,与copy模块相反

– src:远程系统上要获取的文件。 这必须是一个文件,而不是一个目录。

– dest:保存文件的目录。 

– flat:只下载目标文件到本地路径中。在使用参数为flat的时候,如果dest的后缀名为/,那么就会保存在目录中,然后直接保存为文件名;当dest后缀不为/的时候,那么就会直接保存为dest路径结尾的文件名。

 4.7​Get_url模块​

Get_url模块的功能是用于将文件从http、https或ftp下载到被管理机节点上,其常用参数包括url​​(下载文件的URL,支持HTTP,HTTPS或FTP协议)​​、dest​​(下载到目标路径)​​、owner​​(指定属主)​​、group​​(指定属组)、​​mode​​(指定权限)​​和checksum​​(对目标文件在下载后计算摘要,以确保其完整性)​​等

4.8 ​File模块​

File模块的功能是设置文件属性,创建软链接等。例如通过ansible主机在所有的主机上创建/data/haha文件夹,将所有者和所属组改为fangxiaotiao​​

– force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no 
– group:定义文件/目录的属组 
– mode:定义文件/目录的权限 
– owner:定义文件/目录的属主 
– path:必选项,定义文件/目录的路径 
– recurse:递归的设置文件的属性,只对目录有效 
– src:要被链接的源文件的路径,只应用于state=link的情况 
– dest:被链接到的路径,只应用于state=link的情况 
– state: 
        directory:如果目录不存在,创建目录 
        file:即使文件不存在,也不会被创建 
        link:创建软链接 
        hard:创建硬链接 
        touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 
        absent:删除目录、文件或者取消链接文件

4.9 ​stat模块​

state模块的主要功能是检查文件或文件系统的状态,包括atime,ctime,mtime,md5,uid,gid等信息,例如我们查看/etc/passwd文件,会显示文件的大小、属性等信息​​

4.10 unarchive模块​

unarchive模块的功能是在ansible主机对远程主机进行解压缩,其实现方式有三种:一种是将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值可省略;第二种是将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no;第三种是直接将互联网上的某一个包下载到远程主机并进行解压缩。例如笔者这边在Get_url模块下载了nginx压缩包到websrvs分组主机上,此时要进行对远程主机的压缩包进行解压,在解压缩的时候可以修改所有者和所属组等​​

4.11 Hostname模块​

        Hostname模块的功能是管理主机名,如果是分组的话,会直接将分组中的所有主机名都改为设定的,笔者这边将ip为10.0.0.156的主机改名为hello-world​​

4.12 Cron模块​

        Cron模块的功能是执行计划任务,例如ansible主机上有一个关于数据库备份的脚本,希望10.0.0.154主机每周一到周五的两点半执行一次,执行命令后,可以在ansible主机查看到计划任务已经添加到了目标远程主机的任务列表中​​


pause 模块

4.13 Yum和Apt模块​

        yum管理软件包,只支持RHEL、CentOS、fedora,不支持Ubuntu和其它版本;apt模块管理Debian相关版本的软件包。

  如果想操作安装的服务,

– state:状态(present,absent,latest),表示是安装还卸载 

   present:默认的,表示为安装 

   latest: 安装为最新的版本 

   absent:表示删除 

 ​4.14 Service模块​

        Service模块的功能是管理远程主机上的服务,例如笔者想要开启10.0.0.154远程主机上httpd服务,需填写服务的名称、状态,同时支持设置开机自启动

 如果想关闭服务,需要将状态改为stopped,不想开机自启动,也可将enabled改为no​​

– arguments:给命令行提供一些选项 

– enabled:是否开机启动 yes|no, 要求状态(state)和启用(enabled)中至少有一个。 

– name:必选项,服务名称 

– runlevel:运行级别 

– sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟 

– state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)

 4.15​User模块​

        User模块的功能是管理远程主机的用户,例如我们可以新增用户,设置用户的说明、UID、家目录和组等 

4.16 ​Group模块​

        Group模块用于管理远程主机上的组,例如笔者在ip为10.0.0.153的远程主机上创建nginx组,可以设定nginx组的ID和是否是系统组等
– gid:指定用的gid。 
– name:指定用户名。 
– state:是创建还是删除。(present,absent) 
– system:如果是,则表示创建的组是系统组。

 

4.17Lineinfile模块​

        ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。其实在ansible自身提供了两个模块可以方便的进行替换,其中一个就是Lineinfile模块,一般在ansible当中去修改某个文件的单行进行替换的时候需要使用Lineinfile模块。

    例如笔者在10.0.0.154主机上下载了httpd服务,现在想将端口从80改为8080​​

 使用正则表达式匹配对应的行,当处于删除文本的操作时,如果有多行文本都能被匹配,这些行都会被删除 

 但在使用正则表达式匹配对应的行,当处于替换文本的操作时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,例如笔者将10.0.0.154远程主机的/etc/httpd/conf/httpd.conf文件中再添加两行Listen 8080,现在希望将所有的8080端口重新改为80,执行命令后只有最后一行被替换了


4.18Replace模块​

Replace模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用,如果想进行多行匹配进行替换需要使用Replace模块。例如还是上面10.0.0.154远程主机的/etc/httpd/conf/httpd.conf文件,我们要将端口改为9527​​

4.19 ​reboot模块​

reboot模块负责远程主机的重启功能,对象可以是全部主机、分组或单台主机,例如笔者这边重启10.0.0.156主机​​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值