• 关于

    linux阵列

    的搜索结果

问题

如何在Linux上组建磁盘阵列

elainebo 2019-12-01 21:06:14 6414 浏览量 回答数 0

回答

Re巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力 这么多应用,想解决IO问题就必须使用更快的磁盘和多级CACHE系统,阿里云不会直接采购闪盘阵列这么做的,成本太高。

fevath 2019-12-02 01:20:54 0 浏览量 回答数 0

回答

Re关于阿里云的IO,发现以前的想法太单纯了 这个要一分为二来看,Ucloud的IO高,是因为他们用了SSD硬盘,而阿里云业务拓展的比较早,所以基本都是SAS这种硬盘,10块SAS硬盘组阵列速度也赶不上一块企业级的SSD硬盘,而且一个SAS阵列要分给那么多的虚拟机用,而且要兼顾到定时备份,所以IO性能肯定不能给的太高,一旦某些用户占用高IO,影响了其他ECS的性能,这也是不可取的,而且目前想无缝化(不关机)提升IO性能还是比较难做到的。 硬件底层的问题,要提高IO能力,需要添加更多的SAS硬盘来提高整体的速度或者更换SSD硬盘。 现在存储服务器基本上都是做的阵列,如果在已经做好阵列的存储服务器上再加硬盘,需要将数据备份到异地,然后所有硬盘重置数据,再组阵列,然后再将之前的数据导入,这种情况无法做到不关机。同样如果是更换SSD硬盘来提升IO,肯定也要先迁移原先的ECS到备用物理节点,等SSD就位再迁移回来。 阿里云的用户量应该不是一个小数字,要完成整体升级肯定要很多时间,而且还要额外付出不小资金和人力。 ------------------------- 回6楼服务器之家的帖子 其实目前最可行的办法就是,推出高IO,SSD硬盘的ECS购买,想要目前的ECS全部升级到SSD硬盘基本是不可能的。一块企业级的SSD价格都抵得上一台物理服务器了,阿里会这么好心去多花一倍的钱? Linode提供的都是Linux类型系统,系统模板迁移比较快,阿里云兼顾到windows,估计难度大点,因为镜像多

high飞起 2019-12-02 00:19:12 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

Centos 系统优化思路整理

holdb 2019-12-01 22:03:44 8681 浏览量 回答数 5

问题

推荐一个Linux系统管理Web面板Webmin

朝晖_ 2019-12-01 21:29:47 12529 浏览量 回答数 4

回答

iis7或者iis7.5 跑php还是很牛的,配置的好1分钟承受2万并发没问题,不比linux下的nginx差哪,我所在的nginx cn群的一个北京某网站运维专门测试过,主要看怎么去配置和优化 ------------------------- 回 3楼(ivmmff) 的帖子 我不知道楼主那3个站需要多少资源,没什么好建议的,我只是说iis7-7.5跑php的性能,当然主要的还是看什么人使用 ------------------------- 就楼主这样,换成我,我使用varnish混合缓存,把站点缓存到内存里,啥快都没内存快2核 4G 分1-2G内存做varnish缓存,看看效果,秒杀物理ssd阵列我说的不是阿里云的所谓ssd,我说的是平时大家用的那种ssd

买醉 2019-12-02 02:54:31 0 浏览量 回答数 0

回答

Re西部数码云主机根本与阿里云不是一个层次 西部数码云是基于hyper-V,但不是星外VPS,是自行基于win2008系统开发的。所使用的存储方式为SAS磁盘阵列柜,所以磁盘IO比阿里要高出不少。 sata只是用于异盘备份的,目的在于防止阵列损坏或客户的文件被误删除等特殊情况下的恢复。至于磁盘大小,除去备份盘不说,也非常有竞争力。对于数据量大的朋友有优势。 西部数码的即有独立IP的,也有共享IP的,机房有近10个可选。有单线带宽大的,有双线的,也有港台不备案的,能满足不同层次的客户需求。 亚洲云是电信 香港IP,并非铁通,也没说过是“自建”的,西部数码的所有机房都是电信、网通等运营商提供的,自己不建机房。 集成wdcp是为了方便部分不懂linux的客户,不用可以删除。并非wdcp的漏洞,也非vps密码简单,而是部分客户使用了一款第三方含有木马的汉化软件putty导致的。 好与坏,用了的客户才知道。 持续、显著增加的客户数量才有说服力。 ------------------------- Re西部数码云主机根本与阿里云不是一个层次 客观地说,阿里云很强,但西部数码也没你说的这么差吧? 西部数码从没说过自己是“全国第一”,不知道楼上的依据什么? 其产品和机房都在网站上有公布,你说的“号称是自建双线机房”请问信息是源于何处? 或许曾经的某段时间给你留下了不好的印象,但现在或许已有改观。 如果你仍在用西部数码的产品,请发下网址和所使用的产品型号,让大伙实际看看吧。。 如果你已经转用阿里云的产品了。。。不说了。

