操作系统
- 主要用于管理计算机的硬件以及其他的应用软件。所有的应用软件必须给予操作系统才能在计算机上运行
- 运行在个人PC上:XP、windows系列、MacOSX
- 运行在手机端(移动端):Android、IOS
- 运行在服务器端:Linux、Windows server
- 服务器通常是指一台安装了服务器软件的高性能计算机
Linux操作系统
-
诞生于1991年,是一款类Unix的操作系统,继承了Unix操作系统的一些特性,如以网络通信稳定为重心
-
主要应用在服务器上
-
Linux发行版本
- 国外:Ubuntu、RedHat、centos、Suse等
- 国内:红旗等
-
安装Centos版本
-
配置网络环境
- 桥接:虚拟机会以当前宿主机所在局域网中的一台真实的计算机出现;虚拟机采用桥接模式,类似于当前网段中的一台真实计算机,属于同一个网段,可以共享当前网络环境的资源
- NET模式:把宿主机当作路由器,建立连接;此时虚拟机直接共享宿主机网络资源,与宿主机所在网络环境原则上没有冲突
-
SecureCRT客户端使用
- Hostname:远程服务器系统的IP
- Username:root是超级管理员
-
Winscp工具使用
- 用与在宿主机和虚拟机之间进行文件的传输
- 文件协议:SFTP
- 主机名:IP地址
- 用户名root
- 端口号22为默认
Linux系统目录结构
-
bin:(binaries)存放二进制可执行文件
-
sbin:(super user binaries)存放二进制可执行文件,只有root可以访问
-
etc:(etcetera)存放系统配置文件
-
usr:(unix shared resources)用于存放共享的系统资源
-
home:存放用户文件的根目录
-
root:超级用户目录
-
dev:(devices)用于存放设备文件
-
lib:(library)存放跟文件系统中的程序运行所需要的共享库及内核模块
-
mnt:(mount)系统管理员安装临时文件系统的安装点
-
boot:存放用于系统引导时使用的各种文件
-
tmp:(temporary)用于存放各种临时文件
-
var:(variable)用于存放运行时需要改变数据的文件
-
命令书写要求
- 命令及其参数严格区分大小写
- 文件名严格区分大小写
-
文件路径
- 绝对路径:写法一定由根目录 " / "写起,比如 /user/local/sbin
- 相对路径:写法不是由根目录 " / "写起,如执行命令:cd /home?cd.admin,那么当前所处目录为 /home/admin下,/home为绝对路径,admin则为相对路径,相对于当前/home目录的一个位置
-
常用命令
vi /etc/sysconfig/network-scripts/ifcfg-eth0:进入到网卡信息编辑 ONBOOT=yes 开机启动网卡 BOOTPROTO=dhcp dhcp:自动获取IP static:手动指定IP ip addr 查看网络ip地址 ifconfig命令 1. 显示开启状态的网卡信息 例:ifconfig 2. 查看所有网卡信息 例:ifconfig -a 3. 查看指定网卡的信息 例:ifconfig 网卡名 4. 关闭指定的网卡 例:ifconfig 网卡名 down 5. 开启指定的网卡 例:ifconfig 网卡名 up 关机命令: 1. halt 立刻关bai机 2. poweroff 立刻关机 3. shutdown -h now 立刻关机(root用户使用) 4. shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启 重启命令: 1. reboot 2. shutdown -r now 立刻重启(root用户使用) 3. shutdown -r 10 过10分钟自动重启(root用户使用) 4. shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启 cd命令:通过指定一个绝对路径或相对路径,使用cd可以进入到目标目录下 例: cd /etc 进入到etc目录下 cd sysconfig 在etc下执行,进入到 /etc/sysconfig下 cd ./ 当前目录 cd .. 返回上一级目录 cd ~ 或 cd 进入到用户的家目录,如果用户是root用户,则进入到 /root目录 pwd命令:打印当前所在目录 ls命令:显示指定目录下的文件目录清单,相当于dos下的dir命令,而且其参数更加丰富多样 1. 显示当前目录 ls 2. 可以显示指定目录下文件清单 如:ls/etc 显示/etc下的文件清单 3. 可以显示隐(含)藏文件 例:ls -a 参数-a,显示隐含文件,若文件名以 . 开头,则认为是隐含的,进而普通的ls命令不显示以 . 开头的文件,所以要完全显示某目录下的文件清单,必须加上-a参数 4. 可以长格式的输出文件名 例:ls -l 参数-l,以长格式列表输出指定目录中的文件清单 长格式文件说明 文件类型 文件权限 连接数 属主 属组 大小 日期 时间 文件名 d rwxrwxr-x 2 user1 user1 4096 Aug 17 09:10 ceshi linux文件有三种典型的权限,即 r 读权限,w 写权限,x 执行权限;在长格式输出中在文件类型的后面有九列权限位,实际上是针对不同用户而设定的 属主的权限 熟组的权限 其他用户的权限 rwx rwx r-x 5. 递归显示 例:li -R 参数-R,递归显示指定目录下的文件清单,即会显示指定目录分支内各子目录中的文件清单 mkdir命令 1. 在当前目录下创建目录ceshi 例:mkdir ceshi 2. 创建多级目录 例:mkdir -p a/b/c 参数-p,如果要创建的目录的父目录不存在,则先创建其父目录,再创建该目录;如果指定的目录存在,则不影响原目录 touch命令 创建空文件 例:touch myfile 如果myfile不存在,则创建一个大小为0字节的myfile的空文件,如果myfile已存在,则将改变myfile的最后修改时间 cp命令 1. 复制文件 例:cp /etc/hosts abc/ 将/etc目录下的hosts文件复制到当前目录中的abc下 2. 递归赋值 例:cp -R/etc/ abc/ 参数-R的含义为递归操作,将/etc目录下的所有子目录和文件都复制到abc目录中 cp-R/etc/ . .代表当前目录 mv命令 将文件移动到目录中 例:mv myfile mydir1 如果mydir1存在且是个目录,则将文件myfile移动到目录mydir1中 文件改名 例:mv myfile myfile2 如果myfile2不存在,则将文件或目录改名为myfile2 rmdir命令 删除指定的空目录,只能删除目录类型文件 例:rmdir mydir1 rm命令 1. 删除文件 例:rm php.ini 删除指定的文件php.ini 2. 删除目录 例:rm -rf abc 参数-r是递归的意思,即可以删除非空目录;参数-f是强制的意思 3. 自杀式删除,从根目录等全部删除 例:rm -rf /* cat命令 1. 显示文件内容 例:cat myfile 显示指定文件myfile内容 2. 创建文件 例:cat > myfile1 Welcome to Linux World 按ctrl+d结束输入,利用输出重定向符 ">" 来创建简短的文本文件myfile1 more / less命令 例:moer /etc/services 分屏显示指定文件httpd.conf的内容,非常适合显示超过一屏的文本文件。没按一下空格键,向后翻一页;没按一次回车键,向后翻一行 例:less /etc/services 与more功能相似,less功能更强大,支持PageUp键向前翻屏以及PageDown向后翻屏,q退出查看 head命令 1. 显示文件10行内容 例:head /etc/services 默认显示指定文件的前十行内容 2. 显示文件的前n行内容 例:head -n 20 /etc/services 参数-n设置显示指定行数,此时显示文件前20行内容 tail命令 1. 显示文件后10行内容 例:tail aliases 显示aliases文件最后十行内容 2. 显示文件后n行内容 例:tail -n 1 aliases 显示aliases文件最后n行内容,此时显示文件最后一行 3. 实时查看文件内容 例:tail -f 文件 --help帮助文档
Linux的用户管理模型
-
Linux是一个支持多用户远程操作的系统;采用用户组的模式管理用户的权限
-
Linux中每个用户有唯一的用户标识符UID,该UID是一个无符号整数,同时每个用户也必须至少属于一个组,也有组标识符GID,其中UID和GID独立编号
-
文件属性的操作:
groupadd命令 1. 创建组账号 例:groupadd mygroup1 创建一个新组mygroup1,其GID号为已存在最大的GID号的下一个顺序编号;创建一个组的同时会在/etc/group文件中为该组增加相应的一行,用来记录该组的名称、GID号及成员等信息 2. 创建组账号同时指定GID号 例:groupadd -g 100 mygroup1 创建一个新组mygroup1,GID号为100,如果GID号重复,则会提示已存在;-g用来设置用户的主要组,每个用户都有一个主要组 useradd命令 1. 创建用户账户 例:useradd user1 创建一个用户user1,同时在/etc/passwd文件和/etc/shadow文件增加一行,并自动为用户创建相应的主目录:/home/user1;/etc/passwd文件记录了系统中每个用户的用户名、UID号、GID号、主目录、shell等信息;用户的口令原来也存放在此文件中,现在为了保证安全采用了影子口令文件/etc/shadow来保存每个用户的口令 2. 创建用户账号并设置相应属性值 例:useradd -u 600 -g mygroup1 -G mygroup2 -d /home/student1 s1 创建用户s1,-u指定UID号为600,-g指定用户的主要组为mygroup1,-G指定用户的附加组为mygroup2,每个用户可以有多个附加组;-d指定用户的主目录为/home/student1 passwd 用户名 1. 指定新用户密码 2. 禁止用户登录 例:passwd -l user1 成功反馈:passwd:Success 参数-l可以给指定用户user1加锁,即禁止该用户登录 3.恢复用户登录 例:passwd -u user1 成功反馈:passwd:Success 参数-u可以给指定的用户user1解锁,即恢复该用户登录 4. 删除用户口令 例:passwd -d user1 成功反馈:passwd:Success 参数-d可以删除指定的用户user1口令,即以user1登录时无需口令 userdel命令 1. 删除用户 userdel user1 删除指定的用户user1 2. 删除用户的同时删除其主目录 userdel -r user1 删除指定的用户user1,同时删除其主目录 groupdel命令 删除指定的组 例:groupdel mygroup1 当某个组是某现有用户的主要组时,不能被删除 usermod命令 例:usermod -u 601 -g 501 -G 1000 s1 将已存在的用户s1的UID号修改为601,主组修改为501,属组修改为1000;一个用户只能有一个主组,可以有多个属组 chown命令 1. 改变文件的属主 例:chown user1 hello.txt 将指定文件hello.txt的属主(所有者)改为user1 2. 递归改变文件的属主 例:chown -R user1 mydir 参数-R表示递归,可以深入到指定目录中的每一层,将所有子目录和文件的属主(所有者)改为指定的用户;本例中将mydir目录中所有子目录和文件的属主设定为user1 chgrp命令 1. 改变文件的属组 例:chgrp mygroup1 hello.txt 将指定文件hello.txt的属组改为mygroup1 2. 递归改变文件的属组 例:chgrp -R mygroup1 mydir 参数-R表示递归,可以深入到指定目录到每一层;将所有子目录和文件的属组改为指定的组;本例中将mydir目录中所有子目录和文件的属组设定为mygroup1 chmod命令 1. 字母方式 图中字母u针对属主、g针对属组、o针对其他用户、a针对所有用户 =表示赋予(设置)指定权限,要注意它会覆盖原权限,+表示在原有权限的基础上增加指定权限,—表示在原有权限的基础上去掉指定权限 r、w、x三种权限,可以单独使用也可以组合使用 r表示读权限, w表示写权限, x表示执行权限 属主操作权限 属组操作权限 其他用户操作权限 rwx --- --- 例:chmod u+x host.conf 为文件host.conf的属主增加执行权限 例:chmod g-w,o=x host.conf 将文件host.conf的属组去掉写权限,同时将其他用户设置为只有执行权限,而文件属主的权限不变 例:chmod a=r host.conf 将改变文件所有属性 2.数字方式 需要注意数制转换的问题,先将每个权限位化成二进制数,其中如果某权限位是“-”则用0来表示,否则用1来表示,然后将九列权限分为三组(每三位一组),再将每组化为一个八进制数 例:某文件有权限rwxrw-r--,转换为二进制数为111110100,再化为八进制数764 例:chomd 677 host.conf 读写执行
建立文件链接操作命令
-
简化对文件的操作
- 硬连接:ln 文件 连接名
- 不支持目录的操作,只能是文件
- 删除源文件(原始饮用),不影响硬连接的操作
- 软连接:ln -s 文件名/目录名 连接名
- 软连接同时支持文件和目录的操作
- 删除源文件,会导致软连接不可用
- 通过操作软连接,修改文件的内容,本质上还是修改的源文件的内容
- 硬连接:ln 文件 连接名
-
查找命令
which命令 显示命令的绝对路径 例:which cp 该命令只能在命令搜索路径指定的目录中去查找命令或程序 whereis命令 查询指定命令所在目录以及帮助文档所在目录 例:whereis ln find命令:find 目标目录 -name|type|size|perm "条件" 1. 根据文件名查找 例:find / -name "dhcpd*" 参数-name指明按文件名进行查找,即从 / 目录开始查找以dhcpd开头的所有文件 2. 根据文件的类型查找 l代表连接类型 f代表文件类型 d代表目录类型 例:find /var -type d -print 从 /var目录下开始查找类型为目录的文件,其中参数-print是显示到屏幕上,通常省略 3. 根据文件的大小查找 例:find /etc -size 8 从/etc下开始查找大小为8块的文件,默认512字节为1块,若认为块大小为1k,则应写8k;其他可以使用的单位有c(字节)、w(双字节)、M(兆字节)、G(吉字节) 4. 根据文件的修改时间查找 例:find . -cmin -5 从当前目录下查找5分钟之内修改过的文件,如果把-5改为+5,则表示查找5分钟以前修改过的文件。不带+或-,则认为整五分钟; 例:find . -ctime -5 此时时间单位为天 5. 根据文件的权限查找 例:find mytmp -perm 755 查找mytmp目录下的权限为755的文件 例:find mytmp -perm +755 查找mytmp目录下满足755中任何一种权限的文件,即符合任何一个指定的权限位即可 例:find mytmp -perm -755 查找mytmp目录下的权限至少满足755的文件,即指定的所有权限位必须符合才算满足查询条件
-
文件内容操作命令
grep命令 1. 在指定的文件中查找包含特定的字符串的行 例:grep "bind" host.conf 在文件host.conf中查找包含字符串"bind"的行 例:grep "network" /ect/*.conf 利用通配符在多个文件中查找包含特定的字符串的行;此时是在/etc下扩展名为 .conf文件中查找包含字符串"netword"的行 2. 查找不包含指定字符串的行 例:grep -v "bind" /etc/host.conf 查找/etc/host.conf中查找不包含字符串"bind"的行 3. 组合命令 例:find . -type f | grep "条件" 按照grep指定的条件,从find . -type f 查询的结果集中过滤内容
-
关闭Centos6.5防火墙
关闭防火墙,但再次开机会自动开启service iptables stop //Centos7命令:systemctl stop firewalld 关闭防火墙,关闭开机启动chkconfig iptables off 查看防火墙状态service iptables status //Centos7命令:systemctl status firewalld
-
快照功能:快照可以将当前系统的状态,以一个快照文件的方式保留下来;当开发人员对系统进行了误操作或事系统因为自然原因宕机等故障时,可以使用快照文件使系统及时的恢复到快照保存的正常状态
- 生成快照会占用磁盘空间,大量的快照会侵占服务器资源,企业开发中通常不用
-
软件安装
查看操作系统位数 uname -r rpm安装 1. 安装命令 rpm -ivh rpm软件包 其中i为安装软件,v显示安装过程,h显示安装进度,rpm包中内置安装目录 2. 查询系统中安装的软件包 例:rpm -qa 查询系统中安装的软件包列表,其中参数-q的功能是查询,参数-a的功能是所有的 例:rpm -qa | grep "jdk" 查询并筛选 3. 查询软件包中文件清单 例:rpm -ql php 查询已安装的软件包php中的文件列表,其中参数-l的功能是列出指定软件包中的文件 4. 卸载指定的软件包 例:rpm -e php 卸载已安装的软件包php,参数-e的功能是卸载;注意此命令当使用账号身份不同是,普通用户只能执行查询操作 rpm -uvh xxx.rpm 升级对应安装包 解压缩安装 tar命令 tar类似于windows压缩工具,对文件压缩和解压缩 -c:建立一个压缩文件(未压缩) -x:解开一个压缩文件 -z:是否需要gzip压缩,扩展名为gz -Z:调用compress命令来压缩,扩展名为Z -j:调用bzip2命令来压缩,扩展名为bz2 -v:压缩过程中显示文件 -f:指定文档名,在f之后立即接档名,其他位置不限,但f必须接档名 例:tar -cvf test.tar a.txt b.txt 只打包不压缩,把a.txt和b.txt打包,包名为test.tar 例:tar -xvf test.tar 解不压缩的包 例:tar -czvf test.tar.gz a.txt b.txt 打包并压缩,压缩包名为test.tar.gz 例:tar -xzvf test.tar.gz 解包并解压缩 例:tar -zxvf test.tar.gz -C 解包到目标目录 源码安装 1. 初始化配置信息,基本上所有源码安装都会提供configure文件 ./configure 2. 编译源码为可安装的程序 make 3. 安装到系统 make install 如nginx,由C语言编写 yum源安装:在线安装 yum install 安装简名,有确认提示 yun install -y 安装简名,没有确认直接安装 yum install vim 高亮展示文本编辑 wget代表网络直接下载资源到虚拟机 需要先下载wget,安装wget:yum install wget wget 资源的url
-
配置jdk环境变量
用户级别环境变量:用户家目录有一个隐藏文件 .bash_profile PATH=$PATH:$HOME/bin //因为是用户级别,所有引用系统环境变量 export PATH export CLASSPATH=. export JAVA_HOME=/usr/java/jdk1.7.0_79 //rpm通常默认安装在usr目录下 export PATH=$PATH:$JAVA_HOME/bin //会覆盖掉默认的引用系统环境变量,所有在引用jdk时再次引入系统环境变量 //$PATH引用系统默认环境变量值,多个环境变量用:隔开 系统级别环境变量:/etc/profile 重新加载文件的内容 source .bash_profile 卸载: rpm
-
配置tomcat
解压缩:tar -zxvf apache-tomcat-7.0.69.tar.gz //root根目录下 将开发调试好的Web项目以war包形式部署到Linux服务器上
-
进程相关命令
ps命令 1. 不带参数 例:ps 查询在当前控制台上运行的进行 2. 查看所有进程 例:ps -aux 查询系统中所有运行的进程,包括后台进程,其中参数a是所有进程,参数x包括不占用控制台的进程,参数u显示用户 3. 查看所有进程 例:ps -ef 查询系统中所有运行的进程,包括后台进程,而且可以显示出每个进程的父进程号(守护进程,有关联的) 查看控制台进程 例:ps -aux | grep 关键字 例:ps -ef | grep 关键字 kill命令 1. 结束一个进程,杀掉指定进程 例:kill 进程号(pid) kill命令可以杀掉一个进程,普通用户只能杀掉自己的进程,同时被保护的进程无法杀掉 2. 强制杀掉指定进程 例:kill -9 进程号 强制终止进程的运行,-9代表强制的意思;实际上kill命令是向该进程发送信号,该进程接到信号后决定是否停止运行,有些守护进程必须要收到参数9才终止运行 pstree命令 --- 进程多时使用,通常不使用 1. 数状格式显示进程列表 例:pstree 以数状格式显示系统的进程列表 2. 带进程号的数状格式显示进程列表 例:pstree -p 以数状格式显示系统的进程列表,并标识出每个进程的进程号 top命令 查看进程 例:top 动态的显示系统中的进程
-
加载系统配置文件并生效命令
reboot重启虚拟机 source /etc/profile
-
文本编辑命令
vi命令 对文本文件进行编辑 vi 文件名 如果指定文件名的文件存在,则进入文件进行编辑 如果指定文件名的文件不存在,则创建一个新文件,并进入编辑。:wq!:保存新创建的文件 1. 普通命令模式 例:删除当前行:dd 删除多行:ndd 如5dd、3dd 复制当前行:yy 复制多行:nyy 黏贴:p 撤销:u 光标定位到文档首行:gg 搜索指定字符:/word(向下查找) ?word(向上查找) 2. 底线命令模式 例:退出不保存: :q! 退出并保存: :wq! 3. 编辑模式 例:普通命令模式下输入i进行文件编辑即可
克隆虚拟机
-
克隆操作是由VMware提供的一种方便于我们学习的操作,克隆操作会生成一个与母体系统状态一样的虚拟机
-
两种克隆方式
- 链接克隆:对原始虚拟机的引用,所需的存储磁盘空间较少,但是必须能够访问原始虚拟机才能运行
- 完整克隆:是原始虚拟机当前状态的完整副本,此副本虚拟机完全独立,可以拷贝到其他的计算机进行使用;但是需要较多的存储磁盘空间
-
对克隆机的处理
-
删除保存有原始虚拟机网卡初始化信息的文件,确保克隆机网络没有问题
rm -rf /etc/udev/rules.d/70-persistent-net.rules
-
修改主机名
vi /etc/hosts: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.211.55.12 master vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=master 修改完需要重启虚拟机 reboot
-
Web应用架构的演变
- 单体架构(单机架构)
- 网站的用户量比较少的阶段,将应用程序和存储系统部署在同一台计算机上
- 应用程序:主要任务完成相关业务逻辑的处理和运算,基于内存运行,需要高运算能力的CPU
- 存储系统:占用磁盘空间,对磁盘空间的需求为最主要的
- 多机架构(以两台为例)
- 根据应用程序和存储系统的各自特点进行最优的部署和硬件配置
- 一台CPU运算能力高:部署应用程序
- 一台存储能力强:部署存储系统
- 集群:提高整个网站的吞吐量(处理请求的数量)
- 高可用集群
- 数据库的高可用
- 数据库存储系统(主)
- 数据库存储系统(从):同步主存储系统的数据
- 此时可以进行读写分离,写操作在主存储系统操作,读在从存储系统操作
- 因为此时地址不统一,所有使用数据库中间件(mycat)来访问存储系统,负责统一数据库的IP等
- 负载均衡式集群:nginx,指对于来自客户端的大量请求进行均衡的分发到服务器的每一个节点上
- 代理服务器:
- 需要明确代理的集群节点信息
- 需要进行请求的分发,负载均衡
- 统一多个服务器的IP
- 负载均衡策略:
- 轮巡(对服务器的分发策略为一个一个使用)
- 基于最小连接数
- 基于权重(服务器的新旧,负载能力不同)
- ip_hash(对用户的电脑ip取hash码值来分配服务器)
- 代理服务器:
- 科学计算集群:通常国家科研机构等使用
- 高可用集群
Linux安装mysql
-
安装mysql,可以直接使用yum安装
-
centos6.5中rpm安装
rpm -ivh --nodeps --force perl-*.rpm rpm -Uvh mysql-libs-5.1.73-7.e16.i686.rpm rpm -ivh mysql-5.1.73-7.el6.i686.rpm mysql-server-5.1.73-7.el6.i686.rpm
-
启动mysqlmarkdown
service mysqld start
-
进入mysql
mysql -u root -p 此时无密码,直接回车即可
-
暴力修改外部访问权限,仅限学习使用
use mysql; select user,password,host from user; //权限表 delete from user where host != '127.0.0.1'; update user set password=password('123456') //修改登录数据库密码 update user set host='%' //权限设置为所有外部均可连接 flush privileges; //修改的权限进行提交
主从搭建
-
测试两台Linux的mysql是否连通
mysql -u root -p -h 10.211.55.12 -P 3306 mysql -u root -p -h 10.211.55.13 -P 3306
-
连通后配置mysql文件
/etc/my.cnf #在配置文件中加入 server-id=1 //唯一 log-bin=mysql-bin log-slave-updates slave-skip-errors=all 另一个Linux的mysql配置文件 server-id=2 //唯一 log-bin=mysql-bin log-slave-updates slave-skip-errors=all
-
查看配置是否生效
重启mysql service mysqld restart show variables like 'server_id'; 查看配置的server_id是否生效
-
查看主节点的日志文件以及文件位置
mysql下: show master status;
-
配置从服务器
在mysql下执行: change master to master_host='10.211.55.12', //主机IP master_user='root', //用户名 master_password='123456', //密码 master_log_file='mysql-bin.000001', //同步的文件位置;与上一步查出来的对应,一般不会变 master_log_pos=106;
-
开启从机
slave start;
-
查看从节点状态
show slave status; //没有格式化,太乱 show slave status\G; //格式化显示从节点状态 //核心 *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.211.55.12 //主机ip Master_User: root //主机用户名 Master_Port: 3306 //主机短端口 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 106 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes //同步数据,网络也是用IO传输数据 Slave_SQL_Running: Yes //这两个是关键
Centos6.5安装Mycat
-
核心功能:读写分离、对数据库垂直拆分、对数据库水平拆分
- 垂直拆分:不同的表拆分到不同的库
- 水平拆分:对单表拆分到不同的库
-
核心功能是分库分表,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或其他数据库里
-
可以看作是一个数据库代理,用MySQL客户端工具和命令行访问,其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信
-
解压即可
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 目录结构: 核心bin:启动相关命令 conf:配置文件 logs:Mycat运行过程中的日志信息
-
建议先处理配置
vi schema.xml 的部分标签: schema标签:代表数据库实例 name:逻辑库名字 checkSQLschema:false sqlMaxLimit:查询数据最多返回条数,性能优化配置 dataNode:数据节点 dataNode标签:可以有多个 name对应schema的name database:对应Mysql数据库中子库的名字,指定让Mycat代理哪个子库 dataHost:配置对应子库的具体主机服务器 dataHost标签: name对应dataNode中的name heartbeat:心跳检测机制,提高集群可用性,监控主机是否有问题 balance="1" 一个集群下一个主有几个从 内部writeHost标签: host:要连接主机的名字,可以写ip便于阅读;负责读的数据库 url:ip和端口 user:用户名 password:密码 内部readHost标签:读写分离;指定从机负责写 host:从机名字 url:ip和端口 user:用户名 password:密码 <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="MYDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema> <dataNode name="dn1" dataHost="dh1" database="test" /> <dataHost name="dh1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="master1" url="10.211.55.12:3306" user="root" password="123456"> <readHost host="slave" url="10.211.55.13:3306" user="root" password="123456"></readHost> </writeHost> </dataHost> </mycat:schema>
-
编写server.xml
property标签: <property name="serverPort">8806</property>: 访问Mycat端口 <property name="managerPort">9066</property>:监控管理Mycat使用 把其中<user name="root">标签改为使用的schema的name <user name="root"> <property name="password">123456</property> <property name="schemas">MYDB</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">MYDB</property> <property name="readOnly">true</property> //此用户权限只能读 </user>
-
启动
Mycat下的bin下: ./startup_nowrap.sh ps -ef查看进程看Mycat是否启动成功 root 1412 1 0 18:02 ? 00:00:54 /usr/java/jdk1.7.0_79/bin/java -DMYCAT_HOME=/root/mycat -classpath /root/ 用mysql和命令行即可访问mycat 登录Mycat mysql -u root -p -h 10.211.55.14 -P8066
-
安装nginx并使用nginx做负载均衡的代理服务器
-
源码安装,由C语言编写,故需要先安装C语言环境
安装C语言,可用yum安装 rpm -ivh --nodeps --force *.rpm 在gcc包下 安装pcre rpm -ivh --nodeps --force *.rpm 在pcre包下 安装zlib rpm -ivh --nodeps --force *.rpm 在zlib包下
-
初始化配置信息,基本上所有源码安装都会提供configure文件 ./configure
-
编译源码为可安装的程序 make
-
安装到系统 make install
-
配置nginx信息
// cd /usr/local/nginx/ 配置代理服务器的nginx列表 http{ #gzip on; 前面不需要改动 //配置服务器列表 upstream tomcat7{ ip_hash; //不写为默认均衡策略 server 10.211.55.15:8080; server 10.211.55.17:8080; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://tomcat7; root html; index index.html index.htm; } } upstream关键字,名字自己确定,其中括号内第一行为负载均衡策略,不写的话为默认负载均衡策略为轮巡 在server内部的location里配置关联 proxy_pass http://tomcat7; 代理监听的地址
-
使配置生效,重启nginx
./nginx -s reload 停止ngnix: ./nginx -s stop
-
测试
默认端口为80 10.211.55.16:80