首页 文章 精选 留言 我的

精选列表

搜索[搭建],共10007篇文章
优秀的个人博客,低调大师

Docker快速安装Oracle11G,搭建oracle11g学习环境

安装说明 1.操作系统CentOS7_x64 2.安装的数据库为Oracle11G 3.已经安装了Docker环境 4.安装一些必要的软件 sh 复制代码 yum install unzip -y unzip:解压oracle安装文件 5.提前准备Oracle11G安装镜像 下载地址:https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 6.需要检查是否有swap分区,如果没有请设置 安装 1.镜像准备 将下载的Oracle安装包上传到指定目录并解压 如:/data0/oracle...

优秀的个人博客,低调大师

SpringBoot2初体验,简单认识spring boot2并且搭建基础工程

前言 发展史 Spring boot 1.1(2014 年 6 月) - 改进的模板支持,gemfire 支持,elasticsearch 和 apache solr 的自动配置。 Spring Boot 1.2(2015 年 3 月) - 升级到 servlet 3.1 / tomcat 8 / jetty 9,spring 4.1 升级,支持 banner / jms / SpringBootApplication 注解。 Spring Boot 1.3(2016 年 12 月) - Spring 4.2 升级,新的 spring-boot-devtools,用于缓存技术(ehcache,...

优秀的个人博客,低调大师

ThinkPHP搭建博客

博客源码:https://github.com/pleated/blog 源码地址:https://github.com/xialeistudio/thinkphp-inaction/tree/master/blog功能 管理员登陆,修改密码,退出登录 文章分类添加,编辑,删除。 文章添加,编辑,删除。 发表,管理评论 添加,删除,展示友情链接 创建数据表 CREATE TABLE blog_admin (`adminId` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL COMMENT '账号', `password` char(32) NOT NULL COMMENT '密码', `createdAt` int(10) NOT NULL COMMENT '添加时间',`loginAt` int(11) NOT NULL DEFAULT '0' COMMENT '最近登录时间',`loginIp`varchar(15) NOT NULL DEFAULT '' COMMENT '最近登录IP',PRIMARY KEY (`adminId`), KEY `createdAt` (`createdAt`),KEY `account`(`username`,`password`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; INSERT INTO `blog_admin` VALUES ('1', 'admin', '6f1779da8462d85c012588fb73a2efb7', '0', '0', '');//添加管理员账号密码admin和admin CREATE TABLE blog_article (`articleId` int(11) NOT NULL AUTO_INCREMENT,`title` varchar(40) NOT NULL COMMENT '标题', `description` varchar(100) NOT NULL DEFAULT '' COMMENT '简介',`image` varchar(128) NOT NULL DEFAULT '' COMMENT '封面图片',`hits` int(11) NOT NULL DEFAULT '0' COMMENT '点击数',`createdAt` int(11) NOT NULL COMMENT '添加时间',`updateAt` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态',`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',`content` text NOT NULL COMMENT '文章内容',`categoryId` int(10) unsigned NOT NULL,PRIMARY KEY (`articleId`),KEY `hit` (`hits`),KEY `createdAt` (`createdAt`),KEY `status` (`status`),KEY `sort` (`sort`),KEY `fk_blog_article_blog_category_idx` (`categoryId`),CONSTRAINT `fk_blog_article_blog_category` FOREIGN KEY (`categoryId`) REFERENCES `blog_category` (`categoryId`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE blog_category (`categoryId` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL COMMENT '分类名称',`isNav` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否显示在导航栏',`total` int(11) NOT NULL DEFAULT '0' COMMENT '文章总数',`sort` tinyint(4) NOT NULL DEFAULT '0' COMMENT '排序',PRIMARY KEY (`categoryId`),KEY `sort` (`total`),KEY `total` (`total`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE blog_comment (`commentId` int(11) NOT NULL AUTO_INCREMENT,`nickname` varchar(20) NOT NULL COMMENT '昵称',`createdAt` int(11) NOT NULL COMMENT '评论时间',`createdIp` varchar(15) NOT NULL COMMENT 'ip地址',`content` text NOT NULL COMMENT '评论内容',`articleId` int(11) NOT NULL,PRIMARY KEY (`commentId`),KEY `created` (`createdAt`),KEY `fk_blog_comment_blog_article1_idx` (`articleId`),CONSTRAINT `fk_blog_comment_blog_article1` FOREIGN KEY (`articleId`) REFERENCES `blog_article` (`articleId`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE blog_link( `linkId` int(11) NOT NULL AUTO_INCREMENT `name` varchar(20) NOT NULL COMMENT '站点名称',`link` varchar(100) NOT NULL COMMENT '链接地址',`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态',`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',PRIMARY KEY (`linkId`),KEY `sort` (`sort`),KEY `status` (`status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; thinkphp\blog\Application\Admin模块这是后台管理模块,需要管理文章,分类,评论,友情链接等功能。 ①thinkphp\blog\Application\Admin\Controller是这些功能的控制器: ArticleController.class.php 文章控制器 CategoryController.class.php 分类控制器 CommentController.class.php 评论控制器 LinkController.class.php 友情链接控制器 admin模块是受保护的模块,所以这四个控制器许登陆后才能正常访问,在同级目录下创建BaseController.class.php控制器处理登录检测,需要进行权限检测的控制器继承它就行。例如:thinkphp\blog\index.php\admin\index\login调用的是blog\Application\Admin\Controller\IndexController.class.php//U('index/admin/index/login') ②分页处理 数据量不可预测,须在列表页进行分页处理,在需要分页的功能的控制器里面加入分页代码 ③文章分类 文章是分类的,在读取文章列表的时候将分类信息同时查询处理,在这里使用ThinkPHP提供的ViewModel,在thinkphp\blog\Application\Common\Model\ArticleCategoryViewModel.class.php实现 ④文件上传thinkphp\blog\Application\Admin\View\Common\upload.html中定义上传功能,然后在thinkphp\blog\Application\Admin\Controller\IndexController.class.php控制器中添加upload方法,在thinkphp\blog\Application\Admin\View\Article\post.html中使用<include file="Common:upload"/>引用 thinkphp\blog\Application\Common模块 ①分类处理 此模块是公用模块,其他模块公用的功能可以放在该模块下,例如上面提到的③文章分类是公用Model,所以放在Common/Model下。 文章分类时有'isNav'字段,这是用来标识分类是否是导航栏中的分类: status为1:读取属于导航栏的分类 status为0:读取不属于导航栏的分类 读取全部分类 以上需求返回值是一致的,将以上三个需求封装成一个函数,根据传入的status决定返回数据thinkphp\blog\Application\Common\Common\function.php function getCategory($isNav = -1) { $map = array(); if ($isNav > -1) { $map['isNav'] = $isNav; } $model = new \Think\Model('Category'); return $model->where($map)->order('sort DESC')->select(); }//当给定的status>-1时添加一个过滤参数,=-1则不添加。 ②友情链接列表 友情链接是通过函数来定义,前端通过函数调用。thinkphp\blog\Application\Common\Common\function.php ③数据库字段大小写 在使用ThinkPHP的Model进行数据库操作时,返回的数据键名是大写的。 编辑'thinkphp\blog\Application\Common\Conf\db.php',在其中添加 'DB_PARAMS' => array( PDO::ATTR_CASE => PDO::CASE_NATURAL )//控制大小写 Home模块 ①前台布局 此模块用到了ThinkPHP的模板布局功能 在thinkphp\blog\Application\Common\Conf\config.php添加'LAYOUT_ON' => true,开启模板布局,ThinkPHP会默认使用名为“layout”的模板,在thinkphp\blog\Application\Home\View\layout.html文件。(代码就不贴了,github中都有),在此布局文件用到了模板常量,而ThinkPHP自带的模板常量只有_PUBLIC_,所以需在thinkphp\blog\Application\Home\Conf\config.php中单独定义 return array( 'TMPL_PARSE_STRING' => array( '__VENDOR__' => '/thinkphp/blog/public/vendor', '__JS__' => '/thinkphp/blog/public/home/js', '__CSS__' => '/thinkphp/blog/public/home/css', '__IMAGE__' => '/thinkphp/blog/public/home/images' ), 我的项目是部署在localhost/thinkphp中,在定义模板常量的时候需要写全。 公用部分用vendor目录, 导航栏,友情链接等这几个功能都是公用功能,在模板文件使用调用thinkphp\blog\Application\Common\Common\function.php中的getCategory和getLinks函数,不会出现读取不到数据的问题。 ②评论间隔处理 使用缓存来做评论间隔处理thinkphp\blog\Application\Home\Controller\IndexController.class.php里的comment()方法执行此操作。$id是被评论文章的ID,$key = get_client_ip() . '-view-article-' . $id;是使用ID+IP的方式识别当前评论用户,若S函数返回值不为空,则缓存有效期内已经评论过,返回错误信息,若评论成功,则使用当前$key写入缓存 ③Ajax评论 在文章页评论功能的开发中使用Ajax, 在thinkphp\blog\Application\Home\View\Index\article.html中。提交的时候使用$.post方式提交。在回调函数中需要先判断是否出错,如果出错则显示错误信息,否则显示该评论。评论使用的是jQuery的prepend方法。因最新的评论在最前面,须将生成的html添加到最前面。 其他总结 入口index.php文件调用thinkphp\blog\Application\Home\Controller\IndexController.class.php和thinkphp\blog\Application\Common\Model\ArticleCategoryViewModel.class.php。thinkphp\blog\Application\Common\Conf\config.php应用配置文件也就是调用所有模块之前都会首先加载的公共配置文件 thinkphp\blog\Application\Admin\View\..这个文件中index.html是后台的编写各个模块的列表,post.html则是发表页面 前台Home模块用到了ThinkPHP的模块布局功能。编辑thinkphp\blog\Application\Common\Conf\config.php文件,默认调用thinkphp\blog\Application\Home\View下的layout.html文件 该布局用到了常量模块,而ThinkPHP自带的模块常量只有PUBLIC,所以需在thinkphp\blog\Application\Common\Conf\config.php中单独定义,并在thinkphp\blog\Application\Home\Conf\config.php中调用需要的布局。

优秀的个人博客,低调大师

CentOS集群搭建

虚拟机安装linux 1. 启动virtualbox 2. 点击新建,新建名称eshop-cache01, eshop-cache02, eshop-cache03 3. 选择linux,redhat32bit 4. 选择文件目录,下一步创建完成 5. 配置虚拟机网卡设置桥接 6. 点击启动,选择系统 Centos环境配置 1. 配置网络 [root@eshop-cache01~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 Type=Ethernet ONBOOT=yes BOOTPROTO=dbcp [root@eshop-cache01 ~]# service network restart [root@eshop-cache01 ~]# ifconfig [root@eshop-cache01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 Type=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.100.xxxx NETMASK=255.255.255.0 GATEWAY=192.168.100.1 [root@eshop-cache01 ~]# service network restart [root@eshop-cache01 ~]# vi /etc/hosts 192.168.100.212 eshop-cache01 2. 防火墙关闭 [root@eshop-cache01 local]# service iptables stop [root@eshop-cache01 local]# service ip6tables stop [root@eshop-cache01 local]# chkconfig iptables off [root@eshop-cache01 local]# chkconfig ip6tables off [root@eshop-cache01 local]# vi /etc/selinux/config SELINUX=disabled 3. 配置yum [root@eshop-cache01 local]# yum clean all [root@eshop-cache01 local]# yum makecache [root@eshop-cache01 local]# yum install -y wget Java环境的安装 1. Jdk的安装 [root@eshop-cache01 local] rpm –ivh jdk-7u65-linux-i586.rpm 2. 环境变量的配置 [root@eshop-cache01 local] vi ~/.bashrc export JAVA_HOME=/usr/java/latest export PATH=PATH:">PATH:PATH:JAVA_HOME/bin //source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。 [root@eshop-cache01 local]# source ~/.bashrc [root@eshop-cache01 local]# java -version java version “1.7.0_65” Java(TM) SE Runtime Environment (build 1.7.0_65-b17) Java HotSpot(TM) Client VM (build 24.65-b04, mixed mode, sharing perl的安装 1. perl的安装(lua依赖) [root@eshop-cache01 local]# wgethttp://www.cpan.org/src/5.0/perl-5.16.1.tar.gz [root@eshop-cache01 local]# tar -zxvf perl-5.16.1.tar.gz [root@eshop-cache01 local]# cd perl-5.16.1/ [root@eshop-cache01 perl-5.16.1]# cd .. [root@eshop-cache01 perl-5.16.1]# yum install –y gcc [root@eshop-cache01 local]# yum install -y build-essential [root@eshop-cache01 perl-5.16.1]# ./Configure -des -Dprefix=/usr/local/perl [root@eshop-cache01 perl-5.16.1]# make && make test && make install [root@eshop-cache01 local]# perl –v 配置集群 1. 再安装3台一模一样的环境的linux环境 2. 在4台机器中hosts文件里,配置hostname和ip的对应关系 192.168.100.212 eshop-cache01 192.168.100.139 eshop-cache02 192.168.100.141 eshop-cache03 192.168.100.142 eshop-cache04 3. 配置4台centos互相免密通信 a. 首先在四台机器上配置对本机的ssh免密码登录 ssh –keygen –t rsa 生成本机的公钥,过程中不断回车,默认在/root/.ssh下 [root@eshop-cache01 ~]# cd /root/.ssh [root@eshop-cache01 .ssh]# cp id_rsa.pub authorized_keys [root@eshop-cache01 .ssh]# ssh eshop-cache01 //免密连接 b. 配置四台Linux互相免密登陆 [root@eshop-cache01 ~]# ssh-copy-id -i eshop-cache02 [root@eshop-cache01 ~]# ssh-copy-id -i eshop-cache03 c.依次类推

优秀的个人博客,低调大师

Python 环境搭建

Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个DOS版本)PalmOSNokia 移动手机Windows CEAcorn/RISC OSBeOSAmigaVMS/OpenVMSQNXVxWorksPsionPython 同样可以移植到 Java 和 .NET 虚拟机上。 Python下载 Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网:http://www.python.org/ 你可以在以下链接中下载 Python 的文档,你可以下载 HTML、PDF 和 Post 等格式的文档。 Python文档下载地址:www.python.org/doc/ Python安装 Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。 您需要下载适用于您使用平台的二进制代码,然后安装Python。 如果您平台的二进制代码是不可用的,你需要使用C编译器手动编译源代码。 编译的源代码,功能上有更多的选择性, 为python安装提供了更多的灵活性。 以下为不同平台上安装Python的方法: Unix & Linux 平台安装 Python: 以下为在Unix & Linux 平台上安装 Python 的简单步骤: 打开WEB浏览器访问http://www.python.org/download/选择适用于Unix/Linux的源码压缩包。下载及解压压缩包。如果你需要自定义一些选项修改Modules/Setup执行 ./configure 脚本makemake install 执行以上操作后,Python会安装在 /usr/local/bin 目录中,Python库安装在/usr/local/lib/pythonXX,XX为你使用的Python的版本号。 Window 平台安装 Python: 以下为在 Window 平台上安装 Python 的简单步骤: 打开WEB浏览器访问http://www.python.org/download/在下载列表中选择Window平台安装包,包格式为:python-XYZ.msi 文件 , XYZ 为你要安装的版本号。要使用安装程序 python-XYZ.msi, Windows系统必须支持Microsoft Installer 2.0搭配使用。只要保存安装文件到本地计算机,然后运行它,看看你的机器支持MSI。Windows XP和更高版本已经有MSI,很多老机器也可以安装MSI。下载后,双击下载包,进入Python安装向导,安装非常简单,你只需要使用默认的设置一直点击"下一步"直到安装完成即可。 MAC 平台安装 Python: 最近的Macs系统都自带有Python环境,你也可以在链接 http://www.python.org/download/ 上下载最新版安装。 环境变量配置 程序和可执行文件可以在许多目录,而这些路径很可能不在操作系统提供可执行文件的搜索路径中。 path(路径)存储在环境变量中,这是由操作系统维护的一个命名的字符串。这些变量包含可用的命令行解释器和其他程序的信息。 Unix或Windows中路径变量为PATH(UNIX区分大小写,Windows不区分大小写)。 在Mac OS中,安装程序过程中改变了python的安装路径。如果你需要在其他目录引用Python,你必须在path中添加Python目录。 在 Unix/Linux 设置环境变量 注意: /usr/local/bin/python 是 Python 的安装目录。 在 Windows 设置环境变量 在环境变量中添加Python目录: 在命令提示框中(cmd) : 输入 path=%path%;C:Python 按下"Enter"。 注意: C:Python 是Python的安装目录。 也可以通过以下方式设置: 右键点击"计算机",然后点击"属性"然后点击"高级系统设置"选择"系统变量"窗口下面的"Path",双击即可!然后在"Path"行,添加python安装路径即可(我的D:Python32),所以在后面,添加该路径即可。 ps:记住,路径直接用分号";"隔开!最后设置成功以后,在cmd命令行,输入命令"python",就可以有相关显示。 Python 环境变量 下面几个重要的环境变量,它应用于Python: 运行Python 2、命令行脚本 在你的应用程序中通过引入解释器可以在命令行中执行Python脚本,如下所示: $ python .py # Unix/Linux 或者 C:>python .py # Windows/DOS 注意:在执行脚本时,请检查脚本是否有可执行权限。 3、集成开发环境(IDE:Integrated Development Environment): PyCharm PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、 Windows、 Linux 系统。 PyCharm 功能 : 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制…… PyCharm 下载地址 : https://www.jetbrains.com/pycharm/download/

优秀的个人博客,低调大师

Hbase集群搭建

下载安装包并解压 wget http://mirrors.hust.edu.cn/apache/hbase/1.3.1/hbase‐1.3.1‐bin.tar.gz tar ‐zxvf hbase‐1.3.1‐bin.tar.gz ‐C /export/servers/ 环境变量设置vi /etc/profile export HBASE_HOME=/export/servers/hbase export PATH=${HBASE_HOME}/bin:$PATH 重新刷新 profilesource /etc/profile 修改配置文件进入配置文件所在的目录cd /export/servers/hbase/conf/ 修改配置文件 regionservers vi regionservers node02 node03 node,node03为代理域名,已经在 /etc/hosts 配置过 所以可以直接使用 修改配置文件 hbase‐site.xml 注意:以下配置集成的是hadoop ha集群。如果您的集群没有配置ha,hbase.rootdir 配置项目需要修改:hdfs://master:9000/hbase vi hbase‐site.xml‐ <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://ns1/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.master.port</name> <value>16000</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/export/data/zk/</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>node01,node02,node03</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> </configuration> 修改配置文件 hbase‐env.sh HBASE_MANAGES_ZK=false 表示,hbase和大家伙公用一个zookeeper集群,而不是自己管理集群。vi hbase‐env.sh export JAVA_HOME=/export/servers/jdk export HBASE_MANAGES_ZK=false 拷贝hadoop配置文件 hdsf-site.xml,core-site.xml 分发安装文件并启动 scp ‐r /export/servers/hbase/ node02:/export/servers/ scp ‐r /export/servers/hbase/ node03:/export/servers/ 注意:一定注意每台机器时间一致,启动Hbase之前先启动 zk,hadoop hdfs

优秀的个人博客,低调大师

php环境搭建

vcredist_x64传送门:http://pan.baidu.com/s/1qWFW3vu 钥匙:p4op mysql-5.6.25-winx64传送门:http://pan.baidu.com/s/1kT1nC6z 钥匙:2uks php-5.6.2-Win32-VC11-x64传送门:http://pan.baidu.com/s/1dD8l2hF 钥匙:nkhv httpd-2.4.16-win64-VC11传送门:http://pan.baidu.com/s/1jGfAXYu 钥匙:jift phpMyAdmin-4.4.11传送门:http://pan.baidu.com/s/1ntMisnZ 钥匙:7s58 请先安装vcredist_x64。安装都是按下一步,若干个下一步后就安装成功OK了 Apache 下载后是zip包,解压到后放在合适的位置就可以了,不建议放在C盘里,因为重装系统C盘的数据会全部丢失,这里我们将它放在E盘的server文件夹下的apache2.4目录下 php 下载后也是zip包,同样解压到合适位置,我们这里也将其放在E盘的server文件夹下的php目录下 MySQL下载后也是zip包,同样是解压到合适的位置,这里我们也将其放在E盘的server文件夹下的MySQL目录下,解压安装后如下图 配置PHP 1.将E:\server\php\php.ini-production 复制一份,并重命名为php.ini; 2.将 E:\server\php和E:\server\php\ext加入环境变量PATH中,选中计算机,右键属性-->高级系 统设置 -->环境变量-->系统变量,找到Path,编辑,在其后加上;E:\server\php;E:\server\php\ext;如图所示。 配置Apache 用记事本打开E:\server\Apache2.4\Apache24\conf\httpd.conf 1.查找ServerRoot,修改ServerRoot "C:/Apache24" => ServerRoot "E:/server/Apache2.4/Apache24"(这里输入的是你解压apache安装包后放的位置) 2.查找#ServerName www.example.com:80 ,修改为 ServerName www.example.com:80 (去掉前面的#) 3.查找DocumentRoot "c:/Apache24/htdocs",修改为DocumentRoot "E:/server/Apache2.4/Apache24/htdocs" (如果一样,就不用改) 4.查找Directory "c:/Apache24/htdocs",修改为 Directory "E:/server/Apache2.4/Apache24/htdocs" (如果一样,就不用改) 5.查找DirectoryIndex index.html,修改为 DirectoryIndex index.html index.php index.htm (这里我们添加了index.php index.htm) 6.查找ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/",修改为 ScriptAlias /cgi- bin/ "E:/server/Apache2.4/Apache24/cgi-bin"(如果一样,也不用改) 7.查找Directory "c:/Apache24/cgi-bin"修改为Directory "E:/server/Apache2.4/Apache24/cgi-bin/"(如果一样,也不用改) 8.在 E:\server\apache2.4.10\conf\httpd.conf最后一行添加添 加 LoadModule php5_module "E:/server/php/php5apache2_4.dll" 让 apache 支持php (请确认E:/server/ php/有php5apache2_4.dll,如果你下载的是我提供的连接肯定是有的) 9.添加 AddType application/x-httpd-php .php .html .htm 10.添加 PHPIniDir "E:/server/php" (告诉apache php.ini的位置) 至此,httpd.conf 配置完成,保存httpd.conf。 将Apache安装到系统服务中 在命令提示符输入E:\server\Apache2.4\Apache24\bin\httpd -k install,回车即可 开启PHP扩展 用记事本打开E:\server\php\php.ini 1.将;extension_dir="ext"修改为extension_dir="ext"(去掉extension前面的分号) 2.将;extension=php_mbstring.dll修改为extension=php_mbstring.dll(去掉extension前面的分号,这是php多字节字符串扩展) 3.将;extension=php_mysql.dll修改为extension=php_mysql.dll(去掉extension前面的分号) 4.将;extension=php_mysqli.dll修改为extension=php_mysqli.dll(去掉extension前面的分号) MySQL配置安装 解压到E:\server\mysql 配置环境变量:我的电脑->属性->高级->环境变量(系统变量) 选择PATH,在其后面添加: 你的mysql的bin文件夹的路径 (如:E:\server\mysql\bin; ) PATH=.......;E:\server\mysql\bin;(注意是追加,不是覆盖) 配置完环境变量之后先别忙着启动mysql,我们还需要修改一下配置文件(如果没有配置,之后启动的时候就会出现图中的错误哦!:错误2 系统找不到文件),mysql默认的配置文件是在E:\server\mysql\my-default.ini,或者自己建立一个my.ini文件,在其中修改或添加配置(如图): [mysqld] # basedir = E:\server\mysql(mysql所在目录) # datadir = E:\server\mysql\data(mysql所在目录\data) 若没有data文件夹,请参考http://www.ilkhome.cn/post-75.html 以管理员身份运行cmd(一定要用管理员身份运行,不然权限不够),输入:cd E:\server\mysql\bin 进入mysql的bin文件夹(不管有没有配置过环境变量,也要进入bin文件夹,否则之后启动服务仍然会报错误2) 输入mysqld -install(如果不用管理员身份运行,将会因为权限不够而出现错误:Install/Remove of the Service Denied!) 安装成功 安装成功后就要启动服务了,继续在cmd中输入:net start mysql,服务启动成功! 此时很多人会出现错误,请看注意: 注意:这个时候经常会出现错误2和错误1067。 如果出现“错误2 系统找不到文件”,检查一下是否修改过配置文件或者是否进入在bin目录下操作,如果配置文件修改正确并且进入了bin文件夹,需要先删除mysql(输入 mysqld -remove)再重新安装(输入 mysqld -install);如果出现错误1067,那就是配置文件修改错误,确认一下配置文件是否正确。 服务启动成功之后,就可以登录了,如图,输入mysql -u root -p(第一次登录没有密码,直接按回车过),登录成功! 启动Apache 启动apache,有两种启动方式: 在windows服务中启动;点击开始,找到计算机,右键-->管理-->服务和应用程序-->服务,找到Apache2.4,右键启动即可,如下图 或者 双击F:\phptools\Apache2.4\Apache24\bin\ApacheMonitor.exe启动,如下图 启动mysql MySQL配置成功后,也在服务中启动,启动方法与Apache在服务中启动方式类似,所不同的是,你点击右键启动的是MySQL服务

优秀的个人博客,低调大师

elk搭建记录

1.elk介绍 (摘抄至http://www.tuicool.com/articles/YR7RRr) 通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。 集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。 开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。 Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。 如图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。 2.安装准备 系统版本:centos6.7 ElasticSearch:2.3.4 Logstash:2.3.4 Kibana:4.5.3 Jdk:1.8.0_45 注:由于Logstash的运行依赖于Java环境, 而Logstash 1.5以上版本不低于java 1.7,因此推荐使用最新版本的Java。因为我们只需要Java的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装。 3.下载: 官方网址:https://www.elastic.co/downloads 1 2 3 4 5 cd/usr/local wgethttps://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.4/elasticsearch-2.3.4.tar.gz wgethttps://download.elastic.co/logstash/logstash/logstash-2.3.4.tar.gz wgethttps://download.elastic.co/kibana/kibana/kibana-4.5.3-linux-x64.tar.gz wgethttp://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz 4.安装 使用root身份安装 4.1安装jdk 1 2 3 4 5 6 7 8 9 10 11 mkdir-p/usr/lib/jvm tar-xvfjdk-8u45-linux-x64.tar.gz-C/usr/lib/jvm #vim/etc/profile配置系统参数 exportJAVA_HOME=/usr/lib/jvm/jdk1.8.0_45 exportJRE_HOME=${JAVA_HOME}/jre exportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib exportPATH=${JAVA_HOME}/bin:$PATH update-alternatives--install/usr/bin/javajava/usr/lib/jvm/jdk1.8.0_45/bin/java300 update-alternatives--install/usr/bin/javacjavac/usr/lib/jvm/jdk1.8.0_45/bin/javac300 4.2安装elasticsearch 使用elk账号安装 1 2 3 4 5 6 7 useraddelk su-elk tar-xvfelasticsearch-2.3.4.tar.gz cdelasticsearch-2.3.4 ./bin/plugininstallmobz/elasticsearch-head [root@testelasticsearch-2.3.4]#lsplugins/ head 编辑es配置文件 1 2 3 4 5 6 7 8 9 10 [root@testelasticsearch-2.3.4]#pwd /tools/elk/elasticsearch-2.3.4/elasticsearch-2.3.4 [root@testelasticsearch-2.3.4]#catconfig/elasticsearch.yml|grep-Ev"^#" cluster.name:es_cluster node.name:node0 path.data:/tmp/elasticsearch/data path.logs:/tmp/elasticsearch/logs network.host:192.168.175.131 #本机ip http.port:9200 浏览器访问http://192.168.175.131:9200/ 看返回结果,有配置的cluster_name、节点name信息以及安装的软件版本信息,其中安装的head插件,它是一个用浏览器跟ES集群交互的插件,可以查看集群状态、集群的doc内容、执行搜索和普通的Rest请求等。可以使用web界面来操作查看http://192.168.175.131:9200/_plugin/head/,如下图 可以从界面看到,当前的elas集群里面没有index也没有type,所以是空记录。 本文转自 xoyabc 51CTO博客,原文链接:http://blog.51cto.com/xoyabc/1885202,如需转载请自行联系原作者

优秀的个人博客,低调大师

docker 、rancher搭建

一、安装前准备: 配置本地yum源 1).mount -t iso9660 -o loop /dev/cdrom /media/centos 2).vi /etc/yum.repo.d/Centos_localsource.repo 1 2 3 4 5 [CentOS7-Localsource] name=CentOS7 baseurl= file : ///media/centos enabled=1 gpgcheck=0 2.配置网络yum源 1 2 3 4 5 6 下载163网易的yum源: wgethttp: //mirrors .163.com/.help /CentOS7-Base-163 .repo 中科大的yum源: wgethttp: //centos .ustc.edu.cn /CentOS-Base .repo sohu的yum源 wgethttp: //mirrors .sohu.com /help/CentOS-Base-sohu .repo 3.yum clean all yum makecache yum isntall vim net-tools #(支持ifconfig) (setenforce 0 && systemctl stop firewalld) 二、安装docker和rancher 下载docker的rpm包(https://download.docker.com/linux/centos/7/x86_64/stable/Packages/) docker-ce-17.06.0.ce-1.el7.centos.x86_64.rpm 安装docker yum installdocker-ce-17.06.0.ce-1.el7.centos.x86_64.rpm 配置docker加速器 vi /etc/docker/daemon.json 1 2 3 { "registry-mirrors" :[ "http://d7e77b19.m.daocloud.io" ]} 或 { "registry-mirrors" :[ "https://registry.docker-cn.com" ]} 4.systemctl start docker 5.docker pull rancher/server 6.启动rancher server 1 dockerrun-d-v/data1/mysql:/ var /lib/mysql--name=rancher-server--restart=unless-stopped-p 7070 : 8080 rancher/server 7.rancher页面配置及rancher-agent安装见http://blog.chinaunix.net/uid-29757900-id-5676591.html 三、安装registry docker pull registry 运行registry容器 1 dockerrun-d--restart=always-p 5000 : 5000 --namerepo-v/ var /lib/registry:/ var /lib/registryregistry 3.修改/etc/docker/daemon.json添加"insecure-registries":["registry:5000"](参考:http://www.cnblogs.com/lin1/p/6207348.html) 1 { "registry-mirrors" :[ "https://registry.docker-cn.com" ], "insecure-registries" :[ "192.168.206.134:5000" ]} 4.重启docker systemctl restart docker 5.将公有仓库下载docker包上传到私有仓库(http://www.cnblogs.com/fengzheng/p/5168951.html) 1 2 3 4 5 6 7 8 9 10 11 #下载mysql镜像 dockerpullmysql #重新标记一个本地镜像为私有仓库的版本,这里将本地的mysqllatest标记为 192.168 . 206.134 : 5000 /mysql:yang dockertagmysql:latest 192.168 . 206.134 : 5000 /mysql:yang #将本地镜像推送到本地仓库中 dockerpush 192.168 . 206.134 : 5000 /mysql:yang #查看本地仓库中的镜像列表 [root@jeffyum.repos.d]#curlhttp: //localhost:5000/v2/mysql/tags/list { "name" : "mysql" , "tags" :[ "yang" ]} #拉取本地仓库中的镜像 dockerpulllocalhost: 5000 /mysql:yang 6.私有仓库 Registry中的镜像管理 1 2 3 4 5 6 7 8 9 10 11 12 #检查registry上的镜像 for i in `curl-s 127.0 . 0.1 : 5000 /v2/_catalog|sed 's/repositories//;s/[\[\"\:\{\}]*//g;s/,//g;s/]//g' `; do curl-s 127.0 . 0.1 : 5000 /v2/$i/tags/list|sed 's/[\{\}\"]//g;s/name://g;s/,tags:/\t/g' ;done #删除私有registry中的镜像(参考:http: //www.cnblogs.com/wjoyxt/p/5855405.html) 1 .修改配置/etc/docker/registry/config.yml 2 .使用APIGET/v2/<镜像名>/manifests/<tag>来取得要删除的镜像:Tag所对应的digest 比如,要删除mysql:yang镜像,那么取得digest的命令是: curl--header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I-XHEADhttp: //192.168.206.134:5000/v2/mysql/manifests/yang 3 .然后调用APIDELETE/v2/<镜像名>/manifests/<digest>来删除镜像。比如: [root@jeffyum.repos.d]#curl-XDELETE "http://192.168.206.134:5000/v2/mysql/manifests/sha256:afd334d5f3b4c31155a09110ad7f4728e8b5c8bdf8bca711aed61cf8247dfdec" { "errors" :[{ "code" : "UNSUPPORTED" , "message" : "Theoperationisunsupported." }]} ----配置文件已改,但是没删除成功。问题待解---- 本文转自 326647452 51CTO博客,原文链接:http://blog.51cto.com/svsky/1959406,如需转载请自行联系原作者

