转载:https://www.cnblogs.com/haloujava/p/16633245.html
工具:
准备工作
主机信息
IP 名称 角色
192.168.114.133 node1 master
192.168.114.134 node2 slave
192.168.114.135 node3 slave
安装ansible
Ansible 是一个自动化运维管理的工具, 可以支持同时管理多台节点,ansible playbook 支持 编写 yml 格式的配置,来管理多个主机节点。
ansible软件 不需要每个节点都安装, 只需要指定其中一个节点作为管理节点即可,在此示例中,我们选择 node1 作为我们的管理节点来安装ansible
自动化安装脚本
脚本安装ansible
脚本配置免密登录
配置免密登录 首先需要每个服务器的密码, 这里我们三个主机的密码 统一设置成相同密码 配置在文件 ssh_password中
解析 config.ini
配置文件 config.ini
[ssh_password]
halou
[mysql]
192.168.114.133 master
192.168.114.134 slave
192.168.114.135 slave
脚本 auto_install_ansible.sh
#!/bin/bash
#auto insall ansible
#自动化安装ansible软件
CUR_PATH=$(readlink -f $(dirname $0))
#打印日志
function result_echo
{
if [ $? -eq 0 ]; then
echo "$1" | tee -a $CUR_PATH/log.log
else
echo "$2" | tee -a $CUR_PATH/log.log
exit 1
fi
}
HOST_LIST=`sed -n '/\[mysql\]/,/\[.*\]/p' ./config.ini | grep -v "\[.*\]" | grep -v ^$ | grep -v ^# | awk '{print $1}'`
SSH_PASSWORD=`sed -n '/\[ssh_password\]/,/\[.*\]/p' ./config.ini | grep -v "\[.*\]" | grep -v ^$ | grep -v ^# `
yum repolist | grep epel &> /dev/null
if [ $? -ne 0 ];then
yum install epel-release -y
yum makecache
fi
yum install sshpass ansible -y
#生成秘钥,并发送给各个节点执行
echo -e "y\n" | ssh-keygen -t rsa -q -N "" -f ~/.ssh/id_rsa
for host in $HOST_LIST;do
sshpass -p$SSH_PASSWORD ssh-copy-id -o StrictHostKeyChecking=no root@$host &> /dev/null
ssh -o StrictHostKeyChecking=no root@$host 'ls -al' &> /dev/null
result_echo "Ok... No password login is success" "Failed...Use no password login failed, please check!!!"
done
安装 mariadb
使用ansible-playbook 编写安装脚本 yaml
注意事项
自定义主机操作列表 hosts 文件
[mariadb_hosts]
192.168.114.133 server_id='1' mysql_role=master
192.168.114.134 server_id='2' mysql_role=salve
192.168.114.135 server_id='3' mysql_role=salve
定义需要应用的变量,位置 根目录/group_vars/all.yml
MYSQL_DATA_DIR: /www/mysql/data_dir
MASTER_IP: 192.168.114.133
安装脚本主题 auto_install_mariadb.yml
- hosts: mariadb_hosts
tasks:
- name: "if repo list exists"
shell: "yum repolist | grep epel &> /dev/null"
register: repolist_result
failed_when: false
when: mysql_role == "master"
- name: "install epel_release"
shell: " yum install epel-release -y"
when:
- mysql_role == "master"
- repolist_result.rc != 0
- name: "stop firewalld"
shell: systemctl stop firewalld && systemctl disable firewalld
- name: setenforce zero
shell: getenforce | grep Disabled &> /dev/null || setenforce 0
- name: stop SeLinux
lineinfile: path=/etc/sysconfig/selinux regexp="^SELINUX=" line="SELINUX=disabled"
- name: delete data dir if exists
shell: "rm -rf {{ MYSQL_DATA_DIR }}"
- name: mkdir data dir
shell: "[[ -d {{ MYSQL_DATA_DIR }} ]] || mkdir -p {{ MYSQL_DATA_DIR }}"
- name: yum install mariadb
shell: yum install mariadb mariadb-server -y
- name: set datadir
lineinfile: path=/etc/my.cnf regexp="^datadir" line="datadir={{ MYSQL_DATA_DIR }}" insertafter="\[mysqld\]"
- name: server_id
lineinfile: path=/etc/my.cnf line="server_id={{ server_id }}" insertafter="\[mysqld\]"
- name: set master
lineinfile: path=/etc/my.cnf regexp="^log-bin" line="log-bin=master-bin" insertafter="^\[mysqld\]"
when: mysql_role == "master"
- name: set slave
lineinfile: path=/etc/my.cnf line="relay-log=slave-log" insertafter="^\[mysqld\]"
when: mysql_role == "salve"
- name: chown mysql dir
shell: chown -R mysql:mysql {{ MYSQL_DATA_DIR }}
- name: restart mariadb
shell: systemctl restart mariadb
- name: grant slave user
shell: mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'demo_pass'"
when: mysql_role == "master"
- name: master bin log name
shell: "mysql -e \"show master status\\G;\" | grep File | awk -F: '{print $2}' | awk '{gsub(/^\\s+|\\s+$/, \"\");print}' > ~/master_name"
when: mysql_role == "master"
- name: master bin position
shell: "mysql -e \"show master status\\G;\" | grep Position | awk -F: {'print $2'} | awk '{gsub(/^\\s+|\\s+$/, \"\");print}' > ~/postion_name"
when: mysql_role == "master"
- name: copy master name
ansible.builtin.copy:
src: ~/master_name
dest: ~/master_name
- name: copy postion
ansible.builtin.copy:
src: ~/postion_name
dest: ~/postion_name
- name: cat master name
shell: cat ~/master_name
register: master_name
- name: cat postion
shell: cat ~/postion_name
register: master_postion
- name: reset slave
shell: mysql -e "reset slave "
when: mysql_role == "salve"
- name: change master
shell: mysql -e "CHANGE MASTER TO master_host='{{ MASTER_IP }}', master_user='slave_user', master_password='demo_pass', master_log_file='{{ master_name.stdout }}',master_log_pos={{ master_postion.stdout }} "
when: mysql_role == "salve"
- name: start slave
shell: mysql -e "start slave "
when: mysql_role == "salve"
执行
ansible-playbook -i hosts auto_install_mariadb.yml
参考资料:
https://github.com/ansible/ansible-examples/blob/master/mongodb/playbooks/testsharding.yml 【ansible 安装mongodb示例】
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html 【ansible 变量引用】
https://www.cnblogs.com/haloujava/p/16561883.html 【一键安装Mysql并配置主从复制】
请关于一下啦^_^
微信公众号
好文要顶 关注我 收藏该文
指尖,写不尽
粉丝 - 3 关注 - 11
+加关注
00
« 上一篇: Mysql的逻辑架构
» 下一篇: Explain-SQL语句分析
posted on 2022-08-28 17:49 指尖,写不尽 阅读(437) 评论(0) 编辑 收藏 举报
刷新评论刷新页面返回顶部
登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页
【推荐】园子的商业化努力-AI人才服务:招募AI导师,一起探索AI领域的机会
【推荐】中国云计算领导者:阿里云轻量应用服务器2核2G低至108元/年
【推荐】第五届金蝶云苍穹低代码开发大赛正式启动,百万奖金等你拿!
编辑推荐:
· 我的内存去哪了?
· 如何让 Task 在非线程池线程中执行?
· 秒杀系统常见问题—库存超卖
· 现代 CSS 解决方案:CSS 原生支持的三角函数
· Three.js 进阶之旅:滚动控制模型动画和相机动画
即构专区:
· ZEGO全新语音聊天室方案,2小时复刻 Clubhouse
· 服务网格是什么意思?服务网格的实践探索
· 直播预告 | 社交新纪元,共探元宇宙社交新体验
· 音视频开发进阶|第七讲:分辨率与帧率·上篇
· 即构携手智能对讲机品牌Runbo,打造可视化对讲通信系统
导航
博客园
首页
新随笔
联系
订阅 订阅
管理
公告
昵称: 指尖,写不尽
园龄: 9年5个月
粉丝: 3
关注: 11
+加关注
< 2023年5月 >
日 一 二 三 四 五 六
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10
统计
随笔 - 35
文章 - 0
评论 - 2
阅读 - 70277
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔分类
css(1)
随笔档案
2023年5月(1)
2022年9月(1)
2022年8月(3)
2022年7月(2)
2021年3月(1)
2021年1月(1)
2020年9月(2)
2020年8月(4)
2020年7月(2)
2020年1月(2)
2019年12月(5)
2019年11月(1)
2019年10月(3)
2019年9月(1)
2019年8月(2)
更多
阅读排行榜
1. Mysql 如何创建一张临时表(34669)
2. mysql 导入sql文件的几种形式(7336)
3. 如何解决android 通知栏不显示的问题(5595)
4. Mysql 查看表结构(4918)
5. mysql 日期处理函数(4385)
评论排行榜
1. 常用正则表达式(2)
推荐排行榜
1. Mycat 安装(1)
最新评论
1. Re:常用正则表达式
移动:134 135 136 137 138 139 147 150 151 152 157 158 159 178 182 183 184 187 188 198联通:130 131 132 145...
--牛盾007
2. Re:常用正则表达式
匹配手机号码不包括199 170等新号段'/^(0|86|17951)?(13[0-9]|15[012356789]|16[6]|19[89]|17[01345678]|18[0-9]|14[579]...
--牛盾007
Powered by:
博客园
Copyright © 2023 指尖,写不尽
Powered by .NET 7.0 on Kubernetes




