MySQL主主复制及相关的排坑
主主复制的本质就是2台MySQL服务器互为主从。
但如此配置极易产生问题,如数据不一致导致主键的冲突,以及一些其他的错误。
为了减少主键冲突的情况,可以考虑让两个节点的id分别使用奇数和偶数,这就需要用到两个服务器选项来配置。
12auto_increment_offset #设置id的开始点auto_increment_increment #设置id的步进
主主复制工作中不推荐使用,如确实需要使用,也将其当为主从来使用。
主主复制的搭建使用2台主机来配置主主复制|主机|ip||:-|:-||Master1|192.168.73.110||Master2|192.168.73.111|
配置Master11.修改配置文件
123456[root@Master1 ~]# vim /etc/my.cnf[mysqld]log-binserver-id=1auto_increment_offset=1auto_increment_increment=2
2.启动MySQL服务
1[root@Master1 ~]# systemctl start mariad ...
MySQL半同步复制
MySQL的复制方法有异步复制,同步复制,半同步复制。
异步复制:是当用户写入一条记录时,先将数据写入到主节点,然后回复用户一个写入成功的消息,然后慢慢的将数据复制到其背后的其他从节点,这样的好处是效率比较高,但是缺点也是非常明显,主服务器和从服务器的延迟过大并且主服务器突然发生异常,此时就会造成数据的丢失。
同步复制:是当用户写入一条记录时,主节点将数据写入数据库,然后将数据复制给其后面的其他从节点,当所有的从节点返回数据复制成功后,主节点再回复用户数据接入成功的消息,这样做的好处是,确保了数据的安全性,但损失了效率。
半同步复制:是间于同步复制和异步复制之间的一种复制方法,他的工作原理是:当用户执行写操作时,主节点会将数据发送给其后面的其他从节点,只要有一个从节点返回复制成功的消息,主节点就直接返回写入成功,如果主节点背后的从节点迟迟不返回复制成功消息,此时就会有一个超时时长,一旦达到超时时长,主节点就先返回消息告诉用户复制成功,而后将数据继续给从节点复制。
半同步复制的配置方法半同步复制要实现方法
主服务器上安装semi_sync_master.so的插件,并启用 ...
MySQL主从复制
所有的关系型数据库都存在一个通病性能差,在企业中如果用户量特别大,将所有的数据都存放在一台服务器上,其性能是远远达不到要求的。所以需要使用一些手段来解决其性能的问题。
提升性能的方式有向上扩展以及向外扩展
向上扩展(Scale Up):使用更新更好的硬件,但硬件在怎么更新也有其性能的极限。盲目的向上扩展无法结局根本的问题
向外扩展(Scale Out):就是使用多台机器分摊压力来提供服务
主从复制就是拿多个数据库服务器,组合成一个服务器的集合对外共同服务实现性能的提升,逻辑上使用的时对外扩展的方式(Scale out)来提升服务器的性能。
主从复制原理MySQL主从同步一共需要三个线程的操作,主MySQL有一个IO线程,从MySQL有一个IO线程和一个SQL线程, MySQL主从是实现MySQL高可用、数据备份、读写分离架构的一种最常见的解决方案,在绝大部分公司都有使用,要实现MySQL主从复制,必须要在Master打开binary log(bin-log)功能,因为整个MySQL的复制过程实际就是Slave从Master端获取响应的二进制日志,然后在Slave端顺序的 ...
自动化运维之Ansible(十三)
Ansible角色的一些实战练习本节主要针对一些服务的部署,来创建出其角色。以方便更快的掌握ansible角色的创建和使用。
练习一建立memcached角色,并实现将内存的1/4当缓存使用
1.创建角色目录
123456#创建出memcached角色的结构目录[root@ansible data]# mkdir -pv roles/memcadhed/{templates,tasks,vars}mkdir: created directory ‘roles/memcadhed’mkdir: created directory ‘roles/memcadhed/templates’mkdir: created directory ‘roles/memcadhed/tasks’mkdir: created directory ‘roles/memcadhed/vars’
2.安装memeche获取配置文件
123#使用yum安装memcached从而获取到memcached配置文件,并将配置文件复制到templates目录下让其变为模板文件[root@ansib ...
自动化运维之Ansible(十二)
roles中template、handler、when及tags的应用在ansible的playbook中有template、notify-handler、when、及tags,来控制和管理ansible在部署服务时根据主机的不同,部署上不通的配置文件或者执行不同的操作。同样在roles中也能实现这样的功能,以下将演示这些功能在roles中的使用方法。
roles中template使用roles中可以使用template让部署应用的配置文件进行模板化,可以实现根据需求的不通对各个主机上的配置文件做不同的改变,此处以创建nginx的角色为例来演示如何在roles中使用template
创建Nginx角色1.创建相应的角色目录
12345678#创建出nginx的角色目录结构[root@ansible data]# mkdir -pv roles/nginx/{tasks,templates,files,vars,handlers}mkdir: created directory ‘roles/nginx’mkdir: created directory ‘role ...
自动化运维之Ansible(十一)
ansible的rolesroles用于层次性、结构化地组织playbook。roles能够更具层次结构自动装载变量文件,task以及handlers等。要使用roles只需要在playbook中使用include指令即可,简单来讲,roles就是通过分别将变量、文件、任务、模板以及处理器放置于单独的目录中,并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以时用于构建守护进程等守护场景中。
roles就是按照不同的分类和功能进行目录化,模块化,能够实现代码的复合使用。
roles的目录结构每个角色都有特定的层级目录结构进行组织,每一个roles都必须符合这种结构规范。
roles目录结构及作用12345678910playbook.ymlroles/└──project/ #项目名称 ├──tasks/ #定义task,role的基本元素,至少包含一个名为main.yml的文件 ├──files/ #存放由copy或script模块等需要模板文件的目录 ├──vars/ ...
自动化运维之Ansible(十)
template中的for和if在模板文件中可以使用for和if,来实现对模板文件中的内容进行循环和判断。从而实现一个配置文件中的某一段需要被多次引用,或者做判断某一配置段是否需要。
template中的for循环在ansible的模板文件中可以创建循环,将某配置段中需要变动的值设置为一个变量,将变量中的所有值以列表的形式定义在yaml文件中,当playbook被执行时会从文件中逐个读取值,将配置段进行循环。
template中for的使用生成以下文件内容,每个server段的监听端口不同其余都相同
123456789101112131415server{ listen 81 server_name www.a.com root /app/websitea/}server{ listen 82 server_name www.a.com root /app/websitea/}server{ listen 83 serve ...
自动化运维之Ansible(九)
Ansible-playbook中的流控制在ansible中的有各种流控制的机制,本节主要讲ansible流控制中的when和with_item
流控制when在使用ansible做自动化运维的时候,大多数情况下都执行某些任务的时候都需要依赖某个变量的值或者是上一个任务的执行结果。如,根据facts信息中的系统版本相关的信息来确定使用哪种包管理器安装软件。Ansible提供when语句,可以控制任务的执行流程。
playbook中when的使用when测试条件:如果需要根据变量、facts或此前任务的执行结果来作为某task执行与否的前提条件时,需要用到条件测试,通过when语句实现,在task中使用,jinja2语法。
when使用实战当系统不同时,httpd的配置文件也不同,根据系统的版本来判断使用哪个httpd的配置文件
1.使用setup模块找远程系统中版本变量
1234[root@ansible yaml]# ansible webserver -m setup | grep distribution_major_version "ansibl ...
自动化运维之Ansible(七)
Ansible-playbook中的变量在ansible的playbook中还可以使用变量,变量的命名必须符合其规则,仅能由字母、数字和下划线组成,且只能以字母开头。
Playbook中变量可以通过以下几种方法进行定义:
Ansible setup facts中已经定义好的变量
主机清单中定义变量
命令行下使用-e选项定义变量
在剧本中定义变量
变量定义在一个专用的变量文件中
ansible setup facts 远程主机的所有变量都可直接调用使用ansible的setup模块可以查看远程主机上的所有变量,然后在yaml文件中直接进行调用。
1ansible HOSTLIST -m setup
此命令可以查看远程主机上所有已存在的各种变量,此处查看hostname的变量名
12345678910111213[root@ansible data]# ansible webserver -m setup -a 'filter=*hostname'192.168.73.134 | SUCCESS => { "ansible_ ...
自动化运维之Ansible(六)
ansible-playbook中标签的使用 tags在某些情况下,我们可能只需要选择性的执行playbook中的某一部分,这时候就需要用到playbook的标签(tags)功能,在playbook中添加标签可以让playbook在运行时选择性的执行被标签的内容。
playbook中标签的使用此处沿用上一节中所使用的httpd的yaml文件,再次将httpd.conf文件进行修改,上一节中httpd的端口从8080改为了80,在这里再次将端口从80改为8080。
修改httpd端口,将其改为8080
12[root@ansible data]# vim httpd.confListen 8080 #在配置文件中找到Listen,修改为8080
编辑yaml文件,对文件内的内容贴标签
1234567891011121314151617181920[root@ansible data]# vim httpd.yaml---#install httpd - hosts: webserver remote_user: root tasks: - n ...