优秀的个人博客,低调大师

hbase系统搭建

相关软件版本: jdk-6u32-linux-x64.bin tar xzvf hadoop-1.0.2.tar.gz tar xzvf hbase-0.92.1-security.tar.gz jdk-6u32-linux-x64.bin 注:目前已经有更高版本,建议使用高版本的hadoop和hbase。 环境:suse10 64位机器 单机版参考:HDFS+MapReduce+Hive+HBase十分钟快速入门 步骤 0. 设置集群机器的hostname; 1. 建立hadoop用户,如hadoop; 2. 配置ssh(简单办法:先在单机上生成ssh key pair文件,将授权文件拷贝到相应的机器上) 3. 安装java、hadoop、hbase。 4. 配置hadoop:core-site.xml 、core-site.xml 、mapred-site.xml 、taskcontroller.cfg、master、slavers、hadoop-env.sh、/etc/hosts、 环境变量(/etc/profile): # hadoop env export JAVA_HOME=/usr/share/java export JRE_HOME=$JAVA_HOME/jre export HADOOP_CONF=/home/oicq/hadoop/conf HADOOP_HOME=/home/oicq/hadoop/hadoop enxport PATH=$PATH:/usr/share/java/bin:/home/oicq/hadoop/hadoop/bin:/home/oicq/hadoop/hbase/bin 5. 安装snappy: #! /bin/bash tar xzvf snappy-1.0.5.tar.gz cd snappy-1.0.5 ./configure make make install cp .libs/libsnappy.* ../hadoop/lib/native/Linux-amd64-64/ 6. 编译本地库(因原始安装包不支持suse,才需要) 切换到./hadoop/src/native目录, 执行下面脚本: #! /bin/bash export JAVA_HOME=/usr/share/java export HADOOP_NATIVE_SRCDIR=/home/oicq/hadoop/hadoop/src/native export JVM_DATA_MODEL=64 export OS_NAME=Linux export OS_ARCH=amd64 chmod 755 configure ./configure CFLAGS="-DHADOOP_SNAPPY_LIBRARY" touch src/org/apache/hadoop/io/compress/snappy/org_apache_hadoop_io_compress_snappy_SnappyCompressor.h touch src/org/apache/hadoop/io/compress/snappy/org_apache_hadoop_io_compress_snappy_SnappyDecompressor.h touch src/org/apache/hadoop/io/compress/zlib/org_apache_hadoop_io_compress_zlib_ZlibCompressor.h touch src/org/apache/hadoop/io/compress/zlib/org_apache_hadoop_io_compress_zlib_ZlibDecompressor.h touch src/org/apache/hadoop/security/org_apache_hadoop_security_JniBasedUnixGroupsMapping.h touch src/org/apache/hadoop/security/org_apache_hadoop_security_JniBasedUnixGroupsNetgroupMapping.h touch src/org/apache/hadoop/security/org_apache_hadoop_io_nativeio_NativeIO.h make clean make cp ./.libs/libhadoop.* http://www.cnblogs.com/lib/native/Linux-amd64-64/ 注:hadoop从0.92开始已包含snappy的集成接口,但默认编译本地库时并不打开,需要明确指定才行。 ./configure CFLAGS="-DHADOOP_SNAPPY_LIBRARY" 至关重要。 7.配置hbase:hbase-env.sh、hbase-site.xml、regionservers; 8. (可选)启用hadoop-metrics.properties、hadoop-metrics.properties 上述步骤是在1)无法在线安装;2)非hadoop支持系统; 情况下采用的本地编译安装方式。 参考 Cluster Setup Native Libraries Guide 更多信息搜索:site:http://hadoop.apache.org/common/docs 本文转自 zhenjing 博客园博客,原文链接:http://www.cnblogs.com/zhenjing/archive/2012/07/25/hbase_install.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

