07 saltstack生产实例-mysql主从
1、服务部署
.服务部署
抽象:功能模块
redis 安装、配置、启动
mysql 安装、配置(my.cnf可以统一 目录默认配置可以统一)
master: server_id
slave: server_id
.redis 主从 (已经实现)
.mysql 主从
2.1 mysql-install.sls 安装 配置 初始化
2.2 my.cnf配置不同-server id
2.3 创建主从同步用户
2.4 master上获取binlog 和 pos值
2.5 slave上,change master && start slave
2.6 检查主从状态
GRANT replication slave on
.apache+php
.haproxy+keepalived
2、redis(已经完成)
https://www.cnblogs.com/venicid/p/11276232.html#_label7_0

3、mysql安装,配置
1、目录结构
module模块
按类型分:
按业务分
Module 模块里面有 mysql redis 等
统一的的全部放在这里,比如安装,配置


redis 安装配置.sls
[root@# localhost /srv/salt/prod/modules]# cat redis/init.sls
redis-install:
pkg.installed:
- name: redis redis-config:
file.managed:
- name: /etc/redis.conf
- source: salt://redis/files/redis.conf
- user: root
- group: root
- mode:
- template: jinja
- defaults:
PORT:
IPADDR: {{ grains['fqdn_ip4'][] }} redis-service:
service.running:
- name: redis
- enable: True
- reload: True
- watch:
- file: redis-config
2、mysql 安装,配置.sls
[root@# localhost /srv/salt/prod/modules/mysql]# cat install.sls
mysql-install:
pkg.installed:
- pkgs:
- mariadb
- mariadb-server mysql-config:
file.managed:
- name: /etc/my.cnf
- source: salt://modules/mysql/files/my.cnf
- user: root
- group: root
- mode:
[root@linux-node1 /srv/salt/prod/modules/mysql]# salt 'linux-node1*' state.sls modules.mysql.install saltenv=prod

4、主从配置

1、目录结构

2、主从配置.sls
[root@# localhost /srv/salt/prod/modules/mysql]# cat master.sls
include:
- modules.mysql.install master-config:
file.managed:
- name: /etc/my.cnf.d/mariadb-server.cnf
- source: salt://modules/mysql/files/mariadb-server-master.cnf
- user: root
- group: root
- mode: master-service:
service.running:
- name: mariadb
- enable: True
[root@# localhost /srv/salt/prod/modules/mysql]# cat slave.sls
include:
- modules.mysql.install slave-config:
file.managed:
- name: /etc/my.cnf.d/mariadb-slave.cnf
- source: salt://modules/mysql/files/mariadb-server-slave.cnf
- user: root
- group: root
- mode: slave-service:
service.running:
- name: mariadb
- enable: True
3、file配置文件
[root@# localhost /srv/salt/prod/modules/mysql]# cp /etc/my.cnf.d/server.cnf files/mariadb-server-master.cnf
[root@# localhost /srv/salt/prod/modules/mysql]# cp /etc/my.cnf.d/server.cnf files/mariadb-server-slave.cnf
[root@# localhost /srv/salt/prod/modules/mysql/files]# vim mariadb-server-master.cnf
[root@# localhost /srv/salt/prod/modules/mysql/files]# vim mariadb-server-slave.cn

[root@# localhost ~]# salt 'linux-node1*' state.sls modules.mysql.master saltenv=prod
[root@# localhost ~]# salt 'linux-node2*' state.sls modules.mysql.slave saltenv=prod


5、主从同步用户,授权
赵班长:https://github.com/unixhot/salt-openstack/tree/master/states/openstack-mitaka/mysql
https://www.unixhot.com/page/ops
官方文档 http://docs.saltstack.cn/ref/states/all/salt.states.mysql_user.html


完成这个命令: grant replication slave on *.* to 'xxx'@'xxxxx.%' identified by 'xxxxx';
必须启动mysql, 从0构建mysql
1、方式1:mysql授权
master.sls
[root@# localhost /srv/salt/prod/modules/mysql]# cat master.sls
include:
- modules.mysql.install master-config:
file.managed:
- name: /etc/my.cnf.d/mariadb-server.cnf
- source: salt://modules/mysql/files/mariadb-server-master.cnf
- user: root
- group: root
- mode: master-service:
service.running:
- name: mariadb
- enable: True repl-user: ## 创建用户
mysql_user.present:
- name: repl_user
- host: 192.168.194.0/255.255.255.0
- password: repl_user grant-user: ##授权
mysql_grants.present:
- grant: replication slave
- database: '*.*'
- user: repl_user
- host: 192.168.194.0/255.255.255.0
slave.sls 不变
[root@# localhost /srv/salt/prod/modules/mysql]# cat slave.sls
include:
- modules.mysql.install slave-config:
file.managed:
- name: /etc/my.cnf.d/mariadb-slave.cnf
- source: salt://modules/mysql/files/mariadb-server-slave.cnf
- user: root
- group: root
- mode: slave-service:
service.running:
- name: mariadb
- enable: True
[root@# localhost /srv/salt/prod/modules/mysql]#
测试下
[root@# localhost ~]# salt '*' state.sls modules.mysql.master saltenv=prod

Question:执行时出错
Comment: MySQL Error 1142: SELECT command denied to user 'salt'@'linux-node1' for table 'user'

###解决办法:断开minion连接MySQL

[root@# localhost ~]# systemctl restart salt-minion
2、方式2:cmd方式授权
[root@# localhost /srv/salt/prod/modules/mysql]# cat master.sls
include:
- modules.mysql.install master-config:
file.managed:
- name: /etc/my.cnf.d/mariadb-server.cnf
- source: salt://modules/mysql/files/mariadb-server-master.cnf
- user: root
- group: root
- mode: master-service:
service.running:
- name: mariadb
- enable: True master-grant:
cmd.run:
- name: mysql -e "GRANT replication slave,super on *.* to 'repl_user'@'192.168.194.0/255.255.255.0' identified by 'repl_user@pass'"
- unless: mysql -h 192.168.194.131 -u repl_user -prepl_user@pass -e "exit"
[root@# localhost ~]# salt '*' state.sls modules.mysql.master saltenv=prod

3、方式3:脚本 ---按业务来分 (有时候错误,用前两方式)
基础和业务分开
资源
业务:业务使用了资源
手动执行,安装mysql
[root@# localhost ~]# salt '*' state.sls modules.mysql.master saltenv=prod
(1)目录结构

(2)master,slave.sls还原
[root@# localhost /srv/salt/prod/modules/mysql]# cat master.sls
include:
- modules.mysql.install master-config:
file.managed:
- name: /etc/my.cnf.d/mariadb-server.cnf
- source: salt://modules/mysql/files/mariadb-server-master.cnf
- user: root
- group: root
- mode: master-service:
service.running:
- name: mariadb
- enable: True [root@# localhost /srv/salt/prod/modules/mysql]# cat slave.sls
include:
- modules.mysql.install slave-config:
file.managed:
- name: /etc/my.cnf.d/mariadb-slave.cnf
- source: salt://modules/mysql/files/mariadb-server-slave.cnf
- user: root
- group: root
- mode: slave-service:
service.running:
- name: mariadb
- enable: True
(3)脚本文件
[root@# localhost /srv/salt/prod/shop-user/files]# cat start_slave.sh
#!/bin/bash
for i in `seq `;do
mysql -h 192.168.194.131 -u repl_user -prepl_user@pass -e "exit"
if [ $? -eq ];then
POS=$(mysql -h 192.168.194.131 -u repl_user -prepl_user@pass -e "show master status" | awk -F '|' 'NR==2 {print $1}' | awk '{print $2}')
mysql -e "change master to master_host='192.168.194.131', master_user='repl_user', master_password='repl_user@pass', master_log_file='mysqlbin.000001'
, master_log_pos=$POS; start slave;"
touch /etc/my.cnf.d/slave.lock
exit;
else
sleep ;
fi
done
测试脚本

(4)业务与资源分开,配置文件
[root@# localhost /srv/salt/prod/shop-user]# cat mysql-master.sls
include:
- modules.mysql.master master-grant:
cmd.run:
- name: mysql -e "GRANT replication slave,super on *.* to 'repl_user'@'118.190.201.0/255.255.255.0' identified by 'repl_user@pass'"
- unless: mysql -h 192.168.194.131 -ur repl_user -prepl_user@pass -e "exit"
[root@# localhost /srv/salt/prod/shop-user]# cat mysql-slave.sls
include:
- modules.mysql.slave slave-grant:
file.managed:
- name: /tmp/start_slave.sh
- source: salt://shop-user/files/start_slave.sh
- user: root
- group: root
- mode: cmd.run:
- name: /bin/bash /tmp/start_slave.sh
- unless: test -f /etc/my.cnf.d/slave.lock
(5) top.sls
[root@# localhost /srv/salt/base]#
[root@# localhost /srv/salt/base]# cat top.sls
base:
'*':
- init.init-all prod:
'linux-node1.example.com':
- shop-user.mysql-master 'linux-node2.example.com':
- shop-user.mysql-slave
(6)清空数据库
[root@# localhost ~]# cd /var/lib/mysql/
[root@# localhost /var/lib/mysql]# rm -rf *
[root@# localhost /var/lib/mysql]# yum remove mariadb-server
(7)执行测试
个人建议:
Mysql 不放在 topfile
每次手动执行
[root@# localhost ~]# salt '*' state.sls modules.mysql.master saltenv=prod
Salt管理: 自动化安装,自动化配置
Prod整个目录 mysql redis
执行top.file
[root@# localhost ~]# salt '*' state.highstate linux-node2.example.com:
----------
.......省略部分.......
Summary
------------
Succeeded: (changed=)
Failed:
------------
Total states run:
linux-node1.example.com:
----------
.......省略部分.......
Summary
------------
Succeeded: (changed=)
Failed:
------------
Total states run:

6、总结与问题
1、问题
Question1
linux下yum安装时出现Loaded plugins: fastestmirror解决办法
https://blog.51cto.com/12922638/2412602
网络问题,dhcp
Question2


Centos 7
https://www.linuxidc.com/Linux/2018-03/151403.htm
vi /etc/my.cnf.d/server.cnf
Question3
授权失败

Salt用户没有权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'salt'@'%' IDENTIFIED BY PASSWORD '*36F75ABC6D500DFA6E905046FD8BE5E115812DD0' WITH GRANT OPTION;
Query OK, 0 rows affected (0.04 sec)
MariaDB [(none)]> show grants for salt@'%'\G;

###执行时出错
Comment: MySQL Error 1142: SELECT command denied to user 'salt'@'linux-node1' for table 'user'###解决办法:断开minion连接MySQL
[root@linux-node1 ~]# vim /etc/salt/minion
#mysql.host: '118.190.201.11'
#mysql.user: 'salt'
#mysql.pass: 'salt'
#mysql.db: 'salt'
2、心得
架构师:道法术
思路达到了运维架构的标准上
07 saltstack生产实例-mysql主从的更多相关文章
- 06 saltstack生产实例-需求
https://github.com/unixhot/saltbook-code .Cobbler 1.15 统一网卡名 .Zabbix 系统已经安装好了! base .手动实现 .需要使用salt的 ...
- 08 saltstack生产实例-apahce+php+redis
1.apache+php 前几章的LAMP:https://www.cnblogs.com/venicid/p/11276232.html#_label2 Php放在apache 1.目录结构 2.p ...
- 09 saltstack生产实例--Haproxy+keepalived
1.如何理解haproxy+keepalived https://www.cnblogs.com/zs-wei/p/9213961.html HaProxy可以通过监听一个统一的端口对外提供能力,然后 ...
- MySQL多实例,主从同步
由于背景原因,所做的主从同步还是要基于MySQL 5.1的版本,主从同步主要是一个数据库读写访问原来的数据库热度过大,需要做到使用从库对读分压. MySQL主从同步介绍 MySQL 支持单双向 ...
- SaltStack生产案例-服务部署(redis,mysql,apache+php,haproxy+keepalived)
顺序代码资料链接 课上资料.zip 接上篇:SaltStack生产案例-系统初始化 1,redis 主从 2,mysql 主从 2.1 mysql-install.sls (安装 初始化) 2.2 ...
- Windows下多个Mysql实例配置主从(转)
https://www.cnblogs.com/jpfss/p/8143720.html 序: 网上有很多类似的文章,也是各种百度出来的,但是对于多数刚开始接触MYSQL主从的小白来说,网上文 ...
- MySQL主从备份配置实例
转载自:https://www.cnblogs.com/ahaii/p/6307648.html MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0 ...
- Windows下多个Mysql实例配置主从
序: 网上有很多类似的文章,也是各种百度出来的,但是对于多数刚开始接触MYSQL主从的小白来说,网上文章的代码里面很多技术点都没有理解,有跌打误撞碰上的,但多数都是这篇文章卡主了,换篇文章接着 ...
- Mysql数据库-多实例主从复制-主从故障详解
一.mysql结构 1.实例 1.什么是单实例 一个进程 + 多个线程 + 一个预分配的内存空间 2.多实例 多个进程 + 多个线程 + 多个预分配的内存空间 ](http://shelldon.51 ...
随机推荐
- Postfix to Prefix Conversion & Prefix to Postfix Conversion
Postfix to Prefix Conversion Postfix: An expression is called the postfix expression if the operator ...
- VMware虚拟机下安装CentOS 6.10并配置访问外网
VMware安装包以及CentOS 6.5安装包 链接:https://pan.baidu.com/s/1wQi5GSgp4klXhtd84aoMSA 提取码:9l5y 链接:https://pan. ...
- 在ASP.NET Core 2.0中使用Facebook进行身份验证
已经很久没有更新自己的技术博客了,自从上个月末来到天津之后把家安顿好,这个月月初开始找工作,由于以前是做.NET开发的,所以找的还是.NET工作,但是天津这边大多还是针对to B(企业)进行定制开发的 ...
- 新浪随机图片壁纸API接口 刷新网页换背景接口
刷新一次页面换一次图片,可以调用到你的网站背景里面去,多炫酷啊,刷新一下本页看下效果哦. 说明:随机图片壁纸api,调用的是新浪api,速度不用担心,图片资源也很多 电脑动漫图片:http://api ...
- Ruby Rails学习中:调试信息和 Rails 的三种环境,Users 资源,调试器,Gravatar 头像和侧边栏
注册 一.调试信息和 Rails 环境 现在咱们要实现的用户资料页面是我们这个应用中第一个真正意义上的动态页面.虽然视图的代码不会动态改变, 不过每个用户资料页面显示的内容却是从数据库中读取的.添加动 ...
- 网易Java程序员两轮面试,这些问题你能答对几个?
一转眼,2018 年已经过去了,你是否在满意的公司?拿着理想的薪水? 虽然"钱多.事少.离家近"的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难.但是,有些 ...
- Redis-数据结构与对象-对象
1. 作用 Redis使用对象作为五种不同类型的底层实现,字符串,列表,哈希,集合,有序集合等 而对象是基于之前的分析的数据结构创建的.每个对象都至少用到一种数据结构,这意味着,Redis五大类型,底 ...
- luogu P2765 魔术球问题 (最小路径覆盖)
大意:给定n根柱子, 依次放入1,2,3,...的球, 同一根柱子相邻两个球和为完全平方数, 求最多放多少个球. 对和为平方数的点连边, 就相当于求DAG上最小路径覆盖. #include <i ...
- day07 类
一.目录 1.模块 2.包 3.isinstance issubclass type 4.方法和函数 5.反射 6.约束 7.继承 8.特殊成员 9.异常处理 补充知识点 10.hashlib模块 1 ...
- vue2中的keep-alive使用总结及注意事项
问题总结;最近在写vue移动端的项目的时候,当我切换菜单,再切换换回去的时候,发现页面出现闪动的效果,其原因是因为切换回去之后,页面重新渲染了;为了解决这一问题:查阅资料,只需要在 入口文件 App. ...