离线安装Mysql8 Centos7

  • 到mysql官网(https://dev.mysql.com/downloads/mysql/)下载 linux 版本
  • 查看系统中是否存的mariadb
    > rpm -qa | grep mariadb
    rpm -e --nodeps mariadb-xxxxx.x86_64
  • 解压mysql并且移动
    > mv mysql-xxxx /opt/mysql8.0
  • 创建mysql用户和组:
    > groupadd mysql
    useradd -g mysql mysql
    passwd mysql
  • 创建数据库的数据目录、日志目录和临时目录
    > mkdir /opt/mysql8.0/data
    mkdir /opt/mysql8.0/log
    mkdir /opt/mysql8.0/tmp
  • 将mysql目录及子目录的所属用户及组都设置为mysql
    > chown -R mysql:mysql /opt/mysql8.0
  • 在etc目录下创建my.cnf配置文件
    > [client]
    port = 3306
    socket = /opt/mysql8.0/tmp/mysql.sock
    [mysqld]
    port = 3306
    basedir = /opt/mysql8.0
    datadir = /opt/mysql8.0/data
    tmpdir = /opt/mysql8.0/tmp
    socket = /opt/mysql8.0/tmp/mysql.sock
    pid-file = /opt/mysql8.0/log/mysql.pid
    log_error = /opt/mysql8.0/log/error.log
    slow_query_log_file = /opt/mysql8.0/log/slow.log
  • 初始化数据库
    > /opt/mysql8.0/bin/mysqld --initialize --user=mysql
  • 设置开机自启动mysql服务
    > cp /opt/mysql8.0/support-files/mysql.server /etc/rc.d/init.d/mysqld
    chmod +x /etc/rc.d/init.d/mysqld
    chkconfig --add mysqld
  • 切换mysql用户并且启动mysql
    > su mysql
    service mysqld start
  • 获取初始密码
    > log/error.log里
  • mysql -u root -p 登录修改密码
    > use mysql
    select host, user, authentication_string, plugin from user;
    alter user 'root'@'localhost'IDENTIFIED BY 'newpassword';
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root@123';
  • 忘记秘密,重置
    skip-grant-tables
    1) use mysql;
    2) update user set authentication_string='' where user='root';// 如果这个字段有值,先置为空,之前的版本密码字段是password
    3) flush privileges;// 刷新权限表
    4) 执行select user,host from user;// 查看用户及host,方便后续修改
    5) ALTER user 'root'@'%' IDENTIFIED BY 'root@123';// 修改root 密码
    6) exit;//退出mysql

jenkins 通过 linux expect 实现自动部署

文件拷贝/dir_cp.sh

!/usr/bin/expect

set timeout 30
set host [lindex $argv 2]
set username [lindex $argv 1]
set passwd [lindex $argv 4]
set file [lindex $argv 0]
set targertDir [lindex $argv 3]
spawn scp -r $file $username@$host:$targertDir
expect "*password:"
send "$passwd\r"
expect eof

jar包执行/exec_jar.sh

!/usr/bin/expect

log_file /tmp/expect.log
set timeout 30
set username [lindex $argv 0]
set host [lindex $argv 1]
set passwd [lindex $argv 2]
set jarPath [lindex $argv 3]
spawn ssh $username@$host
expect "*password:"
send "$passwd\r"
expect "#"
send "cd $jarPath\r"
expect "#"
send "sh restart.sh\r"
expect "#"
send "exit\r"
expect eof

git拉取代码/git_pull.sh

!/usr/bin/expect

set timeout 30
set username [lindex $argv 2]
set passwd [lindex $argv 3]
set targertDir [lindex $argv 0]
set branch [lindex $argv 1]
cd $targertDir
spawn git pull origin $branch
expect "Username"
send "$username\r"
expect "Password"
send "$passwd\r"
expect eof

暂停查看jar是否已启动/pause.sh

!/bin/bash

port=$1
host=$2
code=000
while [ ${code} != '200' ]
do
code=`curl --connect-timeout 1 -m 2 -s -w "%{http_code}" "$host:$port/healthCheck" -o /dev/null`
echo ${code}
sleep 1s
done

python spark streaming kafka – spark submit 提交

python spark streaming kafka - spark submit 提交

第一步

