1、MySQL的高可性解决方案MHA实战

1.安装软件包
管理节点安装
mha4mysql-manager   
mha4mysql-node
被管理节点安装  
mha4mysql-node
2.实现所有节点之间的ssh key验证
[root@zuoye1 ~]# ssh-keygen
[root@zuoye1 ~]# ssh-copy-id 10.0.0.100
[root@zuoye1 ~]# ssh-copy-id 10.0.0.101
[root@zuoye1 ~]# ssh-copy-id 10.0.0.102
[root@zuoye1 ~]# ssh-copy-id 10.0.0.103
其他节点类似
3.在管理节点建立配置文件
[root@zuoye1 ~]# mkdir /etc/mastermha/
[root@zuoye1 ~]# vim /etc/mastermha/app1.cnf 
[server default]
user=mhauser        #用于远程连接MySQL所有节点的用户,需要有管理员的权限
password=123456
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root       #用于实现远程ssh基于KEY的连接,访问二进制日志
repl_user=repluser  #主从复制的用户信息
repl_password=123456
ping_interval=1     #健康性检查的时间间隔
[server1]
hostname=10.0.0.101
candidate_master=1    
[server2]
hostname=10.0.0.102
candidate_master=1   #优先为新的master
[server3]
hostname=10.0.0.103
4.实现master
[root@zuoye1 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server-id=1
log-bin
skip_name_resolve=1

MariaDB [(none)]> show master logs
    -> ;
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| mariadb-bin.000002 |       264 |
| mariadb-bin.000003 |       565 |
| mariadb-bin.000004 |       666 |
| mariadb-bin.000005 |       245 |
+--------------------+-----------+
MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by     -> '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on *.* to mhauser@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
5.实现slave
[root@zuoye2 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server-id=2
log-bin
read_only
relay_log_purge=0
skip_name_resolve=1
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='10.0.0.100', MASTER_USER='repluser', 
    -> MASTER_PASSWORD='123456', MASTER_LOG_FILE='mariadb-bin.000005', 
    -> MASTER_LOG_POS=245;
MariaDB [(none)]> start slave;

[root@zuoye3 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server-id=3
log-bin
read_only
relay_log_purge=0
skip_name_resolve=1
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='10.0.0.100', MASTER_USER='repluser', 
    -> MASTER_PASSWORD='123456', MASTER_LOG_FILE='mariadb-bin.000005', 
    -> MASTER_LOG_POS=245;
MariaDB [(none)]> start slave;

[root@zuoye4 ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
server-id=4
log-bin
read_only
relay_log_purge=0
skip_name_resolve=1
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='10.0.0.100', MASTER_USER='repluser', 
    -> MASTER_PASSWORD='123456', MASTER_LOG_FILE='mariadb-bin.000005', 
    -> MASTER_LOG_POS=245;
MariaDB [(none)]> start slave;
6检查
[root@zuoye1 ~]# masterha_check_ssh --conf=/etc/mastermha/app1.cnf
[root@zuoye1 ~]# masterha_check_repl --conf=/etc/mastermha/app1.cnf
7启动mha
[root@zuoye1 ~]# nohup masterha_manager --conf=/etc/mastermha/app1.cnf &> /dev/null

2、Ansible常用模块总结

1.comman模块
功能:在远程主机上执行命名,默认模块,可忽略-m选项
举例: ansible websrvs -m command -a ‘rm -rf /’
2.shell模块
功能:在远程主机上执行shell命令
举例:ansible websrvs -m shell -a ‘ls /’
3.script模块
功能:在远程主机上运行ansible服务器上的脚本
举例:ansible websrvs -m script -a /data/test.sh
4.copy模块
功能:从ansible服务器主控端复制文件到远程主机
举例:ansible websrvs -m copy -a "src=/etc/ dest=/backup"
5.fetch模块
功能:从远程主机提取文件至ansible的主控端,和copy相反
举例:ansible websrvs -m fetch -a 'src=/root/test.sh dest=/data/scripts'
6.file模块
功能:设置文件属性
举例:ansible all -m file -a "path=/data/mysql state=directory owner=mysql"
7.unarchive模块
功能:解包解压缩,实现有两种用法:
1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no 
举例:ansible all -m unarchive -a 'src=/data/foo.tgz dest=/var/lib/foo owner=wang group=bin'
8.archive模块
功能:打包,压缩在远端主机上
举例:ansible websrvs -m archive  -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=wang mode=0600'
9.hostname模块
功能:管理主机名
举例:ansible node1 -m hostname -a "name=websrv"
10.cron模块
功能:计划任务
举例:ansible websrvs -m cron -a "name='backup mysql' state=absent"
11.yum模块
功能:管理软件包,支持RHEL,CENTOS,FEDORA
举例:ansible websrvs -m yum -a 'name=httpd state=present'
12.service模块
功能:管理服务
举例:ansible all -m service -a 'name=httpd state=started enabled=yes'
13.user模块
功能:管理用户
举例:ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
14.group模块
功能:管理组
举例:ansible websrvs -m group  -a 'name=nginx gid=88 system=yes'
15.lineinfile模块
功能:相当于sed,可以修改文件内容
举例:ansible websrvs -m   lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 80'"
16.replace模块
功能:该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用
举例:ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'" 
17.setup模块
功能:setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度,可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息
举例:ansible all -m setup -a "filter=ansible_nodename"

3、Ansible playbook实现zabbix-agent批量部署(主机名不同)

[root@zuoye1 ~]# vim zuoye.yml

---
#zabbix-agent批量部署
- hosts: zuoye
  remote_user: root
  gather_facts: no

  tasks:
       - name: add group zabbix
         user: name=zabbix state=present
       - name: add user zabbix
         user: name=zabbix state=present group=zabbix
       - name: install zabbix-agent
         yum: name=zabbix-agent state=present
       - name: Start zabbix-agent
         service: name=zabbix-agent state=started enabled=yes

[root@zuoye1 ~]# ansible-playbook zuoye.yml 

PLAY [zuoye] *************************************************************************

TASK [add group zabbix] **************************************************************
ok: [10.0.0.102]
ok: [10.0.0.101]
ok: [10.0.0.103]

TASK [add user zabbix] ***************************************************************
ok: [10.0.0.103]
ok: [10.0.0.102]
ok: [10.0.0.101]

TASK [install zabbix-agent] **********************************************************
ok: [10.0.0.102]
ok: [10.0.0.103]
ok: [10.0.0.101]

TASK [Start zabbix-agent] ************************************************************
changed: [10.0.0.101]
changed: [10.0.0.102]
changed: [10.0.0.103]

PLAY RECAP ***************************************************************************
10.0.0.101                 : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.102                 : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.103                 : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0