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