安装 kafka(略)

我使用的CDH安装的kafka (CDH 6.2)

第二步:kafka验证,网络连通验证

kafka 集群消费者,生产者验证是否有效。

生产者

kafka-console-producer --broker-list example.cn-north-1.compute.amazonaws.com.cn:9092 --topic my-topic

消费者

kafka-console-consumer  --bootstrap-server example.cn-north-1.compute.amazonaws.com.cn:9092  --topic my-topic --from-beginning

本地验证端口是否可用 telnet example.cn-north-1.compute.amazonaws.com.cn 9092

kafka开启外网访问

第三步:本地代码测试

consumer.py

from kafka import KafkaConsumer

# connect to Kafka server and pass the topic we want to consume
consumer = KafkaConsumer('my-topic', bootstrap_servers=['example.cn-north-1.compute.amazonaws.com.cn:9092'])

for msg in consumer:
    print(msg)

producer.py

import time

from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers=['example.cn-north-1.compute.amazonaws.com.cn:9092'])
# Assign a topic
topic = 'my-topic'

def test():
    print('begin')
    n = 1
    while n <= 100:
        producer.send(topic, str(n).encode('utf-8'))
        print("send" + str(n))
        n += 1
        time.sleep(1)
    print('done')


if __name__ == '__main__':
    test()

第四步:本地Spark Streaming 调用kafka

spark-streaming-consumer.py(createStream)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils


class KafkaMessageParse:

    def extractFromKafka(self, kafkainfo):
        print(kafkainfo)
        if type(kafkainfo) is tuple and len(kafkainfo) == 2:
            return kafkainfo[1]


if __name__ == '__main__':
    zkQuorum = 'ip-1:2181,ip-2:2181,ip-3:2181'
    groupid = "rokid-trace-rt1"
    appName = "SparkStreamingKafka"
    timecell = 5 #5秒获取一次kafka消息
    sc = SparkContext(appName=appName)
    ssc = StreamingContext(sc, timecell)
    kvs = KafkaUtils.createStream(ssc, zkQuorum, groupid, {"my-topic": 1})
    kmp = KafkaMessageParse()
    lines = kvs.map(lambda x: kmp.extractFromKafka(x))
    lines.pprint()
    ssc.start()
    ssc.awaitTermination()

低阶API spark-streaming-consumer.py(createDirectStream)

// todo 待补充

本地spark-submit

$SPARK_HOME/bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.4.0 client data/spark-streaming-kafka.py

CDH 环境spark-submit

! 注意安装响应包pip install xx

client mode

$SPARK_HOME/bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.4.0 --master yarn --deploy-mode client kafka.py

cluster mode

$SPARK_HOME/bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.4.0 --master yarn --deploy-mode cluster /root/test-python/t-kafka.py

注意:cluster是不会返回控制台日志,具体执行是否成功,需要自己验证

高阶API createStream kakfa 数据丢失场景

猜想一:kafka 消费者获取到数据,但是在处理过程中程序意外退出或down掉。

结果:数据丢失,消费场景无法回滚。

解决方案1:开启StorageLevel.MEMORY_AND_DISK,并且程序最后加上ssc.stop(True, True)。

解决方案2:使用低阶API,自己控制kafka的offset。

备注:这种方式知识在程序退出时可以保证数据不丢失,但是机器断电之类的错误还是会发生数据丢失(不可预知的事情)。

Kerberos介绍和安装

简介

Kerberos认证机制

Kerberos是一种网络认证协议,在非安全网络通信环境下,服务器使用Kerberos以安全的方式向另一个服务器证明其身份。

Kerberos的核心是密钥分发中心(KDC),由两个相互独立的逻辑部件:认证服务器(Authentication Server)和票据授权服务器(Ticket Granting Service)。Kerberos持有一个记载每个Kerberos用户的密钥数据库,而且每个密钥只有相对应的Kerberos用户和KDC知道。两个实体通讯,KDC会为他们产生一个临时会话密钥,将其交互信息进行加密。

