day32(学习playbook-roles+脚本创建数据库和表+mycat读写分离))

本文主要是介绍day32(学习playbook-roles+脚本创建数据库和表+mycat读写分离)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、

1.roles(角色)介绍

        roles(⻆⾊): 就是通过分别将variables, tasks及handlers等放置于单独 的⽬录中,并可以便捷地调⽤它们的⼀种机制。 
        假设我们要写⼀个playbook来安装管理lamp环境,那么这个 playbook就会写很⻓。所以我们希望把这个很⼤的⽂件分成多个功能 拆分, 分成apache管理,php管理,mysql管理,然后在需要使⽤的时候 直接调⽤就可以了,以免重复写。就类似编程⾥的模块化的概念,以 达到代码复⽤的效果。

2、roles目录介绍

files:⽤来存放由copy模块或script模块调⽤的⽂件。
tasks:⾄少有⼀个main.yml⽂件,定义各tasks。
handlers:有⼀个main.yml⽂件,定义各handlers。
templates:⽤来存放jinjia2模板。
vars:有⼀个main.yml⽂件,定义变量。
meta:有⼀个main.yml⽂件,定义此⻆⾊的特殊设定及其依赖关系。
 

注意: 在每个⻆⾊的⽬录中分别创建files, tasks,handlers,templates,vars和meta⽬录,⽤不到的⽬ 录可以创建为空⽬录。

3、使用roles安装httpd和mysql

(1)创建roles角色基础目录与文件

[root@1 ~]# cd /etc/ansible/roles/
[root@1 roles]# mkdir {httpd,mysql}
[root@1 roles]# mkdir {httpd,mysql}/{tasks,handlers,vars,meta}
[root@1 roles]# touch {httpd,mysql}/{tasks,handlers,vars,meta}/main.yml
[root@1 roles]# tree 
.
├── httpd
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── mysql
   ├── files
   ├── handlers
   │   └── main.yml
   ├── meta
   │   └── main.yml
 ├── tasks
   │   └── main.yml
   ├── templates
   └── vars
       └── main.yml
 

(2)创建playbook调用角色

[root@1 roles]# vim /etc/ansible/playbook/test002.yml
---
- hosts: s
 remote_user: root
 roles:
  - httpd
  - mysql 
[root@1 roles]# cd
[root@1 ~]# vim /etc/ansible/roles/mysql/tasks/main.yml 
---
- name: 卸载mysql
 yum: name=mysql state=absent
- name: 安装mysql
 yum: name=mysql state=present
[root@1 ~]# vim /etc/ansible/roles/httpd/tasks/main.yml
---
- name: 卸载httpd
 yum: name=httpd state=absent
- name: 安装httpd
 yum: name=httpd state=present
- name: 启动httpd
  service: name=httpd state=started enabled=yes
[root@1 ~]# ansible-playbook /etc/ansible/playbook/test002.yml 
 

4、练习:使用role来实现lnmp

1、nginx改配置8080
2、mariadb中创建eleme数据库
3、创建表 t_user

(1)使用剧本修改nginx的端口号为80

[root@m0 ~]# vim /etc/ansible/playbook/nginx.yml
---
- hosts: s
 remote_user: root
 tasks:
- name: 卸载httpd
   yum: name=httpd   state=absent
  - name: 安装nginx
   yum: name=nginx   state=present
  - name: 修改资源文件
   shell: echo 'i am nginx,port is 80' > /usr/share/nginx/html/index.html
  - name: 修改端口
   command: sed -i '/listen/ s/80/8080/g' /etc/nginx/nginx.conf
   notify:
  - restart nginx
  - name: 启动服务
    service: name=nginx   state=started  enabled=yes
 handlers:
  - name: restart nginx
    service: name=nginx   state=restarted
 ...
[root@m0 ~]# ansible-playbook /etc/ansible/playbook/nginx.yml
 

(2)安装mariadb,命令行形式创建数据库和表