monday 2019-12-01 23:43:44 0 浏览量 回答数 0

问题

linux下使用rsync远程定时备份服务器数据

小柒2012 2019-12-01 21:46:27 9503 浏览量 回答数 2

问题

OracleASM管理

男刊 2019-12-01 21:33:34 7934 浏览量 回答数 2

问题

使用 dd 命令实现 SAN 存储的快照数据迁移:报错

kun坤 2020-06-06 12:01:16 1 浏览量 回答数 1

回答

我想到的一个简单可能性是,在常见情况下,每个值保留一个压缩数组,每个值2位,而每个值分隔一个4字节(原始元素索引为24位,实际值为8位,因此(idx << 8) | value))其他的。 查找值时,首先要在2bpp数组(O(1))中进行查找。如果找到0、1或2,则为您想要的值;如果找到3,则意味着您必须在辅助阵列中查找它。在这里,您将执行二进制搜索以查找感兴趣的索引左移8(O(log(n)的n较小,因为它应该是1%),然后从4-中提取值字节的东西。 std::vector<uint8_t> main_arr; std::vector<uint32_t> sec_arr; uint8_t lookup(unsigned idx) { // extract the 2 bits of our interest from the main array uint8_t v = (main_arr[idx>>2]>>(2*(idx&3)))&3; // usual (likely) case: value between 0 and 2 if(v != 3) return v; // bad case: lookup the index<<8 in the secondary array // lower_bound finds the first >=, so we don't need to mask out the value auto ptr = std::lower_bound(sec_arr.begin(), sec_arr.end(), idx<<8); #ifdef _DEBUG // some coherency checks if(ptr == sec_arr.end()) std::abort(); if((*ptr >> 8) != idx) std::abort(); #endif // extract our 8-bit value from the 32 bit (index, value) thingie return (*ptr) & 0xff; } void populate(uint8_t *source, size_t size) { main_arr.clear(); sec_arr.clear(); // size the main storage (round up) main_arr.resize((size+3)/4); for(size_t idx = 0; idx < size; ++idx) { uint8_t in = source[idx]; uint8_t &target = main_arr[idx>>2]; // if the input doesn't fit, cap to 3 and put in secondary storage if(in >= 3) { // top 24 bits: index; low 8 bit: value sec_arr.push_back((idx << 8) | in); in = 3; } // store in the target according to the position target |= in << ((idx & 3)2); } } 对于您建议的数组,第一个数组应为10000000/4 = 2500000字节,第二个数组应为10000000 * 1% 4 B = 400000字节;因此,有2900000个字节,即少于原始数组的三分之一,并且最常使用的部分全部保存在内存中,这对于缓存来说应该是不错的选择(它甚至可以容纳L3)。 如果您需要超过24位寻址,则必须调整“辅助存储”。扩展它的一种简单方法是使用256个元素的指针数组来切换索引的前8位,然后转发到如上所述的24位索引排序数组。 快速基准 #include #include #include <stdint.h> #include #include <stdio.h> #include <math.h> using namespace std::chrono; /// XorShift32 generator; extremely fast, 2^32-1 period, way better quality /// than LCG but fail some test suites struct XorShift32 { /// This stuff allows to use this class wherever a library function /// requires a UniformRandomBitGenerator (e.g. std::shuffle) typedef uint32_t result_type; static uint32_t min() { return 1; } static uint32_t max() { return uint32_t(-1); } /// PRNG state uint32_t y; /// Initializes with seed XorShift32(uint32_t seed = 0) : y(seed) { if(y == 0) y = 2463534242UL; } /// Returns a value in the range [1, 1<<32) uint32_t operator()() { y ^= (y<<13); y ^= (y>>17); y ^= (y<<15); return y; } /// Returns a value in the range [0, limit); this conforms to the RandomFunc /// requirements for std::random_shuffle uint32_t operator()(uint32_t limit) { return (*this)()%limit; } }; struct mean_variance { double rmean = 0.; double rvariance = 0.; int count = 0; void operator()(double x) { ++count; double ormean = rmean; rmean += (x-rmean)/count; rvariance += (x-ormean)*(x-rmean); } double mean() const { return rmean; } double variance() const { return rvariance/(count-1); } double stddev() const { return std::sqrt(variance()); } }; std::vector<uint8_t> main_arr; std::vector<uint32_t> sec_arr; uint8_t lookup(unsigned idx) { // extract the 2 bits of our interest from the main array uint8_t v = (main_arr[idx>>2]>>(2*(idx&3)))&3; // usual (likely) case: value between 0 and 2 if(v != 3) return v; // bad case: lookup the index<<8 in the secondary array // lower_bound finds the first >=, so we don't need to mask out the value auto ptr = std::lower_bound(sec_arr.begin(), sec_arr.end(), idx<<8); #ifdef _DEBUG // some coherency checks if(ptr == sec_arr.end()) std::abort(); if((*ptr >> 8) != idx) std::abort(); #endif // extract our 8-bit value from the 32 bit (index, value) thingie return (*ptr) & 0xff; } void populate(uint8_t *source, size_t size) { main_arr.clear(); sec_arr.clear(); // size the main storage (round up) main_arr.resize((size+3)/4); for(size_t idx = 0; idx < size; ++idx) { uint8_t in = source[idx]; uint8_t &target = main_arr[idx>>2]; // if the input doesn't fit, cap to 3 and put in secondary storage if(in >= 3) { // top 24 bits: index; low 8 bit: value sec_arr.push_back((idx << 8) | in); in = 3; } // store in the target according to the position target |= in << ((idx & 3)*2); } } volatile unsigned out; int main() { XorShift32 xs; std::vector<uint8_t> vec; int size = 10000000; for(int i = 0; i<size; ++i) { uint32_t v = xs(); if(v < 1825361101) v = 0; // 42.5% else if(v < 4080218931) v = 1; // 95.0% else if(v < 4252017623) v = 2; // 99.0% else { while((v & 0xff) < 3) v = xs(); } vec.push_back(v); } populate(vec.data(), vec.size()); mean_variance lk_t, arr_t; for(int i = 0; i<50; ++i) { { unsigned o = 0; auto beg = high_resolution_clock::now(); for(int i = 0; i < size; ++i) { o += lookup(xs() % size); } out += o; int dur = (high_resolution_clock::now()-beg)/microseconds(1); fprintf(stderr, "lookup: %10d µs\n", dur); lk_t(dur); } { unsigned o = 0; auto beg = high_resolution_clock::now(); for(int i = 0; i < size; ++i) { o += vec[xs() % size]; } out += o; int dur = (high_resolution_clock::now()-beg)/microseconds(1); fprintf(stderr, "array: %10d µs\n", dur); arr_t(dur); } } fprintf(stderr, " lookup | ± | array | ± | speedup\n"); printf("%7.0f | %4.0f | %7.0f | %4.0f | %0.2f\n", lk_t.mean(), lk_t.stddev(), arr_t.mean(), arr_t.stddev(), arr_t.mean()/lk_t.mean()); return 0; } (代码和数据始终在我的Bitbucket中更新) 上面的代码使用在其帖子中指定的OP分配的随机数据填充10M元素数组,初始化我的数据结构,然后: 使用我的数据结构执行10M元素的随机查找 通过原始数组执行相同操作。 (请注意,在顺序查找的情况下,数组总是在很大程度上赢得胜利,因为它是您可以进行的最便于缓存的查找) 最后两个块重复50次并定时;最后,计算并打印每种类型的查询的平均值和标准差,并显示提速率(lookup_mean / array_mean)。 我-O3 -static在Ubuntu 16.04 上使用g ++ 5.4.0(以及一些警告)编译了上面的代码,并在某些计算机上运行了该代码;其中大多数运行Ubuntu 16.04,一些较旧的Linux,一些较新的Linux。在这种情况下,我认为操作系统根本不重要。 CPU | cache | lookup (µs) | array (µs) | speedup (x) Xeon E5-1650 v3 @ 3.50GHz | 15360 KB | 60011 ± 3667 | 29313 ± 2137 | 0.49 Xeon E5-2697 v3 @ 2.60GHz | 35840 KB | 66571 ± 7477 | 33197 ± 3619 | 0.50 Celeron G1610T @ 2.30GHz | 2048 KB | 172090 ± 629 | 162328 ± 326 | 0.94 Core i3-3220T @ 2.80GHz | 3072 KB | 111025 ± 5507 | 114415 ± 2528 | 1.03 Core i5-7200U @ 2.50GHz | 3072 KB | 92447 ± 1494 | 95249 ± 1134 | 1.03 Xeon X3430 @ 2.40GHz | 8192 KB | 111303 ± 936 | 127647 ± 1503 | 1.15 Core i7 920 @ 2.67GHz | 8192 KB | 123161 ± 35113 | 156068 ± 45355 | 1.27 Xeon X5650 @ 2.67GHz | 12288 KB | 106015 ± 5364 | 140335 ± 6739 | 1.32 Core i7 870 @ 2.93GHz | 8192 KB | 77986 ± 429 | 106040 ± 1043 | 1.36 Core i7-6700 @ 3.40GHz | 8192 KB | 47854 ± 573 | 66893 ± 1367 | 1.40 Core i3-4150 @ 3.50GHz | 3072 KB | 76162 ± 983 | 113265 ± 239 | 1.49 Xeon X5650 @ 2.67GHz | 12288 KB | 101384 ± 796 | 152720 ± 2440 | 1.51 Core i7-3770T @ 2.50GHz | 8192 KB | 69551 ± 1961 | 128929 ± 2631 | 1.85 结果好坏参半! 通常,在大多数这些机器上都有某种程度的加速,或者至少它们是同等的。 在阵列真正胜过“智能结构”查找的两种情况下,它们是在具有大量缓存但并不特别忙的机器上:上面的Xeon E5-1650(15 MB缓存)是一台夜间构建机器,目前相当闲置;Xeon E5-2697(35 MB高速缓存)是一台用于高性能计算的计算机,它也处于空闲状态。确实有道理,原始数组完全适合其巨大的缓存,因此紧凑的数据结构只会增加复杂性。 在“性能范围”的另一面-但是阵列又稍微快一点,有不起眼的Celeron为我的NAS提供动力。它的缓存非常少,以至于数组和“智能结构”都无法放入其中。缓存足够小的其他计算机也具有类似的性能。 Xeon X5650必须格外小心-它们是非常繁忙的双路虚拟机服务器上的虚拟机;可能是,尽管名义上它具有相当数量的缓存,但是在测试期间,它多次被完全不相关的虚拟机抢占了先机。

保持可爱mmm 2020-02-07 01:13:22 0 浏览量 回答数 0

回答

Cassandra操作 本文档操作都是在单数据中心,Vnode上操作 1.1. 添加节点到集群中 1.1.1. 添加非seed单节点 1.在新节点上安装Cassandra,但不要启动 2.修改cassandra.yaml文件: cluster_name – 新节点加入集群名称 listen_address/rpc_address – 新节点IP seed_provider – 集群seeds列表 3.启动新节点Cassandra 4.使用nodetool status验证节点是否启动完毕:状态为UN 5.运行nodetool cleanup(或OpsCenter)在集群节点上:移除脏数据(建议在低峰执行) 1.2. 添加非seed单节点案例: 已经存在Cassandra集群: cluster_name = ‘Test Cluster’ xxx_address = 192.168.92.148 seed_provider = 192.168.92.148 wKiom1cppL3B4g3eAAAi2QSK7_A312.png 添加新节点192.168.92.149: 1.安装Cassandra 参考《Cassandra教程》 wKioL1cppdWBh1E0AAAqS7BJjj8685.png 2.修改cassandra.yaml cluster_name: wKiom1cppRyQgL1OAAAJH-7ICJM624.png seed_provider wKiom1cppTGRTNDYAAAFzgKBsxI614.png listen_address: wKiom1cppUKSINlaAAARH9Y2M4k195.png rpc_address: wKioL1cppiuSXaHTAAAwhOPL0cU905.png 3.启动Cassandra wKiom1cppWrQEh_ZAAAHfko1RTA314.png 4.验证新节点192.168.92.149是否启动完毕 wKioL1cpplGjOAObAAAwiZhPyqs058.png 5.删除192.168.92.148上的脏数据 wKioL1cppnDRvX69AAAJU_XNzH8484.png 或者 wKiom1cppa6zkjcMAAEQ_CWmkCk571.png 1.1.3. 添加非seed多个节点 步骤参考1.1.1,唯一不同点步骤3,启动Cassandra需要同时启动,避免数据多次迁移。 wKiom1cppcXgG_yVAAATIyr-29o972.png wKioL1cppqqx_7fCAAAJIH1hzKU774.png 1.1.4. 添加seed节点 由于seed需要修改cassandra.yaml文件,所以需要重启所有节点 1.先将seed作为非seed节点安装启动,完成数据迁移操作 步骤参考1.1.1 2.修改所有节点的cassandra.yaml文件,添加seed 3.重启所有节点 1.2. 替换一个dead节点 由于一些硬盘损坏等原因,需要执行替换dead节点 1.确保dead节点状态为DN,使用nodetool status: wKioL1cppsGzufqHAADpeBCNoHM141.png 注意Address需要在下面步骤用到 2.修改新节点cassandra.yaml文件:参考1.1.1 3.启动新节点,使用replace_address选项: $ sudo bin/cassandra -Dcassandra.replace_address=address_of_dead_node 删除节点:参考1.4(建议72小时之后操作,确保gossip删除掉了老节点) 1.3. 替换一个running节点 由于升级新硬件等原因,需要使用新节点替换 添加新节点到集群中,参考步骤1.1.1 确保替换running节点状态为UN,使用nodetoolstatus: wKiom1cpphiDrWPlAAA1B_i8fJk015.png 4.删除running节点,参考1.4 1.4. 删除节点 1.4.1. 删除UN状态节点 运行nodetooldecommission删除UN节点 wKioL1cppv_j7ZivAAAH3iGF5ks849.png 或者: wKiom1cppjmTCRaaAAE-5vBVfQI416.png 1.4.2. 删除DN状态节点 运行nodetoolremovenode命令 wKiom1cppkrQRrCpAAAItR3PQ6g995.png 注意 如果以上步骤无法删除,可能是由于节点存在脏数据,请运行nodetool assassinate,强制删除 1.5. 修改ReplicationFactor 1.5.1. ReplicationFactor减少 运行nodetool cleanup,删除脏数据 或者: wKioL1cpp0Situ8oAAEQ_GnCSZU529.png 1.5.2. ReplicationFactor增加 运行nodetool repair,迁移数据 或者: wKioL1cpp2bw3WA-AAEwA_ieu7E092.png Cassandra优化 2.1. 安装前配置建议 2.1.1. 安装jemalloc jemalloc适合多线程下内存分配管理 wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2 tar xjf jemalloc-3.6.0.tar.bz2 cd jemalloc-3.6.0 ./configure make &&make install echo '/usr/local/lib'>/etc/ld.so.conf.d/local.conf ldconfig wKioL1cpp5HyAG8oAAA3jpQPa8Y101.png 2.1.2. 安装NTP (略) 2.1.3. Commit log和data目录在独立硬盘 wKioL1cpp6PyIWveAAAvC7KYWAI807.png wKiom1cppt2gKIqAAAAhpSf2WaI010.png 2.1.4. 硬盘类型 硬盘类型 SSD(微秒) SAS(毫秒) SATA(秒) 延迟 100~120 8~40 15 2.1.5. Linux优化 1.文件操作符 /etc/security/limits.conf nofile 65535 memlock unlimited – nofile 32768 – as unlimited /etc/security/limits.d/90-nproc.conf nproc 32768 2.Swap /etc/sysctl.conf vm.max_map_count = 131072 #最大限度使用物理内存 vm.swappiness = 0 使之生效 sysctl -p 永久关闭swap swapoff –a /etc/fstab:注释掉swap wKiom1cppyKA6sJrAAAzLjQpz9o105.png 3.NUMA echo 0 > /proc/sys/vm/zone_reclaim_mode 4.文件系统类型 EXT4 2.1.6. 磁盘阵列RAID优化 使用高效性能RAID0 sudo blockdev --setra 128 /dev/ 2.1.7. cassandra-evn.sh配置建议 JVM配置在cassandra-evn.sh中 MAX_HEAP_SIZE 生产环境建议8G wKiom1cpp1GwzHp0AACEXhULvLs062.png HEAP_NEWSIZE 一般设置为MAX_HEAP_SIZE的1/4 添加cassandra压缩线程级别,减少其资源占用 -Dcassandra.compaction.priority=1 打开JVM压缩,减少内存占用,适用于64位JVM -XX:+UseCompressedOops wKiom1cpp4KxPqHZAABZY1Ttqvc623.png 2.1.8. cassandra.yaml配置建议 concurrent_reads:16 * number_of_drives concurrent_counter_writes:16 * number_of_drives concurrent_writes:8 * number_of_cores #使用Memory Mapped File IO,性能超过Standard IO,64位 disk_access_mode: mmap #write性能提升5% memtable_allocation_type: offheap_objects 2.2. 安装后监控——定位——优化 2.2.1. nodetool tpstats 线程池使用统计,看是否有积压线程 wKiom1cpp6nTmTMAAABUQAaTpeo434.png 或者使用OpsCenter wKioL1cpqJCz6-lvAAA-lJo_EU0610.png wKioL1cpqKWDALVwAAAmDlC-FsU281.png 2.2.2. Read Requests/Write Requests 结合CPU和Disk使用监控,来判断系统每秒可以支持的操作数量 wKiom1cpp_DQtQE8AABRdkfpp3w679.png wKioL1cpqMbC1TDwAAA-wD4PguY526.png 2.2.3. total Memtable size 与内存使用比较,确保大的memtable不会导致内存竞争,大的memtable有利于写多读少情况 wKioL1cpqOKCHLMgAAAk_7lutxM979.png 2.2.4. SSTable count 确保sstablecount比较低(个位数),每次读操作会检查所有sstable,太多的sstable影响read性能 wKioL1cpqPaDs7LMAAAncf0Pt6g071.png 2.2.5. total bytes compacted 确保不会发生频繁操作 wKioL1cpqQiwB3gFAAA_LtjQpYs529.png 2.2.6. read latency/write latency 确保延迟在可接受范围之内,不包含网络延迟 wKioL1cpqSPCdxQWAAAnjLcjGm4907.png wKiom1cpqE6TT1WAAAAnQwgF-7o431.png 出问题后定位 writelatency写响应平均时长(以毫秒为单位)。依赖于consistency level和replication factor,也包含了写replicas的网络延迟 read latency受到硬盘,网络和应用程序读的方式等影响。比如,使用二级索引,读请求数据大小,client需要的consistencylevel都将影响readlatency。I/O的争用也会增加read latency。当SSTables有很多碎片,compaction跟不上写负载则读也会变慢。 2.2.7. partition size 监控表分区大小,确保max不超过100M wKiom1cpqG2zVpQaAAAl8484Yio823.png 2.2.8. cell count 监控表cell count,确保不超过20亿 wKioL1cpqVeCp-SOAAAkXqDKpLU110.png 2.2.9. write Read active 读写请求数 wKioL1cpqWnjxZXkAAAqG5kF0pA383.png 2.2.10. OS系统监控 监控CPU、Memory、Disk的使用率、饱和度。 wKioL1cpqYzy_ASAAAAhDAPQE1U728.png wKiom1cpqLjjAFHLAAAlkQpGBhY571.png wKioL1cpqY3QeNSrAAAhZsQei-k449.png 转载于:https://blog.51cto.com/eric100/1770036

养狐狸的猫 2019-12-02 02:11:44 0 浏览量 回答数 0

回答

服务器和操作系统 1、主板的两个芯片分别是什么芯片,具备什么作用? 北桥:离CPU近,负责CPU、内存、显卡之间的通信。 南桥:离CPU远,负责I/O总线之间的通信。 2、什么是域和域控制器? 将网络中的计算机逻辑上组织到一起,进行集中管理,这种集中管理的环境称为域。 在域中,至少有一台域控制器,域控制器中保存着整个域的用户账号和安全数据,安装了活动目录的一台计算机为域控制器,域管理员可以控制每个域用户的行为。 3、现在有300台虚拟机在云上,你如何进行管理? 1)设定堡垒机,使用统一账号登录,便于安全与登录的考量。 2)使用ansiable、puppet进行系统的统一调度与配置的统一管理。 3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。 4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点 磁盘冗余阵列(Redundant Arrays of Independent Disks,RAID),把硬盘整合成一个大磁盘,在大磁盘上再分区,存放数据、多块盘放在一起可以有冗余(备份)。 RAID整合方式有很多,常用的:0 1 5 10 RAID 0:可以是一块盘和N个盘组合 优点:读写快,是RAID中最好的 缺点:没有冗余,一块坏了数据就全没有了 RAID 1:只能2块盘,盘的大小可以不一样,以小的为准 10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高 RAID 5 :3块盘,容量计算10*(n-1),损失一块盘 特点:读写性能一般,读还好一点,写不好 总结: 冗余从好到坏:RAID1 RAID10 RAID 5 RAID0 性能从好到坏:RAID0 RAID10 RAID5 RAID1 成本从低到高:RAID0 RAID5 RAID1 RAID10 5、linux系统里,buffer和cache如何区分? buffer和cache都是内存中的一块区域,当CPU需要写数据到磁盘时,由于磁盘速度比较慢,所以CPU先把数据存进buffer,然后CPU去执行其他任务,buffer中的数据会定期写入磁盘;当CPU需要从磁盘读入数据时,由于磁盘速度比较慢,可以把即将用到的数据提前存入cache,CPU直接从Cache中拿数据要快的多。 6、主机监控如何实现? 数据中心可以用zabbix(也可以是nagios或其他)监控方案,zabbix图形界面丰富,也自带很多监控模板,特别是多个分区、多个网卡等自动发现并进行监控做得非常不错,不过需要在每台客户机(被监控端)安装zabbix agent。 如果在公有云上,可以使用云监控来监控主机的运行。 网络 7、主机与主机之间通讯的三要素有什么? IP地址、子网掩码、IP路由 8、TCP和UDP都可以实现客户端/服务端通信,这两个协议有何区别? TCP协议面向连接、可靠性高、适合传输大量数据;但是需要三次握手、数据补发等过程,耗时长、通信延迟大。 UDP协议面向非连接、可靠性低、适合传输少量数据;但是连接速度快、耗时短、延迟小。 9、简述TCP协议三次握手和四次分手以及数据传输过程 三次握手: (1)当主机A想同主机B建立连接,主机A会发送SYN给主机B,初始化序列号seq=x。主机A通过向主机B发送SYS报文段,实现从主机A到主机B的序列号同步,即确定seq中的x。 (2)主机B接收到报文后,同意与A建立连接,会发送SYN、ACK给主机A。初始化序列号seq=y,确认序号ack=x+1。主机B向主机A发送SYN报文的目的是实现从主机B到主机A的序列号同步,即确定seq中的y。 (3)主机A接收到主机B发送过来的报文后,会发送ACK给主机B,确认序号ack=y+1,建立连接完成,传输数据。 四次分手: (1)当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段,初始化序号seq=x。 (2)主机B收到这个FIN报文段,并不立即用FIN报文段回复主机A,而是想主机A发送一个确认序号ack=x+1,同时通知自己的应用程序,对方要求关闭连接(先发ack是防止主机A重复发送FIN报文)。 (3)主机B发送完ack确认报文后,主机B 的应用程序通知TCP我要关闭连接,TCP接到通知后会向主机A发送一个带有FIN附加标记的报文段,初始化序号seq=x,ack=x+1。 (4)主机A收到这个FIN报文段,向主机B发送一个ack确认报文,ack=y+1,表示连接彻底释放。 10、SNAT和DNAT的区别 SNAT:内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。 DNAT:当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。 数据库 11、叙述数据的强一致性和最终一致性 强一致性:在任何时刻所有的用户或者进程查询到的都是最近一次成功更新的数据。强一致性是程度最高一致性要求,也是最难实现的。关系型数据库更新操作就是这个案例。 最终一致性:和强一致性相对,在某一时刻用户或者进程查询到的数据可能都不同,但是最终成功更新的数据都会被所有用户或者进程查询到。当前主流的nosql数据库都是采用这种一致性策略。 12、MySQL的主从复制过程是同步的还是异步的? 主从复制的过程是异步的复制过程,主库完成写操作并计入binlog日志中,从库再通过请求主库的binlog日志写入relay中继日志中,最后再执行中继日志的sql语句。 **13、MySQL主从复制的优点 ** 如果主服务器出现问题,可以快速切换到从服务器提供的服务; 可以在从服务器上执行查询操作,降低主服务器的访问压力; 可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。 14、redis有哪些数据类型? (一)String 最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。 (二)hash 这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。做单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。 (三)list 使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。 (四)set 因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。 另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。 (五)Zset Zset多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。另外,sorted set可以用来做延时任务。最后一个应用就是可以做范围查找。 15、叙述分布式数据库及其使用场景? 分布式数据库应该是数据访问对应用透明,每个分片默认采用主备架构,提供灾备、恢复、监控、不停机扩容等整套解决方案,适用于TB或PB级的海量数据场景。 应用 16、Apache、Nginx、Lighttpd都有哪些特点? Apache特点:1)几乎可以运行在所有的计算机平台上;2)支持最新的http/1.1协议;3)简单而且强有力的基于文件的配置(httpd.conf);4)支持通用网关接口(cgi);5)支持虚拟主机;6)支持http认证,7)集成perl;8)集成的代理服务器;9)可以通过web浏览器监视服务器的状态,可以自定义日志;10)支持服务器端包含命令(ssi);11)支持安全socket层(ssl);12)具有用户绘画过程的跟踪能力;13)支持fastcgi;14)支持java servlets Nginx特点:nginx是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器,处理静态文件,索引文件以及自动索引,无缓存的反向代理加速,简单的负载均衡和容错,具有很高的稳定性,支持热部署。 Lighttpd特点:是一个具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块,Lighttpd是众多opensource轻量级的webserver中较为优秀的一个,支持fastcgi,cgi,auth,输出压缩,url重写,alias等重要功能。 17、LVS、NGINX、HAPROXY的优缺点? LVS优点:具有很好的可伸缩性、可靠性、可管理性。抗负载能力强、对内存和CPU资源消耗比较低。工作在四层上,仅作分发,所以它几乎可以对所有的应用做负载均衡,且没有流量的产生,不会受到大流量的影响。 LVS缺点:软件不支持正则表达式处理,不能做动静分离,如果web应用比较庞大,LVS/DR+KEEPALIVED实施和管理比较复杂。相对而言,nginx和haproxy就简单得多。 nginx优点:工作在七层之上,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则规则比haproxy更为强大和灵活。对网络稳定性依赖非常小。理论上能PING就能进行负载均衡。配置和测试简单,可以承担高负载压力且稳定。nginx可以通过端口检测到服务器内部的故障。比如根据服务器处理网页返回的状态码、超时等。并且可以将返回错误的请求重新发送给另一个节点,同时nginx不仅仅是负载均衡器/反向代理软件。同时也是功能强大的web服务器,可以作为中层反向代理、静态网页和图片服务器使用。 nginx缺点:不支持URL检测,仅支持HTTP和EMAIL,对session的保持,cookie的引导能力相对欠缺。 Haproxy优点:支持虚拟主机、session的保持、cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。支持TCP协议的负载均衡;单纯从效率上讲比nginx更出色,且负载策略非常多。 aproxy缺点:扩展性能差;添加新功能很费劲,对不断扩展的新业务很难对付。 18、什么是中间件?什么是jdk? 中间件介绍: 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源 中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯 是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口 但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递 通过中间件,应用程序可以工作于多平台或OS环境。 jdk:jdk是Java的开发工具包 它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境 19、日志收集、日志检索、日志展示的常用工具有哪些? ELK或EFK。 Logstash:数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。 Kibana:可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。 Elasticsearch:分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。 Filebeat:轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,逐渐取代其位置。 20、什么是蓝绿发布和灰度发布? 蓝绿:旧版本-新版本 灰度:新旧版本各占一定比例,比例可自定义 两种发布都通过devops流水线实现

剑曼红尘 2020-03-23 15:51:44 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站