Kerberos协议流程
  1. 用户向认证服务器AS请求一个票据和密钥,该票据于密钥的作用是与TGS进行会话
  2. AS查询该请求用户的唯一标识是否在数据库中,若存在,生成一个会话密钥,用于客户端与TGS会话,并使用C-AS会话密钥进行加密,同时生成用户访问TGS时的票据许可TGT
  3. 用户通过解密AS的返回信息后获得与TGS会话的密钥,随后向TGS发起请求,并发送会话密钥与票据许可
  4. TGS收到请求后利用会话密钥进行解密,并验证用户身份,回发消息
  5. 用户将返回的信息解密,获得与应用服务器进行会话的密钥,向远端的应用服务器发起请求,提交许可票据
  6. 应用服务器收到用户请求,认证其许可票据信息,与此同时用户收到应用系统的返回信息,验证其是否合法,从而对远端服务器进行身份确认

KDC-SERVR环境搭建(都在root帐号下操作-ubuntu.16)

进入Master机器,执行以下命令:

apt-get install krb5-admin-server krb5-kdc

  • krb5-admin-server: kdc管理员程序,可以让使用者远程管理kdc数据库
  • krb5-kdc: kdc主程序
  • krb5-user: Kerberos的客户端命令,对于ticket的操作等

输入realm,自定义


输入kdcserver所在机器的hostname

初始化超级管理员密码,输入kadmin.local,没有报错,表示安装成功。

kdb5_util create -r SC.COM -s

修改KDC默认配置

查看/etc/krb5.conf,确认配置没问题

启动服务

KDC-CLIENT环境搭建(都在root帐号下操作-ubuntu.16)

apt-get install krb5-user


验证安装成功

回到kdc-serve机器,添加用户。

回到kdc-client,验证用户

keytab的作用

进入kdc-server kadmin.local,为kdc-client添加密钥keytab

拷贝到client机器上

回到client,新增hdfs帐号,确认hdfs.keytab是hdfs用户可以访问的,输入命令kinit加载密钥。klist查看。

CDH 介绍和搭建过程(离线安装)