[root@1 ~]# yum -y remove *mariadb*
[root@1 ~]# yum -y install mariadb
[root@1 ~]# yum -y install mariadb-server.x86_64 
[root@1 ~]# yum -y install mariadb-devel.x86_64 
[root@1 ~]# systemctl start mariadb
[root@1 ~]# mysql
MariaDB [(none)]> quit
Bye
[root@1 ~]# mysql << EOF
> create database if not exists eleme charset utf8mb4;
> use eleme;
> create table user(id int primary key auto_increment,username varchar(45) 
not null,password varchar(45) not null,remark varchar(45));
> quit
> EOF
[root@1 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| eleme             |
| mysql             |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [test]> use eleme;
Database changed
MariaDB [eleme]> show tables;
+-----------------+
| Tables_in_eleme |
+-----------------+
| user           |
+-----------------+
1 row in set (0.00 sec)

(3)使用roles安装mariadb并执行脚本创建数据库和表

[root@1 ~]# cd /etc/ansible/roles/
[root@1 roles]# cp -r httpd mariadb
[root@1 roles]# cd mariadb/
[root@1 mariadb]# ls
files handlers meta tasks templates vars
[root@1 mariadb]# vim tasks/main.yml 
---
- name: 卸载mariadb
 yum: name=mariadb,mariadb-server,mariadb-devel state=absent
- name: 安装mariadb
 yum: name=mariadb,mariadb-server,mariadb-devel state=present
- name: 启动mariadb
  service: name=mariadb state=started enabled=yes
- name: 执行脚本,创建数据库和数据表
 script: /etc/ansible/script/dbtable.sh
[root@1 mariadb]# cd /etc/ansible/
[root@1 ansible]# mkdir script
[root@1 ansible]# cd script/
[root@1 script]# vim dbtable.sh
#!/bin/bash
mysql << EOF
create database if not exists eleme charset utf8mb4;
use eleme;
create table t_user(
id int primary key auto_increment,
username varchar(45) not null,
password varchar(45) not null,
remark varchar(45) 
);
quit
EOF
[root@1 script]# vim /etc/ansible/playbook/test003.yml
---
- hosts: s
 remote_user: root
 roles:
  - mariadb
[root@1 script]# cd /etc/ansible/playbook/
[root@1 playbook]# ansible-playbook test003.yml 
 

二、

配置⼀主⼆从的mysql服务器 mysql57

1.mysql服务器端⼝3306,不要关闭防⽕墙

# 主从配置
[root@mysql57 ~]# firewall-cmd --permanent --add-port=3306/tcp 
success
[root@mysql57 ~]# firewall-cmd --reload 
 

success
[root@mysql57 ~]# firewall-cmd --list-ports 
3306/tcp
96 yum -y install lrzsz
66 tar -zxf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 
67  cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql
68  mkdir /usr/local/mysql/mysql-files
69 useradd -r -s /sbin/nologin mysql
70  chown mysql:mysql /usr/local/mysql/mysql-files/
71  chmod 750 /usr/local/mysql/mysql-files/
72  rm -rf /etc/my.cnf
# 主配置
73 /usr/local/mysql/bin/mysqld --initialize --user=mysql --
basedir=/usr/local/mysql
74 /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
76  cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql57
77  service mysql57 start
79  sed -i '$aexport PATH=/usr/local/mysql/bin:$PATH' /etc/profile
80  source /etc/profile
vim /usr/local/mysql/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
activate_all_roles_on_login=on
port=3306
log-error=/usr/local/mysql/data/db01-master.err
log-bin=/usr/local/mysql/data/binlog
server-id=10
character_set_server=utf8mb4
service mysql57 restart
81 mysql -p'zc0fLfoM%SDP'
 mysql> alter user 'root'@'localhost' identified by '123';
 Query OK, 0 rows affected (0.15 sec)     //修改root密码
 mysql> create user 'slave0'@'%' identified by '123';
 Query OK, 0 rows affected (0.03 sec)     //创建slave用户
 mysql> grant replication slave on *.* to 'slave0'@'%';
 Query OK, 0 rows affected (0.02 sec)     //授予replication slave权限
 mysql> flush privileges;                 //重新加载权限表
 Query OK, 0 rows affected (0.00 sec)
 mysql> flush tables with read lock;       //刷新所有表并施加一个全局读锁
 Query OK, 0 rows affected (0.01 sec)
 mysql> show master status;               //查看主服务器当前二进制日志的状态信息
 +---------------+----------+--------------+------------------+--------------
-----+
 | File         | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
Executed_Gtid_Set |
 +---------------+----------+--------------+------------------+--------------
-----+
 | binlog.000003 |     1178 |             |                 |               
    |
 +---------------+----------+--------------+------------------+--------------
-----+
 1 row in set (0.00 sec)
 rm -rf /usr/local/mysql/data/auto.cnf
 rsync -av /usr/local/mysql/data root@10.0.0.58:/usr/local/mysql/
rsync -av /usr/local/mysql/data root@10.0.0.59:/usr/local/mysql/
# 从配置
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql57
service mysql57 start
sed -i '$aexport PATH=/usr/local/mysql/bin:$PATH' /etc/profile
source /etc/profile
vim /usr/local/mysql/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
activate_all_roles_on_login=on
port=3310
log-error=/usr/local/mysql/data/db01-slave.err
relay-log=/usr/local/mysql/data/relaylog
server-id=11
character_set_server=utf8mb4
service mysql57 restart
mysql -p'123'
mysql> change master to
     -> master_host='10.0.0.57',
     -> master_user='slave0',
     -> master_password='123',
     -> master_port=3306,
     -> master_log_file='binlog.000003',
     -> master_log_pos=1178;
 Query OK, 0 rows affected, 9 warnings (0.02 sec)
 mysql> start slave;
 Query OK, 0 rows affected, 1 warning (0.03 sec)
 mysql> show slave status\G
 *************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                   Master_Host: 10.0.0.57
                   Master_User: slave
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: binlog.000003
           Read_Master_Log_Pos: 1178
               Relay_Log_File: relaylog.000002
                 Relay_Log_Pos: 323
         Relay_Master_Log_File: binlog.000003
             Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
 

2.在mysql中添加eleme数据库设置为utf8mb4

[root@mysql57 ~]# mysql -p'123'
mysql> create database if not exists eleme charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| eleme             |
| mysql             |
| performance_schema |
| sys               |
+--------------------+
6 rows in set (0.00 sec)
 

3.添加表t_user

mysql> create table eleme.t_user(
    -> id int not null primary key,
    -> name varchar(32) not null,
    -> username varchar(32) not null,
    -> password varchar(32) not null,
    -> remark varchar(32) not null
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql> desc eleme.t_user;
+----------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL   |       |
| name     | varchar(32) | NO   |     | NULL   |       |
| username | varchar(32) | NO   |     | NULL   |       |
| password | varchar(32) | NO   |     | NULL   |       |
| remark   | varchar(32) | NO   |     | NULL   |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
 

4.添加2⾏记录

mysql> insert into eleme.t_user values(1,'超级管理员','admin','admin','超级管理
员'),(2,'普通用户','guest','guest','普通用户');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from eleme.t_user;
+----+-----------------+----------+----------+-----------------+
| id | name           | username | password | remark         |
+----+-----------------+----------+----------+-----------------+
|  1 | 超级管理员     | admin   | admin   | 超级管理员     |
|  2 | 普通用户       | guest   | guest   | 普通用户       |
+----+-----------------+----------+----------+-----------------+
2 rows in set (0.00 sec)
 

5.使⽤mycat为3台数据库设置负载均衡(读写分离)

[root@mycat ~]# systemctl stop firewalld
[root@mycat ~]# systemctl disable firewalld
[root@mycat ~]# ls
anaconda-ks.cfg             Mycat-server-1.6.5-release-20180122220033-
linux.tar.gz
jdk-8u192-linux-x64.tar.gz v
[root@mycat ~]# tar -xf jdk-8u192-linux-x64.tar.gz 
[root@mycat ~]# tar -xf Mycat-server-1.6.5-release-20180122220033-
linux.tar.gz 
[root@mycat ~]# cp -r jdk1.8.0_192/ /usr/local/jdk
[root@mycat ~]# cp -r mycat/ /usr/local/
[root@mycat ~]# ls /usr/local/jdk/
bin             lib         src.zip
COPYRIGHT       LICENSE     THIRDPARTYLICENSEREADME-JAVAFX.txt
include         man         THIRDPARTYLICENSEREADME.txt
javafx-src.zip README.html
jre             release
[root@mycat ~]# sed -i '$aexport JAVA_HOME=/usr/local/jdk' /etc/profile
[root@mycat ~]# source /etc/profile
[root@mycat ~]# $JAVA_HOME
-bash: /usr/local/jdk: 是一个目录
[root@mycat ~]# sed -i '$aexport PATH=$PATH:$JAVA_HOME/bin' /etc/profile
[root@mycat ~]# source /etc/profile
[root@mycat ~]# $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk/bin: 
没有那个文件或目录
[root@mycat ~]# javac -version 
javac 1.8.0_192
[root@mycat ~]# ls /usr/local/mycat/
bin catlet conf lib logs version.txt
[root@mycat ~]# ll /usr/local/mycat/
总用量 12
drwxr-xr-x. 2 root root  190 8月  15 15:19 bin
drwxr-xr-x. 2 root root    6 8月  15 15:19 catlet
drwxr-xr-x. 4 root root 4096 8月  15 15:19 conf
drwxr-xr-x. 2 root root 4096 8月  15 15:19 lib
drwxr-xr-x. 2 root root    6 8月  15 15:19 logs
-rwxr-xr-x. 1 root root  219 8月  15 15:19 version.txt
[root@mycat ~]# ls /usr/local/mycat/bin/mycat      
[root@mycat ~]# vim /usr/local/mycat/conf/server.xml
       <user name="li" defaultAccount="true">
               <property name="password">li</property>
               <property name="schemas">eleme</property>
               <!-- 表级 DML 权限设置 -->
               <!--            
               <privileges check="false">
                       <schema name="TESTDB" dml="0110" >
                               <table name="tb01" dml="0000"></table>
                               <table name="tb02" dml="1111"></table>
                       </schema>
               </privileges>           
                 -->
       </user>
<!--
       <user name="user">
               <property name="password">user</property>
               <property name="schemas">TESTDB</property>
               <property name="readOnly">true</property>
       </user>
-->
[root@mycat ~]# vim /usr/local/mycat/conf/schema.xml

[root@mycat ~]# /usr/local/mycat/bin/mycat start
Starting Mycat-server...
[root@mycat ~]# netstat -lnput | grep 8066
tcp6       0     0 :::8066                 :::*                   LISTEN     
1336/java      

6、配置静态资源服务器,为前段提供图⽚和视频
7、部署2台有java17.0.3环境的后端服务器,端⼝8080,不关防⽕墙 
8、部署nginx代理java服务器,负载均衡策略为轮询问,端⼝为80
 

这篇关于day32(学习playbook-roles+脚本创建数据库和表+mycat读写分离))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096141

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]