MHA架构搭建

MHA工作原理总结如下: 1、配置文件检查阶段(整个集群的配置) 2、宕机奔溃的master保存二进制日志事件且摘除VIP操作 3、识别含有最新更新的slave 4、复制dead master和slave相差的中继日志,保存到mha manager具体的目录下面 5、提升一个slave为新的master 6、使其他的slave连接新的master进行复制 复制机制: 异步复制: MySQL默认是异步复制,MASTER将事件写入BINLOG,但并不知道SLAVE是否何时已经接收且处理,在异步复制的机制的情况下,如果MASTER宕机,事务在MASTER上已提交,但很可能这些事务没有传到任何的SLAVE上,此时SLAVE可能会丢失事务 同步复制: MASTER提交事务,直到事务在所有的SLAVE都已提交,此时才会返回客户端,事务执行完毕,完成一个事务可能会有很大的延迟。 半同步复制: 当SLAVE主机连接到MASTER时,能够查看其是否处于半同步复制的机制。当MASTER上开启半同步复制的功能时,至少应该有一个SLAVE开启其功能,此时,一个线程在MASTER上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的SLAVE已收到此事务的所有事件,或等待超时,当一个事务都写入其relay-log中且已刷新到磁盘上,SLAVE才会告知已收到,如果等待超时,也就是MASTER没呗告知已收到,此时MASTER会自动转换为异步复制,当至少一个半同步的SLAVE赶上,MASTER与其SLAVE自动转换为半同步复制的机制 半同步复制工作机制处于同步和异步之间,MASTER的事务提交阻塞,只要一个SLAVE已收到该事务的事件且已记录,他不会等待所有的SLAVE都告知已收到,且他只是接收,并不用等其他执行且提交。 MHA的隐患: 在MHA自动故障切换的过程中,MHA试图从宕掉的主服务器上保存二进制日志,最大程度保证数据的不丢失,存在的问题是,如果主服务器硬件故障宕机或无法通过SSH访问,MHA没有办法保存二进制日志,只能进行故障转移而可能丢失最新数据。, MySQL服务挂了,可以从服务器拷贝二进制日志,若是硬件话,只能GG了,如果复制出现延迟,也只能GG了。 使用场景: MHA主要支持一主多从的架构,要求一个复制集群必须至少有3台数据库服务器。 简介:MasterHighAvailability 该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点) Manager工具包主要包括以下几个工具: masterha_check_ssh 检查MHA的SSH配置状况 masterha_check_repl 检查MySQL复制状况 masterha_manger 启动MHA masterha_check_status 检测当前MHA运行状态 masterha_master_monitor 检测master是否宕机 masterha_master_switch 控制故障转移(自动或者手动) masterha_conf_host 添加或删除配置的server信息 Node工具包 save_binary_logs 保存和复制master的二进制日志 apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave filter_mysqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用这个工具) purge_relay_logs清除中继日志(不会阻塞SQL线程) ##关闭relay log自动清楚,set globalrelay_log_purge=0 MHA在发生切换的过程中,从库的恢复过程中依赖于RELAY LOG的相关信息,所以这里要将RELAYLOG的自动清楚设置为OFF,采用手动清楚的方式。 PURGE_RELAY_LOGS工具原理:它可以为中继日志创建硬链接,执行SET GOLBAL RELAY_LOG_PURGE=1,等待几秒钟以便SQL线程切换到新的中继日志,在执行RELAY_LOG_PURGE=0 Mha安装 1、在所有节点安装MHA node所需的perl模块(DBD:mysql) yum install perl-DBD-MySQL -y 2、在所有节点安装mha node tar -xvf mha4mysql-node-0.53.tar.gz cd mha4mysql-node-0.53 perl Makefile.PL make make install 安装后再/usr/local/bin下生成以下文件 ll /usr/local/bin/apply_diff_relay_logs/usr/local/bin/filter_mysqlbinlog /usr/local/bin/purge_relay_logs/usr/local/bin/save_binary_logs 3、安装MHA Manager 安装相关软件 yum -y install perl-DBD-MySQLperl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManagerperl-Config-IniFiles ncftp perl-Params-Validate perl-CPAN perl-Test-Mock-LWP.noarchperl-LWP-Authen-Negotiate.noarch perl-devel perl-ExtUtils-CBuilderperl-ExtUtils-MakeMaker cd mha4mysql-manager-0.53 perl Makefile.PL make make install 拷贝相关脚本到/usr/local/bin下 cd/usr/local/mha4mysql-manager-0.53/samples/scripts scp * /usr/local/bin master_ip_failover #自动切换时vip管理的脚本,不是必须,如果我们使用keepalived的,我们可以自己编写脚本完成对vip的管理,比如监控mysql,如果mysql异常,我们停止keepalived就行,这样vip就会自动漂移 master_ip_online_change #在线切换时vip的管理,不是必须,同样可以可以自行编写简单的shell完成 power_manager #故障发生后关闭主机的脚本,不是必须 send_report #因故障切换后发送报警的脚本,不是必须,可自行编写简单的shell完成。 4、配置SSH登录无密码验证 1)在每台发服务器上执行:ssh-keygen-t rsa ssh-copy-id -i.ssh/id_rsa.pub "root@192.168.28.87" ssh-copy-id -i.ssh/id_rsa.pub "root@192.168.28.70" ssh-copy-id -i .ssh/id_rsa.pub "root@192.168.28.71” 5、两台Slave服务设置read_only set global read_only=1; 6、relay_log脚本 #!/bin/bash user=root passwd=123456 port=3306 log_dir='/data/masterha/log' work_dir='/data' purge='/usr/local/bin/purge_relay_logs' if[!-d$log_dir]then mkdir$log_dir-p Fi $purge--user=$user--password=$passwd--disable_relay_log_purge--port=$port--workdir=$work_dir>>$log_dir/purge_relay_logs.log2>&1 设置定时任务 04***/bin/bash/root/purge_relay_log.sh 7、在master库创建监控用户 grant all privileges on *.* to 'root'@'192.168.1.%'identified by '125746'; flush privileges; 8、配置mha 1)创建MHA的工作目录,并且创建相关配置文件 mkdir -p /etc/masterha cd/usr/local/mha4mysql-manager-0.53/samples/conf cp app1.cnf /etc/masterha/ 2)修改配置文件 vi/etc/masterha/app1.cnf [server default] manager_workdir=/var/log/masterha manager_log=/var/log/masterha/app1/manager.log master_binlog_dir=/data/mysql master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change password=125746 user=root ping_interval=1 remote_workdir=/tmp repl_password=123 repl_user=repl report_script=/usr/local/bin/send_report ssh_user=root [server1] hostname=192.168.1.120 candidate_master=1 port=3306 [server2] hostname=192.168.1.115 port=3306 candidate_master=1 [server3] hostname=192.168.1.118 port=3307 3)检查ssh设置 masterha_check_ssh--conf=/etc/masterha/app1.cnf ln-s /usr/lib/perl5/vendor_perl/MHA /usr/lib64/perl5/vendor_perl/ 4)检查主从复制 masterha_check_repl--conf=/etc/masterha/app1.cnf 5)安装keepalived tar xfkeepalived-1.2.12.tar.gz cd keepalived-1.2.12 ./configure--prefix=/usr/local/keepalived make&& make install cp/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ cp/usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ mkdir/etc/keepalived cp/usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ cp/usr/local/keepalived/sbin/keepalived /usr/sbin/ 主库keepalived配置文件 vi/etc/keepalived/keepalived.conf global_defs { notification_email { lihong@bxjinrong.com } notification_email_fromAlexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MySQL_HA } vrrp_instance VI_1{ state BACKUP interface eth0 virtual_router_id 51 nopreempt priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.20 } } 备用主库的keepalived配置文件 vi/etc/keepalived/keepalived.conf global_defs { notification_email { lihong@bxjinrong.com } notification_email_fromAlexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MySQL_HA } vrrp_instance VI_1{ state BACKUP interface eth0 virtual_router_id 51 priority 120 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.20 } } 7)mhamanager管理 启动manager nohupmasterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf--ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log2>&1 & 关闭manager masterha_stop--conf=/etc/masterha/app1.cnf 查看manager的状态 masterha_check_status--conf=/etc/masterha/app1.cnf 切换 1启动manager后,master发生故障后会自动切换 2在线切换过程 masterha_stop--conf=/etc/masterha/app1.cnf masterha_master_switch--conf=/etc/masterha/app1.cnf --master_state=alive--new_master_host=192.168.1.120 --new_master_port=3306 --orig_master_is_new_slave--running_updates_limit=10000 相关脚本 1)master_ip_failover #!/usr/bin/envperl use strict; use warnings FATAL=> 'all'; use Getopt::Long; my ( $command, $ssh_user, $orig_master_host, $orig_master_ip, $orig_master_port, $new_master_host,$new_master_ip, $new_master_port ); my $vip= '192.168.1.120'; my$ssh_start_vip = "/etc/init.d/keepalived start"; my$ssh_stop_vip = "/etc/init.d/keepalived stop"; GetOptions( 'command=s' => \$command, 'ssh_user=s' => \$ssh_user, 'orig_master_host=s' =>\$orig_master_host, 'orig_master_ip=s' => \$orig_master_ip, 'orig_master_port=i' =>\$orig_master_port, 'new_master_host=s' => \$new_master_host, 'new_master_ip=s' =>\$new_master_ip, 'new_master_port=i' => \$new_master_port, ); exit &main(); sub main { print "\n\nIN SCRIPTTEST====$ssh_stop_vip==$ssh_start_vip===\n\n"; if ( $command eq "stop" ||$command eq "stopssh" ) { my $exit_code = 1; eval { print "Disabling the VIP onold master: $orig_master_host \n"; &stop_vip(); $exit_code = 0; }; if ($@) { warn "Got Error: $@\n"; exit $exit_code; } exit $exit_code; } elsif ( $command eq "start" ) { my $exit_code = 10; eval { print "Enabling the VIP - $vipon the new master - $new_master_host \n"; &start_vip(); $exit_code = 0; }; if ($@) { warn $@; exit $exit_code; } exit $exit_code; } elsif ( $command eq "status" ) { print "Checking the Status of thescript.. OK \n"; #`ssh $ssh_user\@cluster1 \"$ssh_start_vip \"`; exit 0; } else { &usage(); exit 1; } } # A simple systemcall that enable the VIP on the new master sub start_vip() { `ssh $ssh_user\@$new_master_host \"$ssh_start_vip \"`; } # A simple systemcall that disable the VIP on the old_master sub stop_vip() { return 0unless ($ssh_user); `ssh $ssh_user\@$orig_master_host \"$ssh_stop_vip \"`; } sub usage { print "Usage: master_ip_failover--command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip--orig_master_port=port --new_master_host=host --new_master_ip=ip--new_master_port=port\n"; } 2)master_ip_online_change #!/usr/bin/envperl # Copyright (C) 2011 DeNA Co.,Ltd. # # This program is free software; you canredistribute it and/or modify # it under the terms of the GNU General PublicLicense as published by # the Free Software Foundation; either version2 of the License, or # (at your option) any later version. # # This program is distributed in the hope thatit will be useful, # but WITHOUT ANY WARRANTY; without even theimplied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULARPURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNUGeneral Public License # along with this program; if not, write tothe Free Software # Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston,MA 02110-1301 USA ## Note: This is asample script and is not complete. Modify the script based on your environment. use strict; use warnings FATAL=> 'all'; use Getopt::Long; use MHA::DBHelper; use MHA::NodeUtil; use Time::HiResqw( sleep gettimeofday tv_interval ); use Data::Dumper; my $ssh_user ="root"; my $vip ='192.168.1.20'; my $ssh_start_vip= "/etc/init.d/keepalived start"; my $ssh_stop_vip ="/etc/init.d/keepalived stop"; my $_tstart; my$_running_interval = 0.1; my ( $command, $orig_master_host, $orig_master_ip, $orig_master_port, $orig_master_user,$orig_master_password, $new_master_host, $new_master_ip, $new_master_port, $new_master_user, $new_master_password ); GetOptions( 'command=s' => \$command, 'orig_master_host=s' => \$orig_master_host, 'orig_master_ip=s' => \$orig_master_ip, 'orig_master_port=i' => \$orig_master_port, 'orig_master_user=s' => \$orig_master_user, 'orig_master_password=s' =>\$orig_master_password, 'new_master_host=s' => \$new_master_host, 'new_master_ip=s' => \$new_master_ip, 'new_master_port=i' => \$new_master_port, 'new_master_user=s' => \$new_master_user, 'new_master_password=s' => \$new_master_password, ); exit &main(); subcurrent_time_us { my ( $sec, $microsec ) = gettimeofday(); my $curdate = localtime($sec); return $curdate . " " . sprintf("%06d", $microsec ); } sub sleep_until { my $elapsed = tv_interval($_tstart); if ( $_running_interval > $elapsed ) { sleep( $_running_interval - $elapsed ); } } subget_threads_util { my $dbh = shift; my $my_connection_id = shift; my $running_time_threshold = shift; my $type = shift; $running_time_threshold = 0 unless($running_time_threshold); $type = 0 unless ($type); my @threads; my $sth = $dbh->prepare("SHOWPROCESSLIST"); $sth->execute(); while ( my $ref = $sth->fetchrow_hashref()) { my $id = $ref->{Id}; my $user = $ref->{User}; my $host = $ref->{Host}; my $command = $ref->{Command}; my$state = $ref->{State}; my $query_time = $ref->{Time}; my $info = $ref->{Info}; $info =~ s/^\s*(.*?)\s*$/$1/ ifdefined($info); next if ( $my_connection_id == $id ); next if ( defined($query_time) &&$query_time < $running_time_threshold ); next if ( defined($command) && $command eq "BinlogDump" ); next if ( defined($user) && $user eq "systemuser" ); next if ( defined($command) && $command eq "Sleep" && defined($query_time) && $query_time >= 1 ); if ( $type >= 1 ) { next if ( defined($command) &&$command eq "Sleep" ); next if ( defined($command) &&$command eq "Connect" ); } if ( $type >= 2 ) { next if ( defined($info) && $info=~ m/^select/i ); next if ( defined($info) && $info=~ m/^show/i ); } push @threads, $ref; } return @threads; } sub main { if ( $command eq "stop" ) { ## Gracefully killing connections on thecurrent master # 1. Set read_only= 1 on the new master # 2. DROP USER so that no app user canestablish new connections # 3. Set read_only= 1 on the current master # 4. Kill current queries # * Any database access failure will resultin script die. my $exit_code = 1; eval { ## Setting read_only=1 on the new master(to avoid accident) my $new_master_handler = newMHA::DBHelper(); # args: hostname, port, user, password,raise_error(die_on_error)_or_not $new_master_handler->connect($new_master_ip, $new_master_port, $new_master_user, $new_master_password,1 ); print current_time_us() . " Setread_only on the new master.. "; $new_master_handler->enable_read_only(); if ($new_master_handler->is_read_only() ) { print "ok.\n"; } else { die "Failed!\n"; } $new_master_handler->disconnect(); # Connecting to the orig master, die ifany database error happens my $orig_master_handler = newMHA::DBHelper(); $orig_master_handler->connect($orig_master_ip, $orig_master_port, $orig_master_user,$orig_master_password, 1 ); ## Drop application user so that nobodycan connect. Disabling per-session binlog beforehand $orig_master_handler->disable_log_bin_local(); print current_time_us() . " Drppingapp user on the orig master..\n"; #FIXME_xxx_drop_app_user($orig_master_handler); ## Waiting for N * 100 milliseconds sothat current connections can exit my $time_until_read_only = 15; $_tstart = [gettimeofday]; my @threads = get_threads_util($orig_master_handler->{dbh}, $orig_master_handler->{connection_id} ); while ( $time_until_read_only > 0&& $#threads >= 0 ) { if ( $time_until_read_only % 5 == 0 ) { printf "%s Waitingall running %d threads are disconnected.. (max %d milliseconds)\n", current_time_us(), $#threads + 1,$time_until_read_only * 100; if ( $#threads < 5 ) { print Data::Dumper->new( [$_])->Indent(0)->Terse(1)->Dump . "\n" foreach (@threads); } } sleep_until(); $_tstart = [gettimeofday]; $time_until_read_only--; @threads = get_threads_util($orig_master_handler->{dbh}, $orig_master_handler->{connection_id}); } ## Setting read_only=1 on the currentmaster so that nobody(except SUPER) can write print current_time_us() . " Setread_only=1 on the orig master.. "; $orig_master_handler->enable_read_only(); if ( $orig_master_handler->is_read_only()) { print "ok.\n"; } else { die "Failed!\n"; } ## Waiting for M * 100 milliseconds sothat current update queries can complete my $time_until_kill_threads = 5; @threads = get_threads_util($orig_master_handler->{dbh}, $orig_master_handler->{connection_id} ); while ( $time_until_kill_threads > 0&& $#threads >= 0 ) { if ( $time_until_kill_threads % 5 == 0) { printf "%s Waitingall running %d queries are disconnected.. (max %d milliseconds)\n", current_time_us(), $#threads + 1,$time_until_kill_threads * 100; if ( $#threads < 5 ) { print Data::Dumper->new( [$_])->Indent(0)->Terse(1)->Dump . "\n" foreach (@threads); } } sleep_until(); $_tstart = [gettimeofday]; $time_until_kill_threads--; @threads = get_threads_util($orig_master_handler->{dbh}, $orig_master_handler->{connection_id} ); } print "Disabling the VIP on oldmaster: $orig_master_host \n"; &stop_vip(); ## Terminating all threads print current_time_us() . " Killingall application threads..\n"; $orig_master_handler->kill_threads(@threads) if ( $#threads >= 0); print current_time_us() . "done.\n"; $orig_master_handler->enable_log_bin_local(); $orig_master_handler->disconnect(); ## After finishing the script, MHAexecutes FLUSH TABLES WITH READ LOCK $exit_code = 0; }; if ($@) { warn "Got Error: $@\n"; exit $exit_code; } exit $exit_code; } elsif ( $command eq "start" ) { ## Activating master ip on the new master # 1. Create app user with write privileges # 2. Moving backup script if needed # 3. Register new master's ip to thecatalog database # We don't returnerror even though activating updatable accounts/ip failed so that we don'tinterrupt slaves' recovery. # If exit code is0 or 10, MHA does not abort my $exit_code = 10; eval { my $new_master_handler = newMHA::DBHelper(); # args: hostname, port, user, password,raise_error_or_not $new_master_handler->connect($new_master_ip, $new_master_port, $new_master_user, $new_master_password,1 ); ## Set read_only=0 on the new master $new_master_handler->disable_log_bin_local(); print current_time_us() . " Setread_only=0 on the new master.\n"; $new_master_handler->disable_read_only(); ## Creating an app user on the new master print current_time_us() . " Creatingapp user on the new master..\n"; FIXME_xxx_create_app_user($new_master_handler); $new_master_handler->enable_log_bin_local(); $new_master_handler->disconnect(); ## Update master ip on the catalogdatabase, etc print "Enabling the VIP - $vip onthe new master - $new_master_host \n"; &start_vip(); $exit_code = 0; }; if ($@) { warn "Got Error: $@\n"; exit $exit_code; } exit $exit_code; } elsif ( $command eq "status" ) { # do nothing exit 0; } else { &usage(); exit 1; } } # A simple systemcall that enable the VIP on the new master sub start_vip() { `ssh $ssh_user\@$new_master_host \"$ssh_start_vip \"`; } # A simple systemcall that disable the VIP on the old_master sub stop_vip() { `ssh $ssh_user\@$orig_master_host \"$ssh_stop_vip \"`; } sub usage { print "Usage:master_ip_online_change --command=start|stop|status --orig_master_host=host--orig_master_ip=ip --orig_master_port=port --new_master_host=host--new_master_ip=ip --new_master_port=port\n"; die; } MHA测试: MHA的三种工作情况: 一、自动Failover 必须启动mha Manager监控,否则无法自动切换,切换包括以下步骤: 1、配置文件检查阶段(包括整个集群的配置文件) 2、宕机的MASTER处理,这个阶段包括虚拟IP摘除操作, 3、复制DEAD MASTER和最新SLAVE相差的RELAY LOG,并保存MHA MANAGER具体的目录下 4、识别含有最新更新的SLAVE 5、应用从MASTER保存的二进制日志事件 6、提升一个SLAVE为新的MASTER进行复制 7、使其他的SLAVE连接新的MASTER进行复制 ###在自动切换之后监控就停止了 二、手动切换 1、不需要开启mha manager监控 2、如果MHA MANAGER检测到没有DEAD的SERVER将报错,并结束FAILOVER,所以手动切换必须在主MYSQL宕掉才可以 三、在线进行切换 1、检测复制设置和确定当前主服务器 2、确定新的主服务器 3、阻塞写入到当前主服务器 4、等待所有从服务器赶上复制 5、授予写入到新的主服务器 6、重新设置从服务器 #1、自动识别MASTER和SLAVE问题,VIP的移动 3、负载均衡问题,当有机器离开集群时,负载比例 四、切换满足条件 1、所有SLAVE的IO、SQL线程都在运行 2、所有的SHOW SLAVE STATUS的输出中SECONDS_BEHIND_MASTER参数小于或等于running_updates_limit秒,如果在切换过程中不指定,默认为1秒 3、在MASTER端,通过SHOW PROCESSLIST输出,没有一个更新花费的时间大于RUNNING ##在线切换需要调用master_ip_online_change这个脚本,貌似这个脚本不够完善,,需要自己修改 软件包下载: http://down.51cto.com/data/2258543 http://down.51cto.com/data/2258544 本文转自 DBAspace 51CTO博客,原文链接:http://blog.51cto.com/dbaspace/1898371

优秀的个人博客,低调大师

hadoop集群搭建

1.准备Linux环境 1.0先将虚拟机的网络模式选为NAT 1.1修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=itcast ### 1.2修改IP 两种方式: 第一种:通过Linux图形界面进行修改(强烈推荐) 进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply 第二种:修改配置文件方式(屌丝程序猿专用) vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" ### HWADDR="00:0C:29:3C:BF:E7" IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c" IPADDR="192.168.1.101" ### NETMASK="255.255.255.0" ### GATEWAY="192.168.1.1" ### 1.3修改主机名和IP的映射关系 vim /etc/hosts 192.168.1.101itcast 1.4关闭防火墙 #查看防火墙状态 service iptables status #关闭防火墙 service iptables stop #查看防火墙开机启动状态 chkconfig iptables --list #关闭防火墙开机启动 chkconfig iptables off 1.5 修改sudo su root vim /etc/sudoers 给hadoop用户添加执行的权限 关闭linux服务器的图形界面: vi /etc/inittab 1.5重启Linux reboot 2.安装JDK 2.1上传alt+p 后出现sftp窗口,然后put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz 2.2解压jdk #创建文件夹 mkdir /home/hadoop/app #解压 tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app 2.3将java添加到环境变量中 vim /etc/profile #在文件最后添加 export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585 export PATH=$PATH:$JAVA_HOME/bin #刷新配置 source /etc/profile 3.安装hadoop2.4.1 先上传hadoop的安装包到服务器上去/home/hadoop/ 注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop 伪分布式需要修改5个配置文件 3.1配置hadoop 第一个:hadoop-env.sh vim hadoop-env.sh #第27行 export JAVA_HOME=/usr/java/jdk1.7.0_65 第二个:core-site.xml <!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://weekend-1206-01:9000</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop-2.4.1/tmp</value> </property> 第三个:hdfs-site.xml <!-- 指定HDFS副本的数量 --> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.secondary.http.address</name> <value>192.168.1.152:50090</value> </property> 第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml) mv mapred-site.xml.template mapred-site.xml vim mapred-site.xml <!-- 指定mr运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> 第五个:yarn-site.xml <!-- 指定YARN的老大(ResourceManager)的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>weekend-1206-01</value> </property> <!-- reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> 3.2将hadoop添加到环境变量 vim /etc/proflie export JAVA_HOME=/usr/java/jdk1.7.0_65 export HADOOP_HOME=/itcast/hadoop-2.4.1 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile 3.3格式化namenode(是对namenode进行初始化) hdfs namenode -format (hadoop namenode -format) 3.4启动hadoop 先启动HDFS sbin/start-dfs.sh 再启动YARN sbin/start-yarn.sh 3.5验证是否启动成功 使用jps命令验证 27408 NameNode 28218 Jps 27643 SecondaryNameNode 28066 NodeManager 27803 ResourceManager 27512 DataNode http://192.168.1.101:50070 (HDFS管理界面) http://192.168.1.101:8088 (MR管理界面) 4.配置ssh免登陆 #生成ssh免登陆密钥 #进入到我的home目录 cd ~/.ssh ssh-keygen -t rsa (四个回车) 执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥) 将公钥拷贝到要免密登陆的目标机器上 ssh-copy-id localhost --------------------------- ssh免登陆: 生成key: ssh-keygen 复制从A复制到B上: ssh-copy-id B 验证: ssh localhost/exit,ps -e|grep ssh ssh A #在B中执行 启动hadoop集群:(此处配置搞了一天!!!!) 1、注意关闭防火墙 2、修改hosts里面文件,三个都需要加 192.168.162.130 mini130 192.168.162.131 mini131 192.168.162.132 mini132 192.168.162.133 mini133 3、slaves文件中也需要配置 192.168.162.130 mini130 192.168.162.131 mini131 192.168.162.132 mini132 192.168.162.133 mini133 4、配置hadoop中的4个xml文件中写mini130这样的 5、把master配置好后,拷贝到其他的服务器上面即可 hadoop-daemon.sh start namenode hadoop-daemon.sh stop namenode hadoop-daemon.sh start datanode hadoop-daemon.sh start datanode yarn-daemon.sh stop resourcemanager yarn-daemon.sh start resourcemanager 本文转自yushiwh 51CTO博客,原文链接:http://blog.51cto.com/yushiwh/1910594,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

JDK

JDK

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。