什么是CDH(Cloudera's Distribution, including Apache Hadoop)

CDH hadoop体系搭建脚手架,集成了体系的众多组件,如:Flume、Hbase、Hiv、Hdfs等
Cloudera Management:
Cloudera Manager是一个拥有集群自动化安装、中心化管理、集群监控、报警功能的一个工具(软件),使得安装集群从几天的时间缩短在几个小时内,运维人员从数十人降低到几人以内,极大的提高集群管理的效率。
cloudera manager有四大功能:
  (1)管理:对集群进行管理,如添加、删除节点等操作。
  (2)监控:监控集群的健康情况,对设置的各种指标和系统运行情况进行全面监控。
  (3)诊断:对集群出现的问题进行诊断,对出现的问题给出建议解决方案。
  (4)集成:对hadoop的多组件进行整合。

CDH安装

在线安装不考虑,不过,如果你的网速够快,对外网的网速也够快,就可以用在线安装的方式。
下面说说离线安装的事情。
在说安装之前我们先了解下CDH的几个安装必须的文件:

CDH-5.7.1-1.cdh5.7.1.p0.11-el5.parcel.sha1
CDH-5.7.1-1.cdh5.7.1.p0.11-el6.parcel

版本号在el5上。el标识红帽子一系列的linux系统。安装时候注意自己系统,不要下错对应版本。

manifest.json

存储了其他组件版本信息

CDH 环境检查

java 环境:集群的每台机器都需要安装java环境。注意:jdk版本号必须和CDH版本号对应上。意思是,CDH每个版本都有对应的jdk版本号,不能台新也不能太久。当jdk版本号错误会出现一些奇怪的问题。

MySql Cluster 测试结果

安装步骤->安装步骤
查看错误->错误集锦
节点作用->节点作用
测试结果->测试结果

性能测试

测试环境搭建:

Mysql Cluster 管理节点1个,Sql节点2个,数据节点2个。搭建过程见安装步骤。这里不再赘述。
测试表准备:

CREATE DATABASE IF NOT EXISTS testdb;
DROP TABLE IF EXISTS student;
CREATE TABLE IF NOT EXISTS student (
  UUID         VARCHAR(50) NOT NULL,
  name         VARCHAR(25) NOT NULL,
  age          INT(3)      NOT NULL,
  gentle       INT(1)      NOT NULL,
  province     VARCHAR(5)  NOT NULL,
  post_code    VARCHAR(10) NOT NULL,
  school_code  VARCHAR(2)  NOT NULL,
  school_level VARCHAR(8)  NOT NULL,
  class        VARCHAR(10) NOT NULL,
  create_ts    TIMESTAMP   NOT NULL DEFAULT now(),
  PRIMARY KEY (UUID),
  INDEX (create_ts)
)
  ENGINE = NDBCLUSTER;

DROP TABLE IF EXISTS `order`;
CREATE TABLE IF NOT EXISTS `order` (
  UUID      VARCHAR(50) NOT NULL,
  stu_uuid  VARCHAR(50) NOT NULL,
  is_pay    BOOLEAN     NOT NULL,
  money     BIGINT      NOT NULL,
  create_ts TIMESTAMP   NOT NULL DEFAULT now(),
  PRIMARY KEY (UUID),
  INDEX (create_ts)
)
  ENGINE = NDBCLUSTER;

测试过程及详情:

我们安装jemeter测试工具,用于发送请求。并且用二维折线图来展示测试关系。先测试单节点情况。
SQL插入测试:

INSERT INTO testdb。student (UUID,name,age,gentle,province,post_code, school_code,school_level, class,create_ts) VALUES (UUID(),'zs',77,1,'JX', '400000','21','middle','A99','2018-05-22 11:35:33');

通过测试得到下图:

上图的x轴是jemeter测试工具的并发量,X坐标代表并发量。Y代表时间,或者数量。淡蓝的线代表吞吐量,单位是K,深蓝是代表平均响应时间,单位ms。
根据公式得知,并发数=吞吐量/平均响应时间。在并发数量90的时候也就是,吞吐量在11K的时候,系统的响应时间上涨,但是吞吐量开始下降,这个点可以理解为服务器的瓶颈,也就是说,过了这个点,服务器性能开始下降。那导致服务器性能下降的原因是什么?数据量过大?还是服务器本身的因素。然后,我们做了如下的测试:

上图的蓝线还是原来的线条。但是,黄线的执行顺序是反向的。打个比方:蓝线执行顺序是,10-20-30-40-50......黄线的执行顺序是110-100-90-80.....由图可以看出来,数据库存储的数据量并不是造成SQL性能下降的原因。因为,插入行为反向执行,但是并没有影响平局响应时间的变化。我们再看下面一张:

前面说过,我们的服务器是2核4G的虚拟机,可以明显看到,发送请求的机器,内存和CPU并没有什么太大的变化。然而,SQL节点CPU高达166%(总共200%),说明CPU这时候已经很繁忙了。
到这里我们可以得到一个结论:插入效率也可以叫事务提交效率,在机器硬件是如下的情况(2核4G,CPU: Intel Core Processor (Broadwell)),最高并发量是100左右。当吞吐量超过11K之后,并发量不仅仅会下降,响应时间也会加长,就是这个机器的性能瓶颈。当我们业务需要更多的机器的时候,我们可以通过增长集群的SQL节点来优化这个问题。理论上,2个SQL节点的效率至少是1个的2倍。
多SQL节点插不测了,由于只有一台物理机器,无法测试出真正的效果,不过理论上应该是2倍效率。

SQL连表查询:

SELECT * from student r1 RIGHT JOIN `order` r2 on r1.UUID = r2.stu_uuid ;

数据量:student, 200W条, order , 600W条。
下面看图:

如上图所示,并发量增大,平均响应时间(ms)和吞吐量(单位x100)也一起增大。但是在测试的时候,由于并发超过250左右时候,数据库会出现一个错误“'Too many active scans' from NDBCLUSTER”。官网也没有给出解决方法。大概意思就是查询请求过多。修改了最大扫描的参数依旧无效,这个错误还有待解决。我们在选择每个SQL节点分配多少资源的时候,可以根据这种图做出选择,需要快速反应的节点,应该尽量减少并发量,让响应时间保持在100ms以下。由于没有测试到吞吐量和响应时间的交叉点,所以不知道这个服务器瓶颈点在什么位置。不过,由于数据库的特殊性,建议单个服务器不要超过250并发。
总结:经过测试可以得知,插入正常情况下5ms能过响应,连表查询100ms左右,考虑到测试环境机器是虚拟机,这样的速度是正常的。以及网络带宽的原因,mysql cluster的效率受到网络的影响比较大。官网给出的测试是在万兆带宽情况下进行。在不同的机器环境,软件环境下,我们的测试就可能会有很大的差距。不过,测试的目地在于帮助我们在不同的环境下选择搭建数量合适的集群机器。根据这样的效率,我认为mysql cluster可以应用在生产环境,但是需要经过大量测试,保证集群机器之间的带宽。
一些建议:
1.SQL节点CPU越好性能越高。
2.数据节点内存越大越好,如果数据分片的越多,对查询效率会有一定影响。
3.Mysql cluster 集群前,应通过测试决定合适的机器数量。

MySql Cluster 集群新增节点测试以及各个节点作用

安装步骤->安装步骤
查看错误->错误集锦
节点作用->节点作用
测试结果->测试结果

图解:启动过程


SQL,在DB没有启动的时候是无法启动的.
DB启动,你需要在短时间内启动全部DB节点,否在,DB节点可能会出现全部挂掉的情况

图解:SQL请求过程,数据存储过程


SQL节点分区好后开始发送请求,我测试下应该是一起发送,所有请求.当数据到达数据节点,会先存入数据的内存内.然后数据节点会将内存数据同步到本地磁盘上,在会到同组的节点备份一个数据,数据节点存储数据位置在数据存放位置的LCP目录下(/usr/local/mysql/data/LCP/)

Mysql Cluster 管理节点

管理节点作用: 管理配置文件,监控节点,暂停以及唤醒数据节点.当管理节点挂点,整个集群是可以照常运行的.这个节点没有必要新增,如果配置双管理节点,那也是为了学习,很少见配置双管理节点.

动态新增管理节点:没有必要.一个足够了.

Mysql Cluster 数据节点

数据节点作用:当数据节点启动,它会将数据加载到内存中,由于设计了数据节点内存大小,小心会超过.
在运行过程中,如果内存中数据发生了变化,它会将内存的数据同步到磁盘上,以及各个副本服务器中.

动态新增数据节点:如果要新增数据节点,节点的备份数量是不能修改的,如果修改了配置文件中的备份数量,需要数据节点初始化,这样会导致数据节点的数据丢失.
新增备份数的机器,如果NoOfReplicas=2,你新增节点需要多加两个.必须同时加入,否在分配节点组的时候会报错.刚加入节点如下图:

新建nodegroup, create nodegroup 7,8,(7,8是节点id)

重新分配数据,登录 sql 执行:ALTER TABLE student ALGORITHM=INPLACE, REORGANIZE PARTITION;
刚开始:

最终结果:

添加成功,这时候只要重启其他数据节点,占有的百分比就会下降.
分片时,旧数据节点内存中的数据不会发生变化,只有重启数据节点后才能看到效果
数据节点的CPU占用异常高,数据库几乎处于不可用的状态.所以生产环境要注意.

Mysql Cluster SQL节点

SQL节点作用:除了存储数据,其他东西都由它管理,包括分片,SQL语句解读等等.
动态新增SQL节点:照常配置新的SQL节点.配置文件配置新节点,重新加载配置文件,启动SQL节点SQL服务即可.

上图是新增节点,访问不存在的数据库时的操作.(SQL节点保存了数据库的信息,但是,数据表,数据都是存储在数据节点上的)
注意:新增的SQL节点没有数据库的信息,也就是没有database,如果你需要访问对应的database,请自己创建.由于数据节点不会存储database的数据.

MySql Cluster 集成安装,Centos,坑点集锦

坑点集锦

安装步骤->安装步骤
查看错误->错误集锦
节点作用->节点作用
测试结果->测试结果

[MgmtSrvr] ERROR -- Failed to delete file '/usr/local/mysql/mysql-cluster/ndb_1_config.bin.1',
权限不足,使用root启动


[MgmtSrvr] INFO -- The default config directory '/usr/local/mysql/mysql-cluster' does not exist. Trying to create it...
Failed to create directory '/usr/local/mysql/mysql-cluster', error: 2
[MgmtSrvr] ERROR -- Could not create directory '/usr/local/mysql/mysql-cluster'. Either create >it manually or specify a different directory with --configdir= 缺少目录/usr/local/mysql/mysql-cluster,自己去创建一个


查看管理节点日志ndb_1_cluster.log


ERROR Message: The cluster configuration is not yet confirmed by all defined management servers. This management server is still waiting for node 1 to connect.
解决办法:等待第二个另外一个管理节点启动


Failed to allocate nodeid for API at 192.168.31.48. Returned error: 'No free node id found for mysqld(API).'
解决办法:第一个可能,管理节点配置问题,节点id分配问题.
解决办法:第二个,其他节点配置问题,比如连接地址错误.


如果发现sql节点和数据节点无法连接,或者正常启动,但是管理节点还是显示未连接,请检查 防火墙.
如果发现sql节点时有时无,会闪现的情况,可能是有一个sql节点的配置错误导致


[ndbd] WARNING -- Cannot change directory to '/usr/local/mysql/data', error: 2
[ndbd] ERROR -- Couldn't start as daemon, error: 'Failed to open logfile '/usr/local/mysql/data/ndb_8_out.log' for write, errno: 2'
解决办法:创建./usr/local/mysql/data.


Forced node shutdown completed. Occured during startphase 1. Caused by error 2308: 'Another node failed during system restart, please investigate error(s) on other node(s)(Restart error). Temporary error, restart node'.
原因:在一定时间内,DB节点没有全部启动,轮流重启不能间隔太久时间.
解决办法:短时间内启动所有DB节点.


添加数据节点的时候,不能修改NoOfReplicas=2参数,一旦修改,需要全部数据节点重新初始化才能启动.否在,数据节点是启动不起来的.


Unable to setup transporter service port: 192.168.31.45:2202!
Please check if the port is already used,
(perhaps the node is already running)
globalTransporterRegistry.start_service() failed
解决:端口被占用....停掉所有集群服务,有些服务还在启动情况下,会和2202进行数据交互.


这里错误可能补全,由于有些错误都是粗心导致,忘记记录.如果你有发现其他错误,欢迎交流.

MySql Cluster 集成安装,Centos,这可能是最详细的安装教程,双管理,多数据,多SQL节点,坑点集锦

MySql Cluster 安装

安装步骤->安装步骤
查看错误->错误集锦
节点作用->节点作用
测试结果->测试结果

硬件环境

10台虚拟机
192.168.31.41~192.168.31.50
2核4G
CPU: Intel Core Processor (Broadwell)

软件环境

OS: CentOS Linux release 7.2.1511
管理节点:192.168.31.41,192.168.31.46
SQL:192.168.31.42,192.168.31.43,192.168.31.47,192.168.31.48
数据节点:192.168.31.44,192.168.31.45,192.168.31.49,192.168.31.50,192.168.31.54,192.168.31.55

安装步骤

官网下载mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz压缩包,解压到服务器任意位置
如果系统存在mysql服务,请先卸载再安装.
所有步骤都在root帐号下执行

管理节点

1.新建一个配置文件config.ini,位置任意,能找到就行
2.管理节点开发端口1186,这个端口是其他机器连接管理节点的默认端口.如果开启了防火墙,请将端口开放出来.
firewall-cmd --zone=public --add-port=1186/tcp --permanent & firewall-cmd --reload
3.mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64/bin目录下的ndb_mgmd和 ndb_mgm拷贝出来,可以拷贝到/usr/local/bin下,方便直接调用.也可以随意位置,用./ndb_mgm 调用.注意赋予可执行权限chmod +x ndb_mgm*
4.创建/usr/local/mysql目录,在初始化启动管理节点的时候会要求你创建一个目录.
到此管理节点安装完备,另外一个节点也照搬.注意,配置文件必须一致.
下面是我的配置文件config.ini,两个管理节点都需要这个配置,直接拷贝到另外一个管理几点,配置文件很重要,仔细检查.

#conifg.init
[ndbd default]
NoOfReplicas=2
DataMemory=1024M
IndexMemory=200M
ServerPort=2202

[ndb_mgmd]
NodeId=1
HostName=192.168.31.41          # Hostname or IP address of MGM node
DataDir=/var/lib/mysql-cluster  # Directory for MGM node log files

[ndb_mgmd]
NodeId=2
HostName=192.168.31.46
DataDir=/var/lib/mysql-cluster

[ndbd]
HostName=192.168.31.44
DataDir=/usr/local/mysql/data

[ndbd]
HostName=192.168.31.45
DataDir=/usr/local/mysql/data

[ndbd]
HostName=192.168.31.49
DataDir=/usr/local/mysql/data

[ndbd]
HostName=192.168.31.50
DataDir=/usr/local/mysql/data

[mysqld]
HostName=192.168.31.42
[mysqld]
HostName=192.168.31.43
[mysqld]
HostName=192.168.31.47
[mysqld]
HostName=192.168.31.48

数据节点

1.创建配置文件/etc/my.cnf,系统自带可能有,可以直接覆盖成自己的.
注意:SQL节点和数据节点配置相同,请创建好一个配置后,拷贝到对应机器的对应目录下面,保证所有数据节点和SQL节点配置一致.
2.和管理节点一样,在mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64/bin下找到ndbd,ndbmtd文件,放到任意位置,赋予可执行权限.建议也放到,/usr/local/bin下,方便执行.
3.数据节点防火墙开发端口2202,这个端口是其他机器连接节点的默认配置端口.这个端口可以在管理节点配置文件中修改.
4.新建/usr/local/mysql/data目录,用作初始化,数据节点数据会存储在这个位置.
firewall-cmd --zone=public --add-port=2202/tcp --permanent & firewall-cmd --reload
到此,数据节点安装完毕.下面是my.cnf配置文件

#my.cnf
[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.31.46,192.168.31.41

sql节点

1.检查当前环境是否存在mysql用户组,新增一个mysql用户.没有的话新增用户组和用户.
groupadd mysql & useradd -g mysql -s /bin/false mysql
2.创建/etc/my.cnf,配置数据节点一致.
3.解压mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64到/usr/local下,建立一个mysql的文件链接.不需要创建mysql这个目录,会自动创建.
ln -s /usr/local/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64 /usr/local/mysql
注意:我在这个出现一个错误,当建立连接文件不在local下时候,生成的mysql不是一个文件夹.所以,尽量放在一个下面建立链接.
4.进入bin目录.找到mysqld.执行
mysqld --initialize
如果成功执行完毕,会出现mysql的数据库root帐号密码.并起在/usr/local/mysql/下会多一个data目录,请检查,如果没有.重新初始化(删除解压文件,重新解压即可,按照步骤重新执行一次)
5.MySQL服务器和数据目录设置必要的权限
chown -R root .
chown -R mysql data
chgrp -R mysql .
6.将MySQL启动脚本复制到相应的目录,使其可执行,并将其设置为在操作系统启动时启动:
cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server #开启启动,可以不执行
到此,sql节点搭建完毕,可以进入/usr/local/mysql/bin下的mysql 进入数据库.

启动

管理节点 ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial --ndb-nodeid=2
第一次启动加上--initial,后面不加,ndb-nodeid配置文件中的nodeid.只有管理节点需要加入.其他节点的nodeid建议自动分配,以防冲突.


数据节点 ndbd --initial
第一次启动或者后面启动报错,加上initial,报错可能是你做了数据库重新分区,但是,出现了某些错误导致的.


sql节点 直接启动sql 服务即可 mysql.service start.
登录 ndb_mgm ,执行show查看是否全为连接状态

上图是我的,手动停掉了一个sql节点,无视即可.

功能自动化测试之运用jenkins做自动化测试部署

jenkins 2.0

官网下载 https://jenkins.io/

java -jar jenkin.war 启动jenkins项目.默认端口8080
jenkins 管道写法,直接在里面写bash命令,即可执行.前面已经讲过很多命令,这里都能用.

只说一下注意点:jenkins 默认启动杀死子进程,所以,无法挂起后台进程.
- JENKINS_NODE_COOKIE instead of BUILD_ID
jenkins 自动构建完成后自动杀掉后台进程,可以设置

               script{
                     withEnv(['JENKINS_NODE_COOKIE=dontkill']) {
                         sh '''
                            cp scs-admin/target/scs-admin.jar /home/hx-pc/my/scs-admin.jar
                            cd /home/hx-pc/my/
                            java -jar scs-admin.jar &
                            sh pause.sh
                        '''
                    }
                }

注意写法,这样就不会杀掉子进程.