欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 8.21 学习playbook-roles,脚本创建数据库和表,mycat读写分离

8.21 学习playbook-roles,脚本创建数据库和表,mycat读写分离

2024/11/30 12:48:33 来源:https://blog.csdn.net/2301_79993321/article/details/141415029  浏览:    关键词:8.21 学习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@mo ~]# cd /etc/ansible/roles/

 [root@mo roles]# mkdir {httpd,mysql}

 [root@mo roles]# mkdir {httpd,mysql}/{tasks,handlers,vars,meta}

 [root@mo roles]# touch {httpd,mysql}/{tasks,handlers,vars,meta}/main.yml

 [root@mo 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@mo roles]# vim /etc/ansible/playbook/test002.yml

 ---

 - hosts: s

   remote_user: root

   roles:

   - httpd

   - mysql

 [root@mo roles]# cd

 [root@mo ~]# vim /etc/ansible/roles/mysql/tasks/main.yml

 ---

 - name: 卸载mysql

   yum: name=mysql state=absent

 - name: 安装mysql

   yum: name=mysql state=present

 [root@mo ~]# 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@mo ~]# ansible-playbook /etc/ansible/playbook/test002.yml

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

1、nginx改配置8080

2、mariadb中创建eleme数据库

3、创建表 t_user

id int 主键约束,自增 编号

username varchar 非空约束 账号

password varchar 非空约束 密码

remark varchar 没有约束 账号权限说明

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@mo ~]# yum -y remove *mariadb*

 [root@mo ~]# yum -y install mariadb

 [root@mo ~]# yum -y install mariadb-server.x86_64

 [root@mo ~]# yum -y install mariadb-devel.x86_64

 [root@mo ~]# systemctl start mariadb

 [root@mo ~]# mysql

 MariaDB [(none)]> quit

 Bye

 [root@mo ~]# 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@mo ~]# 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@mo ~]# cd /etc/ansible/roles/

 [root@mo roles]# cp -r httpd mariadb

 [root@mo roles]# cd mariadb/

 [root@mo mariadb]# ls

 files  handlers  meta  tasks  templates  vars

 [root@mo 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@mo mariadb]# cd /etc/ansible/

 [root@mo ansible]# mkdir script

 [root@mo ansible]# cd script/

 [root@mo 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@mo script]# vim /etc/ansible/playbook/test003.yml

 ---

 - hosts: s

   remote_user: root

   roles:

   - mariadb

 [root@mo script]# cd /etc/ansible/playbook/

 [root@mo 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@mo0.0.0.58:/usr/local/mysql/

  rsync -av /usr/local/mysql/data root@mo